【问题标题】:Discord Bot isn't working to detect if a member has the muted role alreadyDiscord Bot 无法检测成员是否已经具有静音角色
【发布时间】:2021-03-29 21:37:00
【问题描述】:

所以我对此很陌生。我似乎无法找出为什么我的机器人没有检测到玩家何时具有静音角色。

我认为如果我输入“如果(静音)”,它将检测成员是否具有“静音”角色。它唯一能做的就是说“那个成员已经被静音了”,即使这个成员根本没有这个角色。我什至将其切换以检查成员是否具有“成员”角色,如果有,请删除该角色并添加静音角色,但它仍然无法检测该成员是否具有静音角色,并且只会执行“@member 已静音!”,而不是“该成员已静音”

代码:


module.exports = {
    name: 'mute',
    description: "Mute members",
    execute(message, args, Discord, client) {

        const Admin = message.member.roles.cache.find(role => role.id === 'AdminIDGoesHere');
        const Mod = message.member.roles.cache.find(role => role.id === 'ModIdGoesHere');

        if (Admin || Mod) {

            const target = message.mentions.users.first();
            let memberTarget = message.guild.members.cache.get(target.id);
            let Mute = message.guild.roles.cache.find(role => role.id === 'MutedIdGoesHere');
            let Member = message.guild.roles.cache.find(role => role.id === 'MemberIdGoesHere');

            if (target) {

                if (Mute) {

                    message.reply("That member is muted already!")

                } else {

                    memberTarget.roles.add(Mute);
                    memberTarget.roles.remove(Member);
                    message.reply(`<@${memberTarget.user.id}> has been muted!`).then(msg => {
                        msg.delete({ timeout: 5000 });
                    })
                }


            } else {
                message.reply("Couldn't find that member!").then(msg => {
                    msg.delete({ timeout: 5000 });
                })
            }


        } else {
            message.reply("You don't have permission to do that!").then(msg => {
                msg.delete({ timeout: 5000 })
            })
        }

    }
}

就像我说的,我对此很陌生,哈哈。我已经查找了几个小时来了解如何做到这一点,我觉得这是一个我看不到、想不到或找不到的简单解决方案。任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 您的角色 ID 是否正确?
  • 是的,我确实有正确的 ID。

标签: discord discord.js


【解决方案1】:

已编辑*

你可以把你的 if 语句改成这样:

if(!member.roles.has('MuteRoleID')) { return
}else {
member.addRole('MuteRoleID')
member.removeRole('MemberRoleID')
 message.reply(`<@${memberTarget.user.id}> has been muted!`).then(msg => {
                        msg.delete({ timeout: 5000 });
}

如果这不起作用,我将在我的代码中运行它并查看问题所在:)

【讨论】:

  • 它只是告诉我TypeError: message.guild.members.cache.fetch is not a function
  • 稍微更新了一下。用编辑后的代码再试一次
  • 你用过('target.id')吗?它不应该是一个函数。相反,它应该是一个字符串!确保在括号中使用 (' ') 并在发现其他问题时更新!
  • 好吧,我用的是更新版本。我也尝试过使用和不使用 (' ') 没有它,它不会出错。有了它,它会给出这个错误UnhandledPromiseRejectionWarning: DiscordAPIError: Invalid Form Body user_id: Value "target.id" is not snowflake. 机器人也会说有和没有('')“那个成员已经静音了!”即使他们没有。
  • 不知道 role.add 在 v12 中是否仍然存在。尝试编辑的帖子,如果它不起作用,我将在我的代码中运行它并给你一个完整的报告
【解决方案2】:

首先,你可以使用

const MutedRole = message.guild.roles.cache.get("ROLE_ID");
const Member = message.member; //No need to add this Variable

然后

message.member.roles.has(MutedRole.id) ? message.member.roles.cache.add(MutedRole) : message.channel.send("This user is already muted")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-31
    • 2021-08-11
    • 2021-10-11
    • 2021-07-18
    • 2020-07-08
    • 1970-01-01
    • 2021-11-07
    • 2020-09-14
    相关资源
    最近更新 更多