如何在其中创建一个包含 2 个单词的命令 Discordjs
Posted
技术标签:
【中文标题】如何在其中创建一个包含 2 个单词的命令 Discordjs【英文标题】:How to make a command with 2 words in it Discordjs 【发布时间】:2021-06-11 20:31:33 【问题描述】:我正在尝试为我的社区服务器编写一个 discord.js 机器人,但在制作帮助命令时遇到了一些问题。我有一个>help
的命令,它显示并嵌入了所有不同类别的命令。它还显示了如何查看其他命令,但为了能够做到这一点,我需要能够拥有像 >help fun
或 >help staff
这样的命令。我试图制作>help fun
命令,但是当我键入它时,它只接受第一个参数,并且只显示>help
嵌入。如果有人可以向我展示>help fun
命令的代码,它只会发送一个新的 Discord.MessageEmbed,那就太好了。这是我尝试使用的代码:
module.exports =
name: 'help fun',
description: "get some `fun` help!",
execute(message, args, Discord)
const helpfunEmbed = new Discord.MessageEmbed()
.setColor('#9947d6')
.setAuthor('Vero Commands List', 'https://cdn.discordapp.com/attachments/746321327727706226/819556499088605214/Hypers.png')
.setDescription("The Vero Bot prefix for `Ak's Basement` is `>`")
.setThumbnail('https://images-ext-2.discordapp.net/external/hn8Iyc--j2npBvCjnAsXUt78zMovfsTj_DyRaBb1YdU/https/media.giphy.com/media/eEx0qRFYM1dyGQPAID/giphy.gif')
.addFields(
name: '`>ping`', value: 'shows bot latency',
name: '**Work In Progress**', value: 'More commands coming soon!',
)
message.channel.send(helpfunEmbed);
【问题讨论】:
【参考方案1】:这是一个代码示例,
btw discord.js guide 对此有完整的解释,因此您可能想阅读它
如果您想访问该页面,请点击此处的链接;
https://discordjs.guide/creating-your-bot/commands-with-user-input.html
这是一个代码示例,
我假设 execute(message, >>>> args <<<<< , Discord)
(args) 传递一个数组(这段代码是根据我上面说的指南)
module.exports =
name: 'help'
description: "get some `fun` help!",
execute(message, args)
if(!args[0]) // if no args were give : ex: ">help"
const helpEmbed = new Discord.MessageEmbed()
.setColor('#9947d6')
.setAuthor('something here')
.setDescription("A description")
// do whatever you want with the code and send it,
// assume prefix is >
// this is if there were no args: ">help" will be the command
return message.channel.send(helpEmbed);
else if(args[0].toLowerCase() == 'fun') // lowercase it so it will not be case sensitive ex: this would allow ">help FUn" and ">help fun"
const helpFunEmbed = new Discord.MessageEmbed()
.setColor('#9947d6')
.setAuthor('something here')
.setDescription("")
return message.channel.send(helpFunEmbed)
else if(args[0] == 'info') // without ".toLowerCase()" will only allow : ">help info" and will give the below error we set if we use something like ">help Fun"
// do something here (send your embed with help menu for info)
else // optional, if some one do a invalid category, it will send a error : ex: ">help dfsg"
return message.channel.send('Invalid category')
这样您就不必为每个类别创建单独的命令* 我们可以检查 args 看看他们是否提供了任何 args(下面有详细解释)
ps:你会注意到我已经从 execute(message, args)
中删除了 Discord
这是因为您不需要像这样导出 Discord,您可以这样做
const Discord = require('discord.js')
在顶部。改变这一点没有区别,但我喜欢只需要它在顶部,如果你想在那里添加不和谐,比如execute(message, args, Discord)
简单解释一下我们在这里做什么
首先,我们检查args[0]
是否未定义(如果用户在前面没有任何内容的情况下执行“帮助”,这将检测到并发送
如果返回 undefined,它将发送带有类别的嵌入
如果给定一个 arg,它将转到 if-else
链
检查 args = 是否符合我们设置的类别。
如果将带有相关命令信息的嵌入发送给用户 如果它不等于它检查的类别,它将通过所有 if else 链查看它是否匹配 如果不匹配,它将发送错误“无效类别”,这意味着用户发送了我们不想要的类别
【讨论】:
非常感谢。这非常有帮助,将使执行此帮助命令变得更加容易! np,如果您觉得这有帮助,请将其标记为答案【参考方案2】:创建帮助命令,让用户将“fun”作为参数传递,然后基于机器人的回复,这样您就可以对所有帮助部分使用一个命令。
【讨论】:
我尝试这样做,它适用于 args,但如果我写 >help fun 它会同时发送 >help fun 和>帮助 嵌入。我应该怎么做才能解决这个问题?以上是关于如何在其中创建一个包含 2 个单词的命令 Discordjs的主要内容,如果未能解决你的问题,请参考以下文章
如何创建一个字符串数组来分割一个字符,其中单词用“”分隔? C++