TypeError: command.execute 在捕获错误时不是函数。此外,冷却不起作用。在 Discord.js 上
Posted
技术标签:
【中文标题】TypeError: command.execute 在捕获错误时不是函数。此外,冷却不起作用。在 Discord.js 上【英文标题】:TypeError: command.execute is not a function when catching an error. Also, cooldown doesn't work. On Discord.js 【发布时间】:2021-12-29 01:39:49 【问题描述】:我已经在 Discord 机器人上工作了一段时间,也实施了一段时间的冷却命令。它永远不会起作用,今天我决定尝试修复它。
起初,它一直向我发送一条错误消息,说 TypeError: command.execute is not a function
和频道上的一条错误消息,所以我只是删除了 catch (err)
,所以它不会发送那个烦人的消息。但是,当然,这样做可能相当于移除了被划伤的肢体。
现在越来越多的人使用我的机器人,我试图重新设计冷却功能,它位于../events/guild/message.js
,它是这样的:
require('dotenv').config();
const Discord = require('discord.js');
const cooldowns = new Map();
module.exports = async (Discord, client, message) =>
if (message.author.bot) return;
const prefix = message.content.includes("nabe ") ? "nabe " : "n!"
if (message.content.indexOf(prefix) !== 0) return;
const args = message.content.slice(prefix.length).trim().split(/ +/g);
const command = args.shift().toLowerCase();
const cmd = client.commands.get(command) || client.commands.find(a => a.aliases && a.aliases.includes(cmd));
if(message.channel.type === "dm")return message.channel.send("you can't use commands on dm")
if(cmd)
cmd.execute(client, message, args, Discord);
else return
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_amount = (command.cooldown) * 1000;
if(time_stamps.has(message.author.id))
const expiration_time = time_stamps.get(message.author.id) + cooldown_amount;
if(current_time < expiration_time)
const time_left = (expiration_time - current_time) / 1000;
return message.reply(`wait **$time_left.toFixed(1)** more seconds to do $command.name again.`).then(msg => msg.delete( timeout: 7000 ) );
time_stamps.set(message.author.id, current_time);
setTimeout(() => time_stamps.delete(message.author.id), cooldown_amount);
try
command.execute(message, args, cmd, client, Discord);
catch (err)
message.reply("There was an error trying to execute this command.");
console.log(err);
它是如何在每个命令文件上实现的:
module.exports =
info:
name: "command name",
description: "command description",
cooldown: 30,
,
async execute(client, message, args, Discord)
/*code here*/
顺便说一句,我从 youtube 上的 CodeLyon 获得了大部分代码,here's the sourcebin.
每次我执行命令时,它都会在通道上返回TypeError: command.execute is not a function
错误和错误消息。我知道有些人说command.execute
不存在,但它适用于教程视频,我不知道任何替代方案。而且它可能甚至无法修复冷却时间。
如果有人能找到解决方案,我将非常感激。
NodeJS 16.13.0、NPM 8.1.0、DiscordJS 12.5.3、Heroku 服务器。
【问题讨论】:
【参考方案1】:我知道有人说
command.execute
不存在
他们是对的。正如您在定义的命令中看到的那样:
module.exports =
info:
name: "command name",
description: "command description",
cooldown: 30,
,
您似乎没有在命令正文中指定execute
函数。如果你想运行命令,你需要这样做:
module.exports =
info:
name: "command name",
description: "command description",
cooldown: 30,
execute: (client, message, args, Discord) =>
// command logic goes here
,
P.S 我相信您链接的 sourcebin 教程还包含一个 execute
函数:
【讨论】:
实际上,我在每个命令文件中都有一个执行。我没有把它放在这个问题上,我的错。async execute(client, message, args, Discord)
否则,如果我没有在命令文件上执行,这些命令将无法正常工作。
@dimactavish 提问时请提供完整的详细信息。
我已经编辑了这个问题。它现在应该有足够的细节,对吧?我不是说“更多人使用我的机器人”吗?如果它一开始根本不起作用,为什么有人能够使用它。
@dimactavish 您的问题与您的代码的语法错误有关,恰好由您提供的不完整图片补充。因此,我得出一个结论,那就是你遇到的问题。我也不知道您的机器人中包含哪些功能。你说'人们使用我的机器人',但除了命令之外还有什么方式?而且我也不知道你的代码库是如何构成的。
我的代码结构类似于我第一次看到的教程中的代码,即 CodeLyon 的。除了命令之外,其他人甚至可以将我的机器人用于什么用途?除了冷却时间和command.execute
的最后一部分外,一切都很好。以上是关于TypeError: command.execute 在捕获错误时不是函数。此外,冷却不起作用。在 Discord.js 上的主要内容,如果未能解决你的问题,请参考以下文章
反应本机获取多标记[未处理的承诺拒绝:TypeError:TypeError:未定义不是对象(评估'this.state.markers.map
Django TypeError - TypeError: issubclass() arg 1 必须是一个类
pyspark:TypeError:'float'对象不可迭代
Python 3.8 TypeError: can't concat str to bytes - TypeError: a bytes-like object is required, not 's