如何在Python Discord Bot中获取被提及用户的ID?
获取Discord消息中提及用户的ID
嘿,我来帮你搞定这个问题!假设你用的是discord.py(目前最流行的Python Discord机器人开发库),其实获取消息里被提及用户的ID非常简单,核心就是利用消息对象的mentions属性。
基础方法:监听消息并提取提及用户
消息对象(discord.Message)的mentions属性会返回一个列表,里面包含了这条消息中所有被@的discord.User或discord.Member对象。你可以直接从这些对象里取出ID:
@bot.event async def on_message(message): # 跳过机器人自己的消息,防止循环触发 if message.author == bot.user: return # 检查消息里有没有提及用户 if message.mentions: # 遍历所有被提及的用户 for mentioned_user in message.mentions: user_id = mentioned_user.id # ID是整数类型 await message.channel.send(f"你提到了 {mentioned_user.name},TA的ID是:{user_id}") else: await message.channel.send("这条消息里没提到任何用户哦~") # 别忘了处理其他命令(如果用了命令前缀的话) await bot.process_commands(message)
更简洁的命令式写法
如果你用的是discord.py的commands.Bot框架,还可以直接通过命令参数自动解析被提及的用户,不用自己处理列表:
@bot.command(name="getid") async def get_mentioned_user_id(ctx, user: discord.User): # 这里的user参数会自动识别消息中@的用户 await ctx.send(f"你提到的用户ID是:{user.id}")
用户只需要发!getid @某某用户,就能得到对应的ID,非常方便。
注意事项
message.mentions不会包含@everyone或@here,因为这些不是具体用户- 如果不想包含机器人自己,可以在遍历的时候加个判断:
if mentioned_user != bot.user - 取列表元素前一定要先判断列表不为空,不然会抛出索引错误
这样应该就能完美解决你的问题啦!
内容的提问来源于stack exchange,提问作者Raebel Christo




