不和谐(应用程序)和 Discord.py 似乎具有不同的'mention'标准



我正在写一个机器人,并试图使一个函数,将检查字符串是否提及一个有效的服务器用户。

def validUser(string):
for guild in bot.guilds:
for user in guild.members:
if user.mention == string:
return True
return False

当我添加一些print语句来找出为什么它不起作用时,我意识到一些非常奇怪的事情。当你在应用程序中从消息中获取提及时,它会以"<@![id]>"的形式出现。但是,当您使用user。提到,它没有"<@[id]>"。当手动输入discord时,两者都可以工作,但它们显然与我的功能不兼容。当然,还有其他方法可以使这个函数工作,但现在我很感兴趣的是为什么会发生这种情况,如果有一种方法可以使它…不会发生。

但现在我对为什么会发生这种情况很感兴趣

Discord docs持有答案。这取决于您是通过用户名还是服务器昵称来提及用户。

User                <@USER_ID>
User (Nickname)     <@!USER_ID>

如果你想解决这个问题,你可以使用允许额外!regex。根据您的用例,您可以使用Converter(用于命令参数)或查看Message.mentions

最新更新