我正在开发一个带有命令处理程序的不和谐机器人,在那里我将所有命令导入到主文件中。我遇到的问题是,我正在努力在命令中实现前缀,以便所有命令都可以由文本触发。
我的命令处理程序的工作方式是,我在bot中有这段代码。js:
client.on('message', msg => {
if (msg.content.startsWith(prefix)) return;
//Splitting the message from the user
const args = msg.content.split(/ +/);
const command = args.shift().toLowerCase();
console.log(`Called comand: ${command}`);
//See if the commands folder has that command in it
if (!client.commands.has(command)) return;
//Try to execute the command. If we can't, we throw an error instead.
try {
client.commands.get(command).execute(msg, args);
} catch (error) {
console.error(error);
msg.channel.send("I hit an issue trying to issue that command.");
console.log("A Comnmand was issued, but I hit an issue trying to run it.");
}
在那个文件的顶部我还有
const prefix = '!'
然后我有一个名为index的文件。命令文件夹中的js,如下所示:
module.exports = {
about: require('./about'),
help: require('./help'),
nokill: require('./nokill'),
animeme: require('./animeme'),
showmeme: require('./showmeme'),
roadmap: require('./roadmap'),
changelog: require('./changelog'),
wuvu: require('./wuvu'),
debug: require('./debug'),
dailyquote: require('./dailyquotes'),
dance: require('./dance'),
对于命令,它们看起来像这样:
const GihpyAPIModule = require('./command_modules/fetchGif.js');
module.exports = {
name: 'dance',
decription: 'Sends a dancing GIF',
execute(msg, args) {
msg.channel.send("Here's your dance!");
var searchPromise = GihpyAPIModule.getGif("dance");
searchPromise.then((gif) => {
msg.channel.send(gif);
})
}
在查看了机器人运行的控制台后,我注意到如果我先发送一条带有前缀的消息,比如!跳舞,它甚至不捡起来。它完全忽略了它。
这是我到目前为止尝试的:
>
在bot.js中使用这个:
const args=msg.content.slice(prefix.length)。
因为机器人只是忽略消息!一开始,机器人只是把消息删掉,所以帮助会变成elp。
任何建议都非常感谢!
如果命令以前缀开头,则表示命令退出。回归;函数将终止函数并使其返回某个值,或者它将停止函数并“返回”到主代码。您所做的是使bot返回到监听命令的状态,而不是实际执行命令。
一个简单的解决方法是
if(!msg.content.startsWith(prefix)) return;
这个开始时的标记非常重要。这意味着如果情况并非如此,则返回监听新消息。
您需要替换名为的方法:
if (msg.content.startsWith(prefix)) return;
为此:
if (!msg.content.startsWith(prefix)) return;
我认为它不应该起作用。
当用户使用一个新的不和谐斜杠命令时,我正试图从我们的不和谐机器人发送一个DM给他们。 代码在下面。Discord文档说`Interaction.Member应该是Discord GuildMember,但是,下面的代码给了我以下错误: TypeError:Interaction.Member.Send不是函数 我可以从data字段调用其他本地函数,但一直无法弄清楚如何将用户DM回来。我假设我做错了
我正在将oracle从10升级到12,对于这个特定的项目,我遇到了以下错误: 似乎它没有识别我在DataSource上添加的配置: 我们使用的是Java 8,我们对代码有这些依赖关系: 问题是它正在为另一个项目工作(与这个项目具有相同的结构,但由于某种原因它在这里不起作用) 是否有任何遗漏或我可以找到问题并解决问题的地方?
我最近做了一个不和谐的机器人,有几个功能,这个机器人有一个先进的命令处理程序,我想知道如何做一个命令,在那里,机器人说什么你告诉它。 示例:“.say(消息)” bot以“(消息)”响应 这是我的命令处理程序 没有关于如何使用高级命令处理程序执行此操作的教程 现在的机器人是为了好玩,但我可能会使它成为适度。
问题内容: 我试图写一个近似平方根的函数(我知道有数学模块……我想自己做),但我被浮点运算搞砸了。如何避免这种情况? 使用它会产生以下结果: 我意识到我可以使用,但是我希望能够做到这一点非常准确。我希望能够计算出6或7位数字。如果我四舍五入,那将是不可能的。我想了解如何在Python中正确处理浮点计算。 问题答案: 这实际上与Python无关- 使用硬件的二进制浮点算法,您会在任何语言中看到相同的
问题内容: 考虑以下代码: 我了解在上面的代码中,如果拥有同步块的所有权,并且同时如果线程尝试获取同步块,则需要内核等待。我想避免这种情况,并在块之前旋转,直到调用等待并离开该块的所有权为止。那可能吗? 问题答案: JVM无需将进入锁定的同步块的步骤实现为硬块和上下文切换。它可以选择使用重量更轻的方法,例如旋转锁。实际上,Oracle JVM竭尽所能避免阻塞。因此,您可能会发现JVM已经为您完成了
我正在为自己建立一个虚拟助手,如果像这里举个例子,要求个人执行每一个命令是错误和无效的: 有没有更有效的方法来检查要执行的命令?