MCPcopy Index your code
hub / github.com/codebymitch/TitanBot / reconcileReactionRoleMessages

Function reconcileReactionRoleMessages

src/services/reactionRoleService.js:417–495  ·  view source on GitHub ↗
(client, guildId = null)

Source from the content-addressed store, hash-verified

415}
416
417export async function reconcileReactionRoleMessages(client, guildId = null) {
418 const summary = {
419 scannedGuilds: 0,
420 scannedMessages: 0,
421 removedMessages: 0,
422 errors: 0
423 };
424
425 try {
426 const targetGuildIds = guildId
427 ? [guildId]
428 : Array.from(client.guilds.cache.keys());
429
430 for (const targetGuildId of targetGuildIds) {
431 summary.scannedGuilds += 1;
432
433 let reactionRoleMessages = [];
434 try {
435 reactionRoleMessages = await getAllReactionRoleMessages(client, targetGuildId);
436 } catch (error) {
437 summary.errors += 1;
438 logger.warn(`Failed to fetch reaction role messages for reconciliation in guild ${targetGuildId}:`, error);
439 continue;
440 }
441
442 if (!reactionRoleMessages.length) {
443 continue;
444 }
445
446 const guild = client.guilds.cache.get(targetGuildId) || await client.guilds.fetch(targetGuildId).catch(() => null);
447 if (!guild) {
448 for (const reactionRoleMessage of reactionRoleMessages) {
449 summary.scannedMessages += 1;
450 await client.db.delete(`reaction_roles:${targetGuildId}:${reactionRoleMessage.messageId}`);
451 summary.removedMessages += 1;
452 }
453 logger.info(`Removed ${reactionRoleMessages.length} stale reaction role message(s) for unavailable guild ${targetGuildId}`);
454 continue;
455 }
456
457 for (const reactionRoleMessage of reactionRoleMessages) {
458 summary.scannedMessages += 1;
459
460 try {
461 const channel = guild.channels.cache.get(reactionRoleMessage.channelId)
462 || await guild.channels.fetch(reactionRoleMessage.channelId).catch(() => null);
463
464 if (!channel || !channel.isTextBased?.()) {
465 await client.db.delete(`reaction_roles:${targetGuildId}:${reactionRoleMessage.messageId}`);
466 summary.removedMessages += 1;
467 continue;
468 }
469
470 const message = await channel.messages.fetch(reactionRoleMessage.messageId).catch(() => null);
471 if (!message) {
472 await client.db.delete(`reaction_roles:${targetGuildId}:${reactionRoleMessage.messageId}`);
473 summary.removedMessages += 1;
474 }

Callers 1

executeFunction · 0.90

Calls 3

getMethod · 0.45
deleteMethod · 0.45

Tested by

no test coverage detected