Discord.js机器人能否向添加它的服务器用户发私信?求代码实现
当然可以实现!
完全没问题,Discord.js 支持机器人向邀请它进入服务器的用户发送私信,下面我就带你一步步实现这个功能:
实现原理
当机器人被添加到服务器时,Discord.js 会触发 guildCreate 事件。我们可以通过读取服务器的审核日志,找到执行添加机器人操作的用户,然后调用用户对象的 send() 方法发送私信。
注意事项
- 你的机器人需要拥有
ViewAuditLog(查看审核日志)权限,不然无法获取添加记录。 - 部分用户可能关闭了来自服务器成员的私信功能,这时候发送会失败,一定要做好错误处理。
- 确保机器人的 intents(意图)中开启了
Guilds,否则无法监听guildCreate事件。
完整代码示例
const { Client, GatewayIntentBits } = require('discord.js'); const client = new Client({ intents: [ GatewayIntentBits.Guilds, // 必须开启,才能监听服务器相关事件 GatewayIntentBits.GuildMessages, // 可选,若后续需要处理服务器消息可保留 GatewayIntentBits.MessageContent // 可选,若需要读取消息内容可保留 ] }); client.on('guildCreate', async (guild) => { try { // 获取最近的一条添加机器人的审核日志记录 const auditLogs = await guild.fetchAuditLogs({ type: 28, // 28 对应 "添加机器人" 的事件类型 limit: 1 }); const botAddRecord = auditLogs.entries.first(); if (!botAddRecord) { console.log(`无法获取服务器 ${guild.name} 的添加记录`); return; } const inviter = botAddRecord.executor; if (!inviter) { console.log(`无法找到服务器 ${guild.name} 的邀请用户`); return; } // 发送欢迎私信 await inviter.send('您好,感谢您将我添加到服务器!如果有任何使用问题,随时告诉我哦~'); console.log(`已向用户 ${inviter.tag} 发送欢迎私信`); } catch (error) { console.error('发送私信失败:', error); // 常见错误原因:用户关闭了私信、机器人权限不足等 } }); // 登录机器人 client.login('你的机器人TOKEN');
把代码里的你的机器人TOKEN替换成你自己的机器人令牌就可以运行啦!
内容的提问来源于stack exchange,提问作者will
相关产品推荐
相关产品推荐

