如何在discord.py中转义@everyone?

时间:2020-06-16 17:32:09

标签: python escaping discord.py chatbot discord.py-rewrite

我正在用Python开发一个Discord机器人,该机器人根据用户输入输出文本。 我要避免让用户说@everyone(和@here),这会标记所有人并惹恼所有人。

我尝试使用\@everyone,与@everyone相比,它不会使文本本身变成蓝色,但是它仍然会触发ping操作并以黄色突出显示行。这不仅发生在我与机器人发送消息时发生,而且如果我直接使用Discord也是如此。

1 个答案:

答案 0 :(得分:2)

我一直在使用的解决方案是在'@'后面插入zero-width space。这不会改变文本外观(“零宽度”),但多余的字符会阻止ping。它具有Unicode代码点200b(以十六进制表示):

message_str = message_str.replace('@', '@​\u200b') 

但是discord.py库本身为此具有 escape_mentions

message_str = discord.utils.escape_mentions(message_str)

已实施almost identically

def escape_mentions(text):
    return re.sub(r'@(everyone|here|[!&]?[0-9]{17,21})', '@\u200b\\1', text)