我如何转义 discord.py 中的@everyone?

How do I escape @everyone in discord.py?

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

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

我一直使用的解决方案是在'@'之后插入一个zero-width space。这不会改变文本外观 ('zero-width'),但额外的字符会阻止 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)