Discord.js 从带有前缀的句子中过滤命令(比如 Hey Bot 给我一块蛋糕)
Posted
技术标签:
【中文标题】Discord.js 从带有前缀的句子中过滤命令(比如 Hey Bot 给我一块蛋糕)【英文标题】:Discord.js Filter the command out of a sentence with prefix (like Hey Bot give me a cake) 【发布时间】:2021-12-01 12:13:55 【问题描述】:我对 JS 和使用 discordjs 比较陌生。目前,带有前缀 (+) 和斜杠命令 (/) 的命令适用于我。但是,只有看起来像这样的命令才有效:Hey Bot ping
、Hey Bot help
等。
我希望机器人过滤掉命令。例如Hey Bot show ping
。 (Hey Bot
是前缀,ping
命令).. 我希望机器人像 Siri 一样工作,就像 Hey Bot show me the ping
。但这仅适用于Hey Bot ping
或Hey Bot ping word1 word2 etc
。也许你知道我如何实现这一点.. 非常感谢!!
这是我的命令 ping.js:
const Message, Client = require("discord.js");
module.exports =
name: "ping",
aliases: ['p'],
permissions : ["SEND_MESSAGES"],
/**
*
* @param Client client
* @param Message message
* @param String[] args
*/
run: async (client, message, args) =>
message.channel.send( content: `$client.ws.ping ws ping` );
,
;
我试过了
run: async (client, message, args) =>
if (message.content.toLowerCase().includes("ping"))
message.channel.send( content: `$client.ws.ping ws ping` )
,
而不是message.channel.send( content: `$client.ws.ping ws ping` );
,但它对我不起作用..
这是我创建消息的方式:
适用于命令和事件处理程序
const client = require("..");
var config = require("../settings/config.json");
var ee = require("../settings/embed.json");
const MessageEmbed = require("discord.js");
client.on('messageCreate', async message =>
let prefix = config.prefix
if (!message.guild) return;
if (message.author.bot) return;
if (message.channel.partial) await message.channel.fetch();
if (message.partial) await message.fetch();
const args = message.content.slice(prefix.length).trim().split(/ +/);
const cmd = args.shift().toLowerCase();
if (message.mentions.has(client.user))
message.channel.send(
embeds: [new MessageEmbed()
.setColor(ee.embed_color)
.setAuthor(`TEST`)
.setDescription(`Use \`$prefixhelp\``)
.setFooter(ee.embed_footertext, ee.embed_footericon)
]
);
const command = client.commands.get(cmd.toLowerCase()) || client.commands.find((cmds) => cmds.aliases && cmds.aliases.includes(cmd));
if (command)
if (!message.member.permissions.has(command.permissions || []))
return message.reply(
embeds: [
new MessageEmbed()
.setColor(ee.embed_color)
.setDescription(`** wrong $command.permissions **`)
]
)
command.run(client, message, args, prefix)
)
【问题讨论】:
【参考方案1】:这不太理想,Siri 很高级,但是要搜索命令你可以这样做:
const command = client.commands.find(c => message.content.includes(c.name.toLowerCase())
当然你也可以包含别名:
String.prototype.includesAny = function (args)
for (const arg of args)
if (this.includes(arg)) return true;
const command = client.commands.find(c => message.content.includes(c.name.toLowerCase()) || message.content.includesAny(c.aliases)
【讨论】:
嘿,Mythical 先生!感谢您的想法和代码。到目前为止它工作正常,但现在它响应没有前缀Hey Bot
的命令。所以我可以使用ping
而不使用Hey Bot
。那不会那么好..我现在不确定如何使用前缀作为必需的因素..
在顶部,放这个:if(!message.content.startsWith("Hey Bot")) return;
对,我自己也能想到!多谢,伙计!但如果我添加这一行,我总是会收到SyntaxError: missing ) after argument list
.. 抱歉问:/
有效!谢了哥们!将其标记为正确!另一个问题。我可以用$config.prefix
之类的东西更改Hey Bot
,这样我就可以更改配置前缀吗? :)
是的,你必须自己做,祝你好运以上是关于Discord.js 从带有前缀的句子中过滤命令(比如 Hey Bot 给我一块蛋糕)的主要内容,如果未能解决你的问题,请参考以下文章
在 discord.js 中制作带有前缀的命令处理程序时出现问题 [重复]
Discord.js - 如何实现前缀以避免错误触发命令响应?