Discord机器人Bump Reminder功能故障排查与解决
问题解决方案
问题已解决说明
我已定位问题根源:因需求描述不准确导致误解。实际需求是监听用户向DISBOARD机器人发送的/bump指令,而非监听用户向自己开发的机器人发送该指令。通过插入以下代码即可解决:
if (message.interaction && message.interaction.commandName === "page" && message.author.id === "302050872383242240") {
原问题描述
我近一个月在开发Discord机器人,其中包含Bump Reminder功能:当用户成功执行/bump指令后,机器人发送感谢消息,并在2小时后@Bump Reminder角色提醒再次执行bump。
但遇到问题:执行/bump后,频道无任何反馈,控制台也无输出。我使用Discord.js v13,不确定是否v13不支持Interactions,但确认过该版本是支持的。
我尝试通过interactionCreate事件处理,但问题依旧,怀疑是事件写法有误,相关代码如下:
Bump Reminder功能代码
const config = require('../../config/config'); console.log('Bump Reminder Loaded!!'); const Discord = require('discord.js'); module.exports = async (client, interaction) => { try { const roleId = config.plugins.bumpreminder.roleID; console.log('Role ID:', roleId); const role = interaction.guild.roles.cache.get(roleId); console.log('Role:', role); const channel = interaction.guild.channels.cache.get(config.plugins.bumpreminder.channelID); console.log('Channel:', channel); if (!role) { console.log(`Error: Could not find role with ID ${roleId} in server ${interaction.guild.name}.`); return; } if (interaction.commandName === "bump" && interaction.user.id === "302050872383242240") { const reminderEmbed = new Discord.MessageEmbed() .setTitle('Thank You For Bumping!!') .setDescription(`Please Check Back in 2 Hours!!`) .setColor('BLUE') .setTimestamp(); await interaction.reply({ embeds: [reminderEmbed] }); setTimeout(() => { channel.send(`<@&${roleId}> Don't forget to bump the server to get more members!`); }, 2 * 60 * 60 * 1000); } } catch (error) { console.error(error); } };
interactionCreate事件代码
const eventName = 'interactionCreate'; module.exports = async (Discord, client, interaction) => { const config = require('../../config/config'); const bumpReminder = require('./bumpreminder.js'); try { bumpReminder(Discord, client, interaction); } catch (error) { console.log(error); } };
事件处理器代码
const path = require('path'); const fs = require('fs'); const client = require('../index'); console.log(`Event Handler Started at ${new Date().toLocaleString()}`); module.exports = (Discord, client) => { try { const load_dir = (dir) => { const event_files = fs.readdirSync(path.join(__dirname, '..', dir)).filter(file => file.endsWith('.js')); for (const file of event_files) { const event = require(`../events/${file}`); let event_name; if (file === 'message.js') { event_name = 'messageCreate'; } else if (file === 'guildCreate.js') { event_name = 'guildCreate'; } else if (file === 'autorole.js') { event_name = 'guildMemberUpdate'; } else if (file === 'greeter.js') { event_name = 'guildMemberAdd'; } else if (file === 'leaver.js') { event_name = 'guildMemberRemove'; } else if (file === 'ghostping.js') { event_name = 'messageDelete'; } else if (file === 'interactions.js') { event_name = 'interactionCreate'; } else { event_name = event.eventName || file.split('.')[0]; } client.on(event_name, event.bind(null, Discord, client)); } } load_dir('events'); } catch (error) { console.error(error); } };
内容的提问来源于stack exchange,提问作者TechXplore
相关产品推荐
相关产品推荐

