【问题标题】:Discord.js remove role of user from a specific guildDiscord.js 从特定公会中删除用户角色
【发布时间】:2021-08-12 18:10:32
【问题描述】:

我正在尝试为 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);
            });
        });

【问题讨论】:

    标签: javascript node.js discord.js


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 2020-11-03
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2020-12-27
      • 1970-01-01
      • 2018-11-29
      相关资源
      最近更新 更多