#node.js #discord.js
Вопрос:
Итак, код, с которым я сейчас работаю, дает мне ошибку типа: Не могу прочитать свойство «отправить» неопределенное для моей команды ping, а затем ошибку типа: Не могу прочитать свойство «пользователи» неопределенное для моей команды запрета, у меня есть другие команды, которые также не работают из-за того, что я сделал или забыл сделать, код работал, пока я не добавил разрешения в код, а затем все пошло под откос, и я не могу понять, где не работает/как это работало до разрешений и даже после, но потом просто перестаю работать, я не знаю, работаю ли я забыли добавить строку или забыли ; но я почти уверен, что в этом отношении все в порядке, но любая помощь будет признательна.
это мое main.js
const client = new Discord.Client({ partials: ["MESSAGE", "CHANNEL", "REACTION"]});
//const client = require('discord-buttons');
const fs = require('fs');
require('dotenv').config();
//const prefix = '-';
client.commands = new Discord.Collection();
client.events = new Discord.Collection();
['command_handler', 'event_handler'].forEach(handler =>{
require(`./handlers/${handler}`)(client, Discord);
})
client.login(process.env.DISCORD_TOKEN);
Это мой обработчик команд
const { Client } = require('discord.js');
const fs = require('fs');
module.exports = (Client, Discord) =>{
const command_files = fs.readdirSync(`./commands/`).filter(file => file.endsWith('.js'));
command.execute(client, message, args, cmd, Discord);
for(const file of command_files){
const command = require(`../commands/${file}`);
if(command.name){
Client.commands.set(command.name, command);
} else {
continue;
}
}
}
Это мое мероприятие handler.js
const { Client } = require('discord.js');
const fs = require('fs');
module.exports = (Client, Discord) =>{
const load_dir = (dirs) =>{
const event_files = fs.readdirSync(`./events/${dirs}`).filter(file => file.endsWith('.js'));
for(const file of event_files){
const event = require(`../events/${dirs}/${file}`);
const event_name = file.split('.')[0];
Client.on(event_name, event.bind(null, Discord, Client));
}
}
['client', 'guild'].forEach(e => load_dir(e));
}
This is my message.js
const cooldowns = new Map();
module.exports = (Discord, client, message) =>{
const prefix = 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 amp;amp; a.aliases.includes(cmd));
if(!command) return;
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',
cooldown: 10,
permissions: ["SEND_MESSAGES"],
description: "this is a ping command!",
execute(client, message, args, cmd, Discord){
message.channel.send('pong!');
}
}
это мое ban.js
module.exports = {
name: 'ban',
aliases: ['b'],
permissions: ["ADMINISTRATOR", "BAN_MEMBERS",],
description: "this is a ban command!",
execute(client, message, args, cmd, Discord){
const member = message.mentions.users.first();
if(member){
const memberTarget = message.guild.members.cache.get(member.id);
memberTarget.ban();
message.channel.send('User has been banned');
}else{
message.channel.send('Need to mention a member you wish to ban')
}
}
}
Ответ №1:
Это очень очевидная ошибка, когда вы дали неправильные определения, вы сделали
command.execute(message,args, cmd, client, Discord);
и внутри ваших командных файлов вы использовали
execute(client, message, args, cmd, Discord){
Вы можете исправить это, используя следующее внутри обработчика команд:
command.execute(client, message, args, cmd, Discord);
Надеюсь, это поможет, если вам нужна дополнительная помощь, пожалуйста, прокомментируйте ниже.
Комментарии:
1. Я добавил в сообщение обработчик команд и обработчик событий, я забыл добавить это, но когда я добавил ваше предложение, это не решило проблему
2. Не могли бы вы отправить точную ошибку, какую ошибку она вам выдает?
3. Я поставил его не в то место, моя вина, но у меня уже есть этот код в обработчике команд, который я добавил в начальный пост, и теперь я получаю эту ошибку в command_handler.js:7 command.execute(клиент, сообщение, аргументы, cmd, Discord); ^ TypeError: command.execute не является функцией
4. Что определяется как команда? Если команда не определена или не имеет свойства: «выполнить», то она завершится ошибкой.
5. Извините, я не понимаю, что вы имеете в виду