Discord.js 从特定公会中删除用户的角色

时间:2021-05-24 12:23:17

标签: javascript node.js discord.js

我正在尝试为 Discord 制作会员机器人。机器人将从 API 中检索用户 ID 和角色,并需要从用户中删除此角色。

首先我要获取特定用户所在的公会:

const guild = client.guilds.cache.get('842361027562831872');

然后我通过名称找到角色:

let role = guild.roles.cache.find(role => role.name === "Sport");
if (!role) return;

然后我试图通过他的ID找到用户,并删除上面的角色。但是用户总是未定义的:

guild.members.cache.get(user.user).roles.remove(role);

通常,当我添加角色时,我会使用消息对象,然后使用该消息中的公会,如下所示:

let role = message.guild.roles.cache.find(role => role.name === "Sport");
if (!role) return;
message.guild.members.cache.get(message.author.id).roles.add(role);

但是,我从 API 中检索数据,因此我必须以另一种方式进行。

我的脚本的完整代码:

get('/expired', '', function (result) {
            let users = result.data.users;
            const guild = client.guilds.cache.get('842361027562831872');

            users.forEach(user => {

                let role = guild.roles.cache.find(role => role.name === user.role);
                if (!role) return;

                guild.members.cache.get(user.user).roles.remove(role);
            });
        });

1 个答案:

答案 0 :(得分:0)

所以显然我不得不使用 fetch 方法然后返回一个承诺。

guild.members.fetch(user.user).then(member => {
     member.roles.remove(role);
     member.send(`Your subscription for ${user.role} is expired.`);
}).catch(console.log);

然后我可以删除该用户的角色并向他/她发送直接消息。