因此,无论何时我发送了错误的命令,例如 !pong(其中!ping 是正确的命令),机器人都会返回以下错误:
<块引用>(if(command.permissions.length){ ^
TypeError: 无法读取未定义的属性“权限”
即使我删除了整个权限代码,它也会给我一个
TypeError: 无法读取未定义的属性 'users'
而且只有当我有错误的命令时 !pong 没有命令或 !me 任何带有不是实际命令的前缀的东西。下面是我使用的代码
Message.js
<块引用>require('dotenv').config();
const cooldowns = new Map();
module.exports = (Discord, client, message) =>{ const 前缀 = process.env.PREFIX; if(!message.content.startsWith(prefix) || message.author.bot) return;
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 = { 名称: 'ping', 冷却时间:10, 权限:["SEND_MESSAGES",], 描述:“这是一个 ping 命令!”, 执行(客户端,消息,参数,cmd,不和谐){ message.channel.send('pong!'); } }
答案 0 :(得分:1)
在你的 message.js 中,声明 command
之后,你需要检查它是否为 undefined 或 null
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
正如你所看到的,你把它们放在了错误的顺序中。