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

我如何编码一个不和谐机器人在一个不正确的命令后不停止

聂永怡
2023-03-14

所以每当我发送一个错误的命令,比如!pong(其中!ping是正确的)bot返回时出现以下错误:

(if(command.permissions.length){^

无法读取未定义的属性权限

即使我删除了整个权限代码,它也会给我一个

TypeError:无法读取未定义的属性“users”

只有当我对这一点掌握错误的时候!没有命令或命令时发出砰砰声!告诉我前缀不是实际命令的任何内容。下面是我使用的代码

Message.js

require('dotenv')。config();

常数冷却=新映射();

单元导出=(不一致、客户端、消息)=

const args = message.content.slice(prefix.length).split(/ +/);
const cmd = args.shift().toLowerCase();

const command = client.commands.get(cmd) || client.commands.find(a => a.aliases && a.aliases.includes(cmd));
const validPermissions = [
    "CREATE_INSTANT_INVITE",
    "KICK_MEMBERS",
    "BAN_MEMBERS",
    "ADMINISTRATOR",
    "MANAGE_CHANNELS",
    "MANAGE_GUILD",
    "ADD_REACTIONS",
    "VIEW_AUDIT_LOG",
    "PRIORITY_SPEAKER",
    "STREAM",
    "VIEW_CHANNEL",
    "SEND_MESSAGES",
    "SEND_TTS_MESSAGES",
    "MANAGE_MESSAGES",
    "EMBED_LINKS",
    "ATTACH_FILES",
    "READ_MESSAGE_HISTORY",
    "MENTION_EVERYONE",
    "USE_EXTERNAL_EMOJIS",
    "VIEW_GUILD_INSIGHTS",
    "CONNECT",
    "SPEAK",
    "MUTE_MEMBERS",
    "DEAFEN_MEMBERS",
    "MOVE_MEMBERS",
    "USE_VAD",
    "CHANGE_NICKNAME",
    "MANAGE_NICKNAMES",
    "MANAGE_ROLES",
    "MANAGE_WEBHOOKS",
    "MANAGE_EMOJIS",
  ]

  if(command.permissions.length){
    let invalidPerms = []
    for(const perm of command.permissions){
      if(!validPermissions.includes(perm)){
        return console.log(`Invalid Permissions ${perm}`);
      }
      if(!message.member.hasPermission(perm)){
        invalidPerms.push(perm);
      }
    }
    if (invalidPerms.length){
      return message.channel.send(`Missing Permissions: \`${invalidPerms}\``);
    }
  }



if(!cooldowns.has(command.name)){
    cooldowns.set(command.name, new Discord.Collection());
}

const current_time = Date.now();
const time_stamps = cooldowns.get(command.name);
const cooldown_ammount = (command.cooldown) * 1000;

if(time_stamps.has(message.author.id)){
    const expiration_time = time_stamps.get(message.author.id) + cooldown_ammount;

    if(current_time < expiration_time){
        const time_left = (expiration_time - current_time) / 1000;

        return message.reply(`Please wait ${time_left.toFixed(1)} more seconds before using ${command.name}`)
    }
}

time_stamps.set(message.author.id, current_time);
setTimeout(() => time_stamps.delete(message.author.id), cooldown_ammount);

try{
    command.execute(message,args, cmd, client, Discord);
} catch (err){
    message.reply("There was an error trying to execute this command!");
    console.log(err);
}
 }

ping.js

module.exports={name:'ping',冷却时间: 10,权限:["SEND_MESSAGES",],描述:"this is a ping命令!",执行(客户端,消息, args, cmd,不和谐){message.channel.send('pong!');}}

共有1个答案

穆单鹗
2023-03-14

在你的留言里。js,在声明了命令之后,您需要检查它是未定义的还是空的

const command = client.commands.get(cmd) || client.commands.find(a => a.aliases && a.aliases.includes(cmd));
if(!command) return;

编辑:您的错误来自这里:

command.execute(message,args, cmd, client, Discord);
//^^how you execute
execute(client, message, args, cmd, Discord){ message.channel.send('pong!'); }
//^^how you define it

所以你可以看到,你把它们放在错误的顺序。

 类似资料:
  • 我已经创建了一个bot,它现在在我的discord服务器中,使用下面的代码。 我的问题是,一旦我在与bot不和谐的聊天中,我如何调用命令让bot运行代码,为用户列表收集csv?我不确定如何调用机器人,一旦它在聊天/服务器中获得列表。

  • 当有人加入语音频道时,如何制作一个标记为@角色的discord机器人?示例:@role{user}已加入

  • 我试图做一个程序来创建一个无尽的循环,例如: 但是主要的问题是一个机器人听不到另一个机器人的声音,所以这不起作用。。。 有没有办法让机器人听另一个机器人的?提前感谢!:)

  • 我开始写一个Discord机器人,但我已经设法遇到了一个问题。我只是写了他写的东西,做了一些小改动,不会对程序产生太大影响。我有两个类,主类只获取bot的令牌,然后使用 下面是MyBot.cs: 它可以连接,机器人也可以在线。这是我的控制台中的输出: 当我现在打字的时候。一般来说,什么都不会发生。控制台中没有,一般情况下也没有。我已经看过了,但它并没有解决我的问题 编辑:我知道我应该使用Comma

  • 我正在尝试使用discord删除已创建的角色,该角色使用的是。js。 终端中的错误显示: DiscordAPIError:缺少权限 虽然我已经给了我的机器人所有权限。 代码:

  • 所以,我最近被告知,仅仅将不和谐机器人令牌存储在顶部的变量中是不好的做法,一个. env文件会更好。有人能向我解释一下如何创建带有令牌的. env文件,并将其导入到我的bot.py文件中吗?