基于discord.js的Discord Bot如何仅向发起者私密回复?
如何让Discord Bot仅向指令发起者发送私信回复
嘿,很高兴看到你在学习discord.js开发Bot!针对你的问题,当然可以实现只给指令发起者发送私密回复,而不是在公开频道里回复。
你之前用的message.channel.send()和message.reply()都是在消息所在的公开频道发送内容,要实现私信回复,只需要使用message.author.send()方法——这个方法会直接给消息的发送者(也就是指令发起者)发送私信。
这里给你修改后的示例代码:
const discord = require('discord.js'); const client = new discord.Client(); const prefix = '!'; client.once('ready', () => { console.log('Ready!'); }); client.on('message', message => { // 跳过其他Bot的消息,避免无效响应 if (message.author.bot) return; if (message.content === 'ping') { // 给指令发起者发送私信 message.author.send('Pong!') .catch(err => { // 处理发送失败的情况,比如用户关闭了私信权限 console.error('无法发送私信:', err); // 可选:在公开频道提示用户调整设置 message.reply('我没法给你发私信哦,请检查你的隐私设置是否允许接收Bot的私信!'); }); } }); // 记得替换成你的Bot Token client.login('你的Bot Token');
额外补充几个实用细节:
message.author.send()支持和channel.send()完全一样的参数,比如嵌入消息、附件等复杂内容都能发送。- 加上
if (message.author.bot) return;是个好习惯,能避免Bot陷入循环响应其他Bot消息的情况。 - 错误捕获很重要,毕竟不是所有用户都开启了接收陌生人私信的权限,提前处理能让你的Bot更健壮。
内容的提问来源于stack exchange,提问作者chrisindfw




