如何让Discord Bot获取命令所回复的目标消息?
如何在Discord Bot中获取用户回复的目标消息
不管你用的是Python的discord.py还是JavaScript的discord.js,都可以通过消息对象的引用属性来获取被回复的目标消息,以下是具体实现方式:
使用discord.py(Python)
- 命令上下文里的
message对象自带reference属性,指向用户回复的消息引用。调用resolve()异步方法就能拿到完整的目标消息对象。 - 示例代码:
@bot.command() async def vote(ctx): # 检查当前命令消息是否是回复别人的消息 if ctx.message.reference: try: # 获取目标消息 target_message = await ctx.message.reference.resolve() # 后续可对target_message做处理,比如获取内容、作者ID等 await ctx.send(f"找到目标消息:{target_message.content}") except discord.NotFound: await ctx.send("目标消息已被删除或无法访问") else: await ctx.send("请先回复一条消息再执行这个命令")
使用discord.js(JavaScript)
- 消息对象的
reference属性里包含目标消息的ID,通过频道的messages.fetch()方法可以获取到目标消息。 - 示例代码:
client.on('messageCreate', async (message) => { if (message.content === '!vote') { if (message.reference) { try { // 通过消息ID获取目标消息 const targetMessage = await message.channel.messages.fetch(message.reference.messageId); message.channel.send(`找到目标消息:${targetMessage.content}`); } catch (error) { message.channel.send("目标消息已被删除或无法访问"); } } else { message.channel.send("请先回复一条消息再执行这个命令"); } } });
注意事项
- 确保Bot拥有对应频道的读取消息历史权限,否则会获取失败。
- 若目标消息被删除、所在频道Bot无权访问,会触发异常,必须做捕获处理避免Bot崩溃。
内容的提问来源于stack exchange,提问作者Mildly Intelligent
相关产品推荐
相关产品推荐

