如何在Discord.js中实现命令回复时自动提及触发用户?
解决Discord.js中Slash Command自动提及触发用户的问题
我懂你的困扰——你已经在客户端配置里加了allowedMentions: { repliedUser: true },但用Slash Command(比如你的ping命令)回复时,并没有自动@触发命令的用户。这是因为交互命令的回复配置会覆盖客户端的全局设置,你需要在interaction.reply()的参数里显式指定这个选项。
单个命令的快速修改方案
直接调整你的ping命令代码,在reply的选项中补充allowedMentions配置即可:
module.exports = { name: 'ping', description: 'Replies with Pong!', async execute(interaction) { await interaction.reply({ content: 'Pong!', allowedMentions: { repliedUser: true } // 添加这一行实现自动提及 }); }, };
这样用户触发/ping时,机器人的回复就会自动@该用户了。
全局统一配置的优化方案
如果不想给每个命令都重复写这段配置,可以在客户端的interactionCreate事件里统一处理。比如在你的events文件夹中修改对应的事件文件:
// interactionCreate事件示例代码 module.exports = { name: 'interactionCreate', async execute(interaction, client) { if (!interaction.isCommand()) return; const command = client.commands.get(interaction.commandName); if (!command) return; try { // 统一传入自动提及的配置给所有命令 await command.execute(interaction, { allowedMentions: { repliedUser: true } }); } catch (error) { console.error(error); await interaction.reply({ content: '执行命令时出现错误!', ephemeral: true }); } }, };
对应的命令文件也要调整execute方法,接收并使用这个全局配置:
// 修改后的ping命令 module.exports = { name: 'ping', description: 'Replies with Pong!', async execute(interaction, globalOptions) { await interaction.reply({ content: 'Pong!', ...globalOptions // 展开全局配置 }); }, };
补充说明
你之前设置的客户端全局allowedMentions其实是对**普通消息回复(比如message.reply())**生效的,但Slash Command属于交互(Interaction)系统,它的回复配置是独立的,所以需要单独指定。
内容的提问来源于stack exchange,提问作者user15952596
相关产品推荐
相关产品推荐

