求助Discord API:实现向新加入服务器用户发送私信
实现Discord服务器新成员私信欢迎功能
嘿,我来帮你搞定给刚加入服务器的用户发私信的需求!先看你的现有代码,是在test频道发群欢迎消息,要改成私信其实很简单,不用绕到mentions那部分,直接用Discord.js提供的方法就行,我给你调整一下代码,顺便把一些坑也补上:
修改后的完整代码
const robot = new Discord.Client(); // 监听新成员加入事件 robot.on("guildMemberAdd", async (newMember) => { try { // (可选)保留原有的频道欢迎消息,如果不需要可以删掉这部分 const testChannel = newMember.guild.channels.cache.find(channel => channel.name === "test"); if (testChannel) { await testChannel.send(`${newMember.toString()} hello guys!`); } // 核心:给新成员发送私信 await newMember.send(`欢迎加入我们的服务器呀,${newMember.user.username}!有任何问题都可以随时问哦 😊`); } catch (error) { // 捕获错误,避免机器人崩溃 console.error("消息发送失败:", error); // 常见错误:用户关闭了私信权限 if (error.code === 50007) { console.log(`无法给 ${newMember.user.tag} 发送私信,用户可能关闭了陌生人私信权限。`); } } }); // 记得替换成你的机器人Token robot.login("YOUR_BOT_TOKEN_HERE");
关键说明&注意事项
- 替换过时的方法:Discord.js v12及以后版本,
channels.find()已经被channels.cache.find()取代了,用旧写法会直接报错,一定要改过来。 - 异步处理&错误捕获:发送消息是异步操作,用
async/await能确保消息发送顺序,加上try/catch可以处理各种异常情况——比如用户关闭了私信权限,这时候机器人发不了消息,我们能在控制台看到具体原因,不会导致机器人崩溃。 - 直接发私信的方法:
newMember.send()是GuildMember对象自带的方法,专门用来给成员发私信,完全不需要去处理mentions(那是用来从消息里提取被@的用户的,这里根本用不上)。 - 权限&意图设置:如果你的机器人监听不到
guildMemberAdd事件,一定要去Discord开发者后台的「机器人」设置里,开启服务器成员意图(Server Members Intent),不然Discord不会把成员加入的事件推给机器人。另外确保机器人在服务器里有SendMessages权限。
内容的提问来源于stack exchange,提问作者Ethernets
相关产品推荐
相关产品推荐

