You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在discord.py中如何通过消息ID获取被反应消息的作者用户名?

解决方法

你已经通过fetch_message拿到了目标消息对象,直接通过该对象的author属性就能获取被反应消息的作者。另外修正代码里的几个细节问题:

  • message的类型不是str,无需强行声明为字符串类型(实际是discord.Message对象)
  • payload.member是discord.Member对象,直接存对象可能不符合你的需求,建议提取具体属性(比如用户名、ID)
  • blasted_user从message.author里提取对应属性即可,比如用户名、用户ID

修正后的代码示例:

import discord
from datetime import datetime

@client.event
async def on_raw_reaction_add(payload):
    if str(payload.emoji) == '🫃':
        with app.app_context():
            # 获取目标频道与消息对象
            channel = await client.get_channel(payload.channel_id)
            message = await channel.fetch_message(payload.message_id)
            
            # 获取被反应消息的作者(按需选择属性:name/id/mention等)
            blasted_user = message.author.name
            # 获取添加反应的用户(同样按需选择属性)
            blasting_user = payload.member.name
            log = datetime.now().strftime("%D:%H:%M:%S")
            message_id = payload.message_id
            
            # 注意:data模型的参数需与传入值类型匹配,比如存消息内容用message.content
            db.session.add(data(blasted_user, blasting_user, message.content, log, message_id))
            db.session.commit()

关键说明:

  • message.author是discord.User或discord.Member对象,包含用户ID、用户名、头像等完整信息,按需提取即可
  • 若需要用户唯一标识,用message.author.id;需要@格式的提及字符串,用message.author.mention
  • 因为on_raw_reaction_add基于原始事件触发,payload本身不携带消息作者信息,通过频道ID+消息ID拉取消息对象是标准且可行的实现方式

内容的提问来源于stack exchange,提问作者MAN HUMAN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:07:43