我正在用Python开发一个Discord机器人,该机器人根据用户输入输出文本。 我要避免让用户说@everyone
(和@here
),这会标记所有人并惹恼所有人。
我尝试使用\@everyone
,与@everyone
相比,它不会使文本本身变成蓝色,但是它仍然会触发ping操作并以黄色突出显示行。这不仅发生在我与机器人发送消息时发生,而且如果我直接使用Discord也是如此。
答案 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)
def escape_mentions(text):
return re.sub(r'@(everyone|here|[!&]?[0-9]{17,21})', '@\u200b\\1', text)