Python 人们用重复的字母绕过反咒骂系统

Python 人们用重复的字母绕过反咒骂系统,python,discord,discord.py,Python,Discord,Discord.py,好吧,我在discord.py中创建了一个反咒骂系统,但您可以轻松绕过它。这里有一个例子:假设“cat”是一个脏话,那么你只需执行“ccaatt”,机器人就不会检测到它。我该如何解决这个问题? 代码如下: @client.event 异步def on_消息(消息): 尝试: 如果message.author.bot: 返回 如果message.user中的client.user提到: response=f“你好!我是隐形机器人。我的前缀是“-”。要查看命令列表,请执行“-help” 等待消息。通

好吧,我在discord.py中创建了一个反咒骂系统,但您可以轻松绕过它。这里有一个例子:假设“cat”是一个脏话,那么你只需执行“ccaatt”,机器人就不会检测到它。我该如何解决这个问题? 代码如下:

@client.event
异步def on_消息(消息):
尝试:
如果message.author.bot:
返回
如果message.user中的client.user提到:
response=f“你好!我是隐形机器人。我的前缀是“-”。要查看命令列表,请执行“-help”
等待消息。通道。发送(响应)
打印(f“{message.author.name}在{message.channel}!”中向我发送了ping命令)
通过
如果message.channel.id==828667602351161354或message.channel.id==820049182860509206:
通过
其他:
如果亵渎包含亵渎(message.content):
等待消息。删除()
warnMessage=f“嘿{message.author.notice}!别这么说!\n*你说的是{message.content}}|*”
wait message.channel.send(warnMessage,delete_after=5.0)
打印(f“{message.author.name}尝试说:{message.content}”)
通道=客户端获取通道(83623273312642666)
embed=discord.embed(title=f“某人试图发誓!”,color=0x2d)
embed.add_字段(name=“试图发誓的人:”,value=f“{message.author.name}”,inline=False)
embed.add_字段(name=“他们试图说的:”,value=f“{message.content}”,inline=False)
add_字段(name=“Debug:”,value=f“{profanity}”,inline=False)
embed.add_字段(name=“Debug 2:”,value=f“{message.content.lower}”,inline=False)
embed.add_字段(name=“他们试图宣誓加入的频道:”,value=f“”,inline=False)
等待通道发送(嵌入=嵌入)
通过
等待客户端处理命令(消息)
例外情况除外,如e:
打印(e)

如果邮件中有脏话,请执行
操作。内容:邮件。删除


这将检查消息内容是否包含该字符串。您可以尝试以下方法

def replaceDoubleCharacters(string):
    lastLetter, replacedString = "", ""
    for letter in string:
        if letter != lastLetter:
            replacedString += letter
        lastLetter = letter
    return replacedString


replacedDoubleCharacters
完全按照它所说的做。但是你应该记住,人们试图绕过限制是很常见的事情,他们会找到其他方法。

我会这样做,就是像这样使用
difflib

导入difflib 脏话=[“猫”,“狗”] swearWordsFound=difflib.get\u close\u匹配(“stringToCheck”,swearWords)
不要重新发明轮子:祝你好运。由于unicode替换和组合字符、拼写错误、6500种人类语言、“斯肯索普”问题、“斯肯索普”问题、关于什么是亵渎的巨大争议和主观性,以及古老人类的聪明才智,这可能是一个无法解决的问题。肯定是一个使用第三方解决方案的解决方案,可能是付费服务,如果有后果,例如未成年人将要与之交互的内容。这将是一个常规的过滤器,而不是问题中所述的能够检测到变化(如ccaatt)的东西。但我对此有问题。我可以出于某种原因说“bitchhh”。。(还有一些像cuunt这样的脏话)是的。在某些情况下,.join方法不适用。我写了一个更好的版本,应该考虑到一切。我在答案中更新了。哦,nvm,你修好了。谢谢不过,我有一个问题,用户仍然可以绕过它,这样做:“fu-c-k”或“bit-c-h”。我该如何解决这个问题?你可能应该在另一个问题中问这个问题?我该如何在更好的亵渎中使用它?你为什么要在更好的亵渎中使用它?
get\u close\u matches
查找给定单词的最接近匹配项,因此我无法理解您的问题。。。你能提供更多细节吗?我只是更喜欢使用更好的亵渎,因为它会自动添加旁路,如sh1t、b1tch等
# your code
if profanity.contains_profanity(message.content) or profanity.contains_profanity(replaceDoubleCharacters(message.content)):
    await message.delete()
# more of your code