在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
相关产品推荐
相关产品推荐

