首页 > 解决方案 > 如何根据 DIScord bot 中的 DM 消息向用户添加角色

问题描述

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

标签: discord.js

解决方案


您的第一个问题是您使用了错误的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')
        }
}

推荐阅读