当前位置: 首页 > 知识库问答 >
问题:

Discord Bot无法检测成员是否已具有静音角色

刘浩思
2023-03-14

所以我对这个很陌生。我似乎找不到为什么我的机器人不能检测到玩家何时扮演沉默角色。

我想,如果我把如果(静音)它会检测如果一个成员有角色静音。它唯一做的就是说“那个成员已经静音了”,尽管这个成员根本没有这个角色。我甚至切换了它来检查成员是否有“成员”角色,如果有,删除该角色并添加静音角色,它确实有,但它仍然不会检测成员是否有静音角色,并且只会检测"@成员已静音!",而不是"该成员已静音"

代码


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 })
            })
        }

    }
}

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

共有2个答案

景理
2023-03-14

首先,你可以使用

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")
汪文光
2023-03-14

编辑*

您可以将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 });
}

如果这不起作用,我会在我的代码中运行它,看看有什么问题:)

 类似资料:
  • 我的代码中有这一点,但当我执行命令两次(名称命令、用户和角色)时,它不会返回这条消息。它一直在说“我将[角色名]添加到[用户]”

  • 我正在为我的新discord机器人设置一个静音命令,我对discord相当陌生。胡说八道,不明白出了什么问题。我不断地得到一个错误,即没有指定成员,而它显然是指定的。 我在youtube等网站上尝试了很多教程,但它总是略过一两个细节,所以我无法完全理解。如果有人能纠正我的代码,我将不胜感激,因为我仍在学习discord。皮耶。 它只是想给某人添加一个静音的角色,并完成它。在使用ban和kick命令

  • 问题内容: 我有一个非常简单和标准的PHP强制下载脚本。 我如何检查是否/何时完成下载以便在客户端通知用户?我什至不需要实时显示进度,我只对非常具体的事件感兴趣:“下载完成时”。根据我的研究,由于没有事件,因此似乎必须从服务器端确定它,而且我认为不可能拦截浏览器事件。 因此,似乎最好的选择是通过某种客户端/服务器端交互比较发送到总字节的字节。我该如何检查从服务器发送的字节以进行PHP强制下载?是否

  • 问题内容: 在Java中开始录制操作时,如何检测静音?什么是PCM数据?如何在Java中计算PCM数据? 我找到了解决方案: 问题答案: 在Java中开始录制操作时,如何检测静音? 计算一组声音帧的dB或RMS值,并确定将其视为“静音”的级别。 什么是PCM数据? 数据是在脉冲编码调制格式。 如何在Java中计算PCM数据? 我不明白这个问题。但是,猜测它与标记有关,我有一些坏消息。从理论上讲,这

  • 问题内容: 如果我希望在一个对内存敏感的应用程序中的数千个实例中使用一个类,那么如果我将静态功能分解为静态成员,是否有帮助? 我想象静态方法和变量每个类存储一次,而对于非静态成员,每个实例必须存储一些东西。 使用成员变量,似乎很清楚,但是为方法存储了哪种数据? 我正在使用Java,但是我想像一些通用规则也可以在其他托管环境(例如.NET)中应用。 问题答案: 静态方法与非静态(实例)方法之间的唯一

  • 这似乎应该是简单的,但我没有找到太多相关的它。我有一个结构,它有不同的字段用来存储关于程序操作的数据。我想记录这些数据,以便以后分析。试图在程序运行过程中连续记录数据会消耗大量资源。因此,我只想在数据发生变化时调用日志记录函数。如果有一种有效的方法来检查结构成员是否更新了,我会很高兴的。目前我正在玩一个有3个结构(旧的、当前的和新的)的shell游戏,以便检测数据何时发生了变化。提前道谢。