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

discord.js角色检查优化

董宜然
2023-03-14

我目前正在建立一个不和谐验证机器人,这个机器人的一个功能,如果检查你是否有一个角色从每一个需要的类别,然后在最后产生你的角色的总结。目前,我有一个工作解决方案,它的功能完全符合我的要求,但它使用了一个很大的if堆栈,我对js很陌生,但被告知尽可能不要使用大的if/if else if堆栈。我已经研究了switch的案例,但不知道如何应用这些案例,所以我想知道是否有一种更优化的方法来实现我所需要的。我现在的代码如下:

var hasrole = false;
var role = "";
var subrole = "";
var istype1 = false;
var istype2 = false;
var istype3 = false;
var istype4 = false;
var counter = 0;

if (message.member.roles.cache.find(r => r.id === "736032207248031765")) {
    istype1 = true;
    role = "Type 1";
    hasrole = true;
    counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736032822053175306")) {
    istype2 = true;
    role = "Type 2";
    hasrole = true;
    counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736032670013980702")) {
    role = "Type 3";
    hasrole = true;
    counter++
    if (message.member.roles.cache.find(r => r.id === "736032716411371581")) {
        istype1 = true;
        subrole = "Type 1";
    } else if (message.member.roles.cache.find(r => r.id === "736032780122849340") {
        istype2 = true;
        subrole = "Type 2";
    } else {
        istype3 = true;
    }
}
if (message.member.roles.cache.find(r => r.id === "736032870703038534")) {
    istype4 = true;
    role = "Type 4";
    hasrole = true;
    counter ++;
}
if (message.member.roles.cache.find(r => r.id === "736033471474172025")) {
    istype2 = true;
    role = "Type 5";
    hasrole = true;
    counter ++;
}
if (counter >= 1) {
    message.channel.send("More than 1 main role, please have only 1");
    return;
} else if (hasrole == false) {
    message.channel.send("No main role please get one")
    return;
}

共有1个答案

陶乐生
2023-03-14

好的,我假设您的代码运行良好,只是需要一点优化。

我的第一个建议是使用数组并迭代您的类型。

我的第二个建议是不要硬编码您的角色ID。

我的第三条建议是,也许可以通读您的代码,并尝试理解它,因为它看起来非常混乱。

Type3角色检查中的代码很混乱,而Type5角色检查验证了Role2值。

这是我的代码版本

const roles = ['736032207248031765', '736032822053175306', '736032670013980702', '736032870703038534', '736033471474172025'];
let userRoles = [];

roles.forEach(r => {
    if(message.member.roles.cache.has(r)){
        userRoles.push(r);
    }
});

if (userRoles.length >= 1) {
    message.channel.send("More than 1 main role, please have only 1");
    return;
} else if (userRoles.length == 0) {
    message.channel.send("No main role please get one")
    return;
}

正如您所看到的,这比一整条IFS链要方便得多。

 类似资料:
  • 我正在做一个giverole命令,就像!giverole{member}{role},但是我怎么知道bot最高角色是否高于提到的角色。我还没试过什么,因为我卡住了,请帮帮我。 我正在使用discord.js v12

  • 我正试图通过我的机器人在我的服务器中按一定的顺序创建角色,但每次我运行该命令时,角色位置都是错误的。 代码: 理论上,这应该是有序的,但我不确定是怎么回事! 如有任何帮助,我们将不胜感激。

  • 我正在尝试使用客户端将当前服务器的bot角色设置为粉红色。打开(“准备就绪”),但每当我使用当前拥有的内容运行bot时,控制台将返回: 这是我目前使用的代码。我知道我需要在每个公会上进行for循环,但我不确定我将如何做到这一点,我可以使用for或只是a。然而,我找不到这样做的正确方法。 提前感谢任何回复和帮助我留言的人。

  • 所以我在让我的自动角色发挥作用方面遇到了一个小问题,我一直在尝试通过消息对其进行排序。js和在reactionrole中。js,但它仍然给出了同样的问题,想知道是否有人可以帮助将不胜感激,因为我已经通过教程查看了它,除了一些差异,由于不同的文本/细节,它没有帮助 此外,如果这有助于避免错误,我将使用命令处理程序V2 反应角色。js message.js

  • 嘿,我是一个业余JavaScript程序员,我想为我正在开发的机器人制作一个“temp mute”命令。然而,我遇到了一个错误,我不知道如何解决。 这个错误并不是在我的代码中,但是经过几个小时的测试,我相信我已经发现了:discord.js在命令发送后立即存储API信息,比如角色。这样做的问题是,在静音时间到期后,Temmute命令使用setTimeout()来预制操作。其中一个操作是通过检查用户

  • 问题内容: 我想使用Spring Security JSP标签库根据角色有条件地显示一些内容。但是在Spring Security 3.1.x中,仅检查一个角色。 我可以使用,但 ifAllGranted 已弃用。 有什么帮助吗? 问题答案: 春季安全性中有一个特殊的安全性表达: hasAnyRole(角色列表) -如果已授予用户指定的任何角色(以逗号分隔的字符串 列表形式) ,则为true。 我