你好!
所以我当前正在将我的机器人更新到DiscordJS的12.3.1版本。不幸的是,我陷入了一个我无法真正找到解决方法的问题。因此,我的机器人程序有一个模块,可以过滤掉所有亵渎词,例如亵渎,种族歧视等等。
目前在11.4上可以正常使用,但无法在12.3.1上使用。 由于某种原因,该漫游器完全不响应给定的消息。
我有两个“过滤器”,一个过滤单词,一个过滤邀请。他们两个都停止工作。
bot.on('message', async message => {
// Events Listeners
if (message.author.bot) return;
if (message.channel.type === 'dm') return;
let messageArray = message.content.split(' ');
let command = messageArray[0];
let args = messageArray.slice(1);
if (!command.startsWith(prefix)) return;
let cmd = bot.commands.get(command.slice(prefix.length)) || bot.aliases.get(command.slice(prefix.length));
if (cmd) cmd.run(bot, message, args);
// First filter
var array = ['testing', 'yes', 'no'];
if (array.includes(message.content.toLocaleLowerCase())) {
message.channel.send('test')
}
// Second filter
if (message.content.includes('discord.gg/') {
message.delete()
}
}
这是我在2个月前从另一个StackOverflow帖子中发现的最新帖子。 Discord.js V12 Rude words filter not working
如果可以的话,我真的很想得到一些帮助,因为我找不到任何原因使该功能停止工作。
谢谢!:)
答案 0 :(得分:3)
您的过滤器位于命令处理逻辑之后。
您所在的行:
if (!command.startsWith(prefix)) return;
在您的代码的早期,这会导致消息处理在不是命令的任何消息上立即终止。因此,除非消息以机器人的前缀开头,否则代码将永远不会到达过滤器,此时消息内容可能无法与任何单词相等,并且极不可能包含discord.gg/
。
只需将过滤器移动到消息处理程序的开头。或者,也可以将命令处理和过滤器处理分成单独的函数,以便上面的return
语句仅退出命令处理,并且过滤器处理仍将运行。