如何正确解析我的 Discord 机器人中的标记用户?

Posted

技术标签:

【中文标题】如何正确解析我的 Discord 机器人中的标记用户?【英文标题】:How can I properly parse for a tagged user in my Discord bot? 【发布时间】:2018-06-18 20:19:50 【问题描述】:

我正在向我的 Discord 机器人添加个人资料卡,但我遇到了一个问题。当有人键入!profile @user 时,我不确定如何正确解析@user,以便机器人知道要查找哪个个人资料卡。

我首先解析 message.content,然后删除消息内容的前 9 个字符(始终为 !profile),但消息内容的其余部分返回看起来为 <@289583108183948460> 的 user_id,而不是用户的区分。我曾尝试使用 re.sub 删除特殊字符(@、> 和

a = str(message.content[9:])
removeSpecialChars = re.sub("[!@#$%^&*()[];:,./<>?\|`~-=_+]", " ", a)
print(removeSpecialChars)

但是当我只想要数字时,奇怪的字符仍然存在,因此我可以轻松地在数据库中搜索它。我确信有更好的方法可以做到这一点,但我想不通。

【问题讨论】:

【参考方案1】:

discord.py 的消息对象包含一个Message.mentions 属性,因此您可以遍历Member 的列表。以下是 async 和 rewrite 的文档列表。

有了这个,你可以简单地迭代提及:

for member in ctx.message.mentions:
    # do stuff with member

你真正想要的

discord.py 允许您从带有type hinting 的消息中获取discord.Member 对象。只需将以下内容添加到命令中

@bot.command()
async def profile(ctx, member: discord.Member=None):
    member = member or ctx.message.author

【讨论】:

以上是关于如何正确解析我的 Discord 机器人中的标记用户?的主要内容,如果未能解决你的问题,请参考以下文章

Discord 机器人不会向我标记的用户发送消息

如何在 discord.js 中使用 message.channel.send 正确标记用户

(discord.py) 检查消息是不是包含列表中的元素的正确方法是啥?

如何在 discord.py 机器人中正确使用任务/事件循环?

Discord py - 不同服务器上的相同机器人

用 python 在 Discord 上标记某人 [重复]