Python discord.utils.escape#u提到don';不行?

Python discord.utils.escape#u提到don';不行?,python,discord,discord.py,Python,Discord,Discord.py,我正在尝试使用discord.utils.escape\u提及来消除message.content中的提及。 长话短说,我注意到它并没有像我预期的那样工作 var = discord.utils.escape_mentions("test @!334765815435886592 test") print(var) 将源字符串打印为输出 试验@​!334765815435886592试验 然而,这里是escape_提到的定义 return re.sub(r'@(everyo

我正在尝试使用
discord.utils.escape\u提及
来消除
message.content
中的提及。 长话短说,我注意到它并没有像我预期的那样工作

var = discord.utils.escape_mentions("test @!334765815435886592 test")
print(var)
将源字符串打印为输出

试验@​!334765815435886592试验

然而,这里是escape_提到的定义

return re.sub(r'@(everyone|here|[!&]?[0-9]{17,20})', '@\u200b\\1', text)
如果我复制它并用一个空字符串替换“@\u200b\1”,所有这些都可以很好地工作,我得到了一个很好的结果

测试


有人能给我解释一下这种行为以及我如何使用这个功能吗?

我想你误解了escape\u提到的真正功能。看起来您希望它将@[0-9]+替换为空字符串,但实际情况并非如此

re.sub
接受3个参数——模式、要替换的文本(从某种意义上讲)和要操作的文本。看看这个:

如您所见,我将
作为输出。有趣的是,如果我把它打印出来,我会得到这个:

请注意,它看起来与我的原始文本相同。这是因为
\u200b
实际上是a,打印时不可见


因此,在现实中,escape_提及在
@
和id之间插入一个零宽度的空格。因此,在不一致的情况下,它不是提及,而是文本。

我希望所有提及都会被删除,因为我在文档中读到了这一点。“一个帮助函数,可以逃避所有人、角色和用户的提及。返回删除提及的文本。”我认为这是一个有点混乱的描述。谢谢你的解释。我将使用我的丑陋定义副本:)