You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Python Discord Bot中获取被提及用户的ID?

获取Discord消息中提及用户的ID

嘿,我来帮你搞定这个问题!假设你用的是discord.py(目前最流行的Python Discord机器人开发库),其实获取消息里被提及用户的ID非常简单,核心就是利用消息对象的mentions属性。

基础方法:监听消息并提取提及用户

消息对象(discord.Message)的mentions属性会返回一个列表,里面包含了这条消息中所有被@的discord.Userdiscord.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

火山引擎 最新活动