如何在DIscord bot中基于​​DM消息向用户添加角色

时间:2019-12-06 02:25:11

标签: discord.js

我想写一个不和谐的机器人。当机器人向机器人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>');
    }
}

1 个答案:

答案 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')
        }
}