如何让Discord机器人读取回复内容及被回复的消息内容?
实现Discord机器人读取回复内容与被回复消息的方法
核心思路是利用Discord消息的reference属性,它会记录当前消息回复的目标消息。结合on_message事件,就能同时获取回复内容和被回复的消息内容,进而实现移除电影的功能。
具体步骤与代码示例
以下以discord.py库为例(你熟悉的on_message属于这个库的事件):
开启必要的机器人权限
在Discord开发者后台的机器人设置中,开启Message Content Intent和Messages Intent,否则无法读取消息内容与引用信息。编写
on_message事件逻辑
import discord from discord.ext import commands # 初始化机器人,开启所需意图 intents = discord.Intents.default() intents.message_content = True intents.messages = True bot = commands.Bot(command_prefix='!', intents=intents) # 你的电影推荐列表 movie_list = ["星际穿越", "盗梦空间", "泰坦尼克号"] @bot.event async def on_message(message): # 处理现有命令(如果有),避免冲突 await bot.process_commands(message) # 跳过机器人自身发送的消息 if message.author == bot.user: return # 判断当前消息是否为回复消息 if message.reference and message.reference.resolved: # 获取被回复的原始消息对象 referenced_msg = message.reference.resolved # 确认被回复的消息是当前机器人发送的 if referenced_msg.author == bot.user: # 检查回复内容是否为指定触发词(比如"移除") if message.content.strip() == "移除": # 从机器人的推荐消息中提取电影名称 # 这里要和你机器人发送推荐消息的格式匹配,示例格式为"推荐电影:XXX" movie_name = referenced_msg.content.replace("推荐电影:", "").strip() # 移除列表中的对应电影 if movie_name in movie_list: movie_list.remove(movie_name) await message.channel.send(f"已移除电影:{movie_name}") else: await message.channel.send("该电影不在推荐列表中") # 替换为你的机器人Token并启动 bot.run("YOUR_BOT_TOKEN")
关键细节说明
message.reference.resolved:返回被回复的消息对象,若被回复消息已删除则为None,建议实际使用时可增加非空判断。- 电影名称提取逻辑:必须和你机器人发送推荐消息的格式一致,比如如果你的推荐语是“今日推荐:《星际穿越》”,就要调整字符串处理代码为
movie_name = referenced_msg.content.replace("今日推荐:《", "").replace("》", "").strip()。 - 触发词可自定义:将
"移除"替换成你想要的词汇即可。
内容的提问来源于stack exchange,提问作者user22618144
相关产品推荐
相关产品推荐

