我最近为我的discord服务器创建了一个机器人。现在我希望他过滤坏话。
例如:
用户(没有机器人):你是个混蛋
用户(有机器人):你是[我很愚蠢,因为我发誓]
这在Discord中甚至可能吗?我给了我的机器人所有权限! (包括删除消息,它不能用自编程序编辑消息)
如果那是不可能的话^我们可以做以下事情吗?
直接删除邮件并编写以下内容的能力:
Bot:@username不要发誓!
现在我有以下代码(我不知道是否有用):
if (o1.isEmpty ^ o2.isEmpty)
List(o1,o2).flatMap(_.map(x=>Some(compute(x)))).head
else
None
答案 0 :(得分:1)
使用正则表达式来帮助您从您想要的黑名单字词中进行检测。
例如,如果要将单词asshol*
列入黑名单,请使用正则表达式来检测单词:
if ((/asshole/gm).test(message.content))
message.delete().then(() => {
message.reply('Do not swear!'); // Sends: "@user1234 Do not swear!"
});
}
如果您想将多个单词列入黑名单/过滤器,例如 fu*k
和 sh*t
在正则表达式中使用分隔符:/(word1|word2|word3)/gm
所以...使用:
if ((/(fuck|shit)/gm).test(message.content)) {
message.delete().then(() => {
message.reply('Do not swear!');
});
}
一切正常!
用完整代码重写,
client.on('message', (message) => {
if ((/asshole/gm).test(message.content)) {
message.delete().then(() => {
message.reply('Do not swear!'); // Sends: "@user1234 Do not swear!"
});
}
});
告诉我它是否有效
祝你好运,
绝地
答案 1 :(得分:0)
Docs。目前在Discord API中,没有可能的方法来编辑来自其他用户的消息。您可以完全删除该消息,也可以重新发送但已编辑。如果你想重新发送它,那么你可以使用:
let censor = "[Sorry, I Swear]"; /* Replace this with what you want */
client.on('message', message => {
let edit = message.content.replace(/asshole/gi, censor);
message.delete();
message.channel.send(`${message.author.username}: ${edit}`);
}
输入>>>你好混蛋
输出<<< AkiraMiura:您好[抱歉,我发誓]
请注意,如果用户发送一个2000字节(Charater)长消息,您将无法发送固定版本,它将被删除。
答案 2 :(得分:-1)
尝试:
client.on('message', message => {
message.edit(message.content.replace(/asshole/gi, "[I'm stupid because I swear]"))
.then(msg => console.log(`Updated the content of a message from ${msg.author}`))
.catch(console.error);
});
感谢@AndréDion从API中提出正确的方法