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

我不能从一个数组中获得一个项目,让我的不和谐机器人用来采取行动

壤驷英叡
2023-03-14

我正在尝试为服务器编写一个机器人程序,目前正在制作一个“静音”命令。我的想法是,当命令被调用时,bot必须首先检查这个人是否有允许他们使其他成员静音的角色,如果满足该条件,那么bot将接受第二个参数,即必须静音的成员的Discord id,并给他们一个禁止他们在服务器上讲话的角色。

由于某种原因,在测试代码时,我无法通过bot检查第二个参数是否是服务器成员的有效ID。

以下是静音命令代码:

if (message.member.roles.cache.has('765334017011613717')) {
 console.log('Oh oh');
 const person = message.guild.member(
  message.mentions.users.first() || message.guild.members.get(args[1])
 );
 if (!person) {
  console.log('Oh oh 2');
 }
} else message.channel.send('You do not have permission to use this command.');

注意:控制台。添加了log()函数,以便在运行代码时查看问题发生的位置。

共有1个答案

方永贞
2023-03-14

为了使这项工作顺利进行,你可以做两件事,第一件是更多的建议。

首先,理想情况下,您总是希望检查角色是否存在,如果不存在,则返回。这样可以避免您将整个逻辑用于在if语句中禁用该角色。你是这样做的:

if (!message.member.roles.cache.has('your role ID')) {
    return message.channel.send('You do not have permission to use this command.');
}

代码中的实际问题源于查找成员的方式。正确的方法是检查成员的第一次提及,或者从第一个参数中获取提供的ID。第一个参数不是args[1]而是args[0]。如果正在使用ID,则需要使用缓存属性。来源

let muteMember = message.mentions.members.first() || message.guild.members.cache.get(args[0]);

然后,您应该检查是否确实找到了成员,如果没有,则返回。

if (!muteMember) {
    return message.channel.send("That member doesn't exist!")
}

注意:您的代码中已经包含了这一点,但为了完整性,我想将其包括在内。

之后,您可以继续使用代码使某人静音。

 类似资料: