我想写一个不和谐的机器人。当机器人向机器人DM时,该机器人将角色分配给用户。代码如下所示。但是message.member为空。
bot.on('message', async msg => {
if (msg.channel.type != "dm") {
return;
}
let message = msg.content;
if (message.substring(0, 1) == '!') {
var args = message.substring(1).split(' ');
var cmd = args[0];
switch (cmd) {
case 'role':
const guildMember = message.member; (message.member is null)
guildMember.addRole('<@&439191493169643521>');
}
}
答案 0 :(得分:0)
您的第一个问题是您使用的是错误的message
。您已将message
声明为等于msg.content
的变量,所以我相信您将其误认为是msg
。
第二,addRole方法采用ID或雪花。因此,您只需将角色的ID粘贴在方法内部的引号中即可。
即使您要进行这些更改,您仍然会收到错误消息。为什么?由于您的漫游器正在读取DM
个频道,而不是Guild
个频道。所以做这样的事情是行不通的。
const guildMember = msg.member;
guildMember.addRole('<@&439191493169643521>');
我已经对您的switch语句进行了一些调整以使其正常工作。
switch (cmd) {
case 'role':
const guild = client.guilds.get('GUILD_ID');
// grabs the id of the user who messaged the bot
var dmUser = msg.author.id;
// this looks for the users id in the guild
var isMember = guild.members.get(dmUser)
// if true
if (isMember) {
// then add the role
isMember.addRole('ROLE_ID');
} else {
// if not true. send the user this message
msg.reply('You are not part of ___ guild')
}
}