#javascript #discord #discord.js
Вопрос:
Так что message.js где происходит перезарядка и help.js это команда, help
команда в настоящее время установлена на 60 seconds
, как вы можете видеть на cooldown
, но независимо от того, что я там ввожу, она не работает и по-прежнему установлена менее чем 1
на секунду, я думаю, для вывода, пожалуйста, проверьте GIF
включенный в этот вопрос.
message.js:
const Discord = require("discord.js"); const settings = require("../../config/settings.json"); const cooldowns = new Discord.Collection(); module.exports = async (client, message) => { if (message.author.bot) return; const prefixesdatabase = client.settings.ensure(message.guild.id, settings); if (!client.settings.get(message.guild.id, "prefix")) { client.settings.set(message.guild.id, { prefix: settings.prefix }); } if (message.content.match(new RegExp(`^<@!?${client.user.id}>( |) #javascript #discord #discord.js
Вопрос:
Так что message.js где происходит перезарядка и help.js это команда,
help
команда в настоящее время установлена на60 seconds
, как вы можете видеть наcooldown
, но независимо от того, что я там ввожу, она не работает и по-прежнему установлена менее чем1
на секунду, я думаю, для вывода, пожалуйста, проверьтеGIF
включенный в этот вопрос. message.js: ))) { message.reply(`my prefix is: `${prefixesdatabase.prefix}``); } if (!message.content.startsWith(prefixesdatabase.prefix)) return; const command = message.content .split(" ")[0] .slice(prefixesdatabase.prefix.length); const args = message.content.split(" ").slice(1); if (!cooldowns.has(command.name)) { cooldowns.set(command.name, new Discord.Collection()); } const now = Date.now(); const timestamps = cooldowns.get(command.name); const cooldownAmount = (command.cooldown || 2) * 1000; if (timestamps.has(message.author.id)) { const expirationTime = timestamps.get(message.author.id) cooldownAmount; if (now < expirationTime) { const timeLeft = (expirationTime - now) / 2000; return message.reply( `Before using **${ prefixesdatabase.prefix }${command}**, please wait for **${timeLeft.toFixed( 1 )} second for cooldowns!**` ); } } timestamps.set(message.author.id, now); setTimeout(() => timestamps.delete(message.author.id), cooldownAmount); let cmd; if (client.commands.has(command)) { cmd = client.commands.get(command); } else if (client.aliases.has(command)) { cmd = client.commands.get(client.aliases.get(command)); } try { cmd.run(client, message, args); } catch (e) { return console.log(`Invalid command: ${command}`); } finally { console.log( `${message.author.username} using command ${prefixesdatabase.prefix}${command}` ); } };
help.js
const Discord = require("discord.js");
module.exports.run = async (client, message, args) => {
const settings = require("../../config/settings.json");
const prefixesdatabase = client.settings.ensure(message.guild.id, settings);
const helpArray = message.content.split(" ");
const helpArgs = helpArray.slice(1);
if (!helpArgs[0]) {
const embed = new Discord.MessageEmbed()
.setColor("#b491c8")
.setDescription(
`**My prefix:** `${prefixesdatabase.prefix}` , Slash Commands list for `/help`nClick [HERE](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}amp;permissions=8amp;scope=bot applications.commands) to invite me to your server.`
)
.addField("**:gear: Basic**", "`help`, `ping`, `vote`, `uptime`, `setprefix`")
.addField(
"**🛠️ Moderation**",
"`ban`, `clear`, `clearwarn`, `createchannel`, `createemoji`, `kick`, `lockchannel`, `mute`, `rename`, `slowmode`, `unban`, `unlockchannel`, `unmute`, `warn`, `warnings`"
)
.addField(
"**⚙ Utility**",
"`aes256`, `avatar`, `channel`, `embed`, `roleinfo`, `reverse`, `setafk`, `snipe`, `stats`, `timer`, `translate`, `whois`, `weather`, `youtube`"
)
.addField(
"**:magic_wand: Pruning**",
"`urole`, `unorole`, `krole`, `knorole`, `fetch`"
)
.addField(
"**:tada: Giveaways**",
"`start-giveaway`, `reroll`, `end-giveaway`"
)
.addField(
"**:frame_photo: Images**",
"`captcha`, `circle`, `delete`, `gay`, `changemymind`, `trigger`, `clyde`, `petpet`, `magik`, `iphonex`"
)
.addField(
"**:musical_note: Music**",
"`play`, `stop`, `skip`, `queue`, `autoplay`, `loop`, `volume`, `pause`, `resume`"
)
.addField(
"**:partying_face: Fun**",
"`8ball`, `cat`, `deaes256`, `kiss`, `meme`, `ngif`, `pat`, `poke`, `smug`, `thigh`, `tickle`"
)
.addFields(
{ name: ':desktop: Github (Source Code)', value: 'https://github.com/mashwishi/PruneBot' },
{ name: ':revolving_hearts: Support the Developer:', value: 'https://ko-fi.com/mashwishi' }
)
.setTitle('Prune Bot | Commands')
.setFooter(`©${nowyear} ${client.user.username} Created by Mashwishi.nCommand requested by: ${message.author.username}#${message.author.discriminator}`, `https://i.imgur.com/ypxq7B9.png`)
.setThumbnail('https://i.imgur.com/ypxq7B9.png')
.setAuthor('Join our Discord Server', 'https://i.imgur.com/hKeHeEy.gif', 'https://discord.io/LIMYAW');
message.channel.send({ embed });
}
if (helpArgs[0]) {
let command = helpArgs[0];
if (client.commands.has(command)) {
command = client.commands.get(command);
let alia = command.help.aliases;
if (command.help.aliases < 1) alia = "No aliases";
const embed = new Discord.MessageEmbed()
.setAuthor(
`Command: ${command.help.name}`,
client.user.displayAvatarURL()
)
.setDescription(
`
**Description:**n```${
command.help.description ||
"There is no Description for this command."
}```n**Usage:**n```${
command.help.usage || "No Usage"
}```n**Permissions:**n```${
command.help.accessableby || "Members"
}```n**Cooldown (in seconds):**n```${
command.help.cooldown || "No Cooldown"
}```n**Aliases:**n```${alia}````
)
.setColor("#4a4b4d")
.setFooter(
`© ${nowyear} ${client.user.username} | This command requested by ${message.author.username}#${message.author.discriminator}`
);
message.channel.send(embed);
} else {
const embeds = new Discord.MessageEmbed()
.setDescription(`${emojis.cross} Command is not found!`)
.setColor("RED");
return message.channel.send(embeds);
}
}
};
module.exports.help = {
name: "help",
description: "This command is used for displaying all commands.",
usage: "p!help",
accessableby: "Members",
aliases: ['?', 'commands', 'command'],
cooldown: 60
};
Комментарии:
1. Где вы используете / назначаете
help
информацию о команде, которую вы экспортируете внутри своегоhelp.js
? Еслиmessage
это экземплярMessage
, тоmessage.content
это аString
, и поэтому вашcommand
.2. у меня есть
command.js
файл pastebin.com/0GXWj0Np
Ответ №1:
Внутри вашего message.js
, вы, вероятно, перепутали command
с экспортированным командным объектом ( help.js
например, из). Используйте лучшее именование переменных, например commandText
, чтобы было ясно, что это текст/строка.
Ваш объект команды-это объект cmd
, который вы используете для выполнения команды с помощью экспортированной функции .run()
. cmd
Также содержит .help
свойство, которое обладает .cooldown
нужным вам свойством.
Вот посмотрите на простой пример, как бы я справился с этой проблемой.
// ... Somewhere in the code (probably index.js or main.js) ...
client.commands = new Map();
client.aliases = new Map();
// ... Inside of your command handler (command.js) ...
// The command variable defined as a require of command file (for example help.js)
client.commands.set(command.help.name, command);
command.help.aliases.forEach(alias => {
client.aliases.set(alias, command.help.name);
});
// ... Inside of your message handler (message.js) ...
let commandText = message.content.split(" ")[0].slice(prefixesdatabase.prefix.length);
if (!client.commands.has(commandText)) {
commandText = client.aliases.get(commandText);
if (!commandText) return;
}
const command = client.commands.get(commandText);
const cooldownAmount = (command.help.cooldown || 2) * 1000;
// ... Rest of your code ...
Обратите внимание , что мы используем command.help.cooldown
не command.cooldown
или command.name
и т. Д. Потому что сам экспортируемый объект не обладает такими свойствами. Вы добавили свойство .help
к экспортируемому объекту с помощью module.exports.help = { ... }
, которое содержит name
и cooldown
и т. Д.
Чтобы внедрить мое решение в ваш код, вам нужно заменить следующее (внутри message.js
):
// ... Rest of your code ...
if (!message.content.startsWith(prefixesdatabase.prefix)) return;
let commandText = message.content.split(" ")[0].slice(prefixesdatabase.prefix.length);
if (!client.commands.has(commandText)) {
commandText = client.aliases.get(commandText);
if (!commandText) return;
}
const command = client.commands.get(commandText);
const args = message.content.split(" ").slice(1);
if (!cooldowns.has(command.help.name)) {
cooldowns.set(command.help.name, new Discord.Collection());
}
const now = Date.now();
const timestamps = cooldowns.get(command.help.name);
const cooldownAmount = (command.help.cooldown || 2) * 1000;
if (timestamps.has(message.author.id)) {
const expirationTime = timestamps.get(message.author.id) cooldownAmount;
if (now < expirationTime) {
const timeLeft = (expirationTime - now) / 1000;
return message.reply(
`Before using **${
prefixesdatabase.prefix
}${commandText}**, please wait for **${timeLeft.toFixed(
1
)} second for cooldowns!**`
);
}
}
timestamps.set(message.author.id, now);
setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
try {
command.run(client, message, args);
} catch (e) {
return console.log(`Invalid command: ${commandText}`);
} finally {
console.log(
`${message.author.username} using command ${prefixesdatabase.prefix}${commandText}`
);
}
Результат:
Комментарии:
1. Можете ли вы помочь мне применить его, я пытался применить то, что вижу из блока кода, но это не работает.
2. Вы можете отправить запрос в мой проект на github под названием PruneBot .
message.js
наevent/client/message.js
иhelp.js
наcommand/info/help.js
.3. У меня уже есть это в command.js
command.help.aliases.forEach(alias => { client.aliases.set(alias, command.help.name); });
4. @Mashwishi Я обновил свой ответ, вы можете взглянуть на это. 🙂
Ответ №2:
В help.js у вас cooldown
внутри module.exports.help
нет module.exports
Вы либо переводите его в нормальное module.exports
состояние, либо меняете message.js от
const cooldownAmount = (command.cooldown || 2) * 1000;
Для
const cooldownAmount = (command.help.cooldown || 2) * 1000;
То, что я сказал о переходе module.exports.help
на module.exports
я имел в виду это:
help.js
const Discord = require("discord.js");
module.exports.run = async (client, message, args) => {
const settings = require("../../config/settings.json");
const prefixesdatabase = client.settings.ensure(message.guild.id, settings);
const helpArray = message.content.split(" ");
const helpArgs = helpArray.slice(1);
if (!helpArgs[0]) {
const embed = new Discord.MessageEmbed()
.setColor("#b491c8")
.setDescription(
`**My prefix:** `${prefixesdatabase.prefix}` , Slash Commands list for `/help`nClick [HERE](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}amp;permissions=8amp;scope=bot applications.commands) to invite me to your server.`
)
.addField("**:gear: Basic**", "`help`, `ping`, `vote`, `uptime`, `setprefix`")
.addField(
"**🛠️ Moderation**",
"`ban`, `clear`, `clearwarn`, `createchannel`, `createemoji`, `kick`, `lockchannel`, `mute`, `rename`, `slowmode`, `unban`, `unlockchannel`, `unmute`, `warn`, `warnings`"
)
.addField(
"**⚙ Utility**",
"`aes256`, `avatar`, `channel`, `embed`, `roleinfo`, `reverse`, `setafk`, `snipe`, `stats`, `timer`, `translate`, `whois`, `weather`, `youtube`"
)
.addField(
"**:magic_wand: Pruning**",
"`urole`, `unorole`, `krole`, `knorole`, `fetch`"
)
.addField(
"**:tada: Giveaways**",
"`start-giveaway`, `reroll`, `end-giveaway`"
)
.addField(
"**:frame_photo: Images**",
"`captcha`, `circle`, `delete`, `gay`, `changemymind`, `trigger`, `clyde`, `petpet`, `magik`, `iphonex`"
)
.addField(
"**:musical_note: Music**",
"`play`, `stop`, `skip`, `queue`, `autoplay`, `loop`, `volume`, `pause`, `resume`"
)
.addField(
"**:partying_face: Fun**",
"`8ball`, `cat`, `deaes256`, `kiss`, `meme`, `ngif`, `pat`, `poke`, `smug`, `thigh`, `tickle`"
)
.addFields(
{ name: ':desktop: Github (Source Code)', value: 'https://github.com/mashwishi/PruneBot' },
{ name: ':revolving_hearts: Support the Developer:', value: 'https://ko-fi.com/mashwishi' }
)
.setTitle('Prune Bot | Commands')
.setFooter(`©${nowyear} ${client.user.username} Created by Mashwishi.nCommand requested by: ${message.author.username}#${message.author.discriminator}`, `https://i.imgur.com/ypxq7B9.png`)
.setThumbnail('https://i.imgur.com/ypxq7B9.png')
.setAuthor('Join our Discord Server', 'https://i.imgur.com/hKeHeEy.gif', 'https://discord.io/LIMYAW');
message.channel.send({ embed });
}
if (helpArgs[0]) {
let command = helpArgs[0];
if (client.commands.has(command)) {
command = client.commands.get(command);
let alia = command.aliases;
if (command.aliases < 1) alia = "No aliases";
const embed = new Discord.MessageEmbed()
.setAuthor(
`Command: ${command.name}`,
client.user.displayAvatarURL()
)
.setDescription(
`
**Description:**n```${
command.description ||
"There is no Description for this command."
}```n**Usage:**n```${
command.usage || "No Usage"
}```n**Permissions:**n```${
command.accessableby || "Members"
}```n**Cooldown (in seconds):**n```${
command.cooldown || "No Cooldown"
}```n**Aliases:**n```${alia}````
)
.setColor("#4a4b4d")
.setFooter(
`© ${nowyear} ${client.user.username} | This command requested by ${message.author.username}#${message.author.discriminator}`
);
message.channel.send(embed);
} else {
const embeds = new Discord.MessageEmbed()
.setDescription(`${emojis.cross} Command is not found!`)
.setColor("RED");
return message.channel.send(embeds);
}
}
};
module.exports = {
name: "help",
description: "This command is used for displaying all commands.",
usage: "p!help",
accessableby: "Members",
aliases: ['?', 'commands', 'command'],
cooldown: 60
};