如何用Python开发Discord Bot实现指定用户含已删全消息单独存储?
实现方案
前置准备
首先安装依赖库discord.py:pip install discord.py
之后到Discord开发者平台创建应用,开启Bot功能,记录你的Bot Token,同时在Bot设置页开启Message Content Intent权限。将Bot邀请到目标服务器时,需授予以下权限:
- 查看频道/读取消息
- 发送消息
- 读取消息历史
- 上传附件
核心代码实现
import discord # 自定义配置项,全部替换为你自己的实际值即可 MONITORED_USER_ID = 123456789 # 要监控的目标用户ID LOG_CHANNEL_ID = 987654321 # 专属日志频道的ID BOT_TOKEN = "你的Bot专属Token" # 开启必要的网关意图 intents = discord.Intents.default() intents.message_content = True intents.messages = True client = discord.Client(intents=intents) @client.event async def on_ready(): print(f"Bot已成功登录,当前身份为:{client.user}") @client.event async def on_message(message): # 跳过Bot自身发送的消息,避免循环 if message.author == client.user: return # 匹配到被监控用户的消息时,同步到日志频道 if message.author.id == MONITORED_USER_ID: log_channel = client.get_channel(LOG_CHANNEL_ID) # 构造日志消息内容,包含发送时间、用户名、消息原文 log_text = f"用户 {message.author.name}(ID:{message.author.id})于 {message.created_at.strftime('%Y-%m-%d %H:%M:%S UTC')} 发送:\n{message.content}" # 同步原消息的所有附件(图片、文件等) attachment_files = [] for att in message.attachments: attachment_files.append(await att.to_file()) # 发送到日志频道 await log_channel.send(content=log_text, files=attachment_files) # 可选扩展:标记原消息被删除的状态 @client.event async def on_message_delete(message): if message.author.id == MONITORED_USER_ID: log_channel = client.get_channel(LOG_CHANNEL_ID) await log_channel.send(content=f"*提示:上述对应ID为 {message.id} 的原消息已被发送者/管理员删除*") client.run(BOT_TOKEN)
注意事项
- 所有ID需要先在Discord客户端设置中开启开发者模式,之后右键对应用户/频道选择「复制ID」获取,不要填写用户名或频道名称
- 日志频道建议设置为仅管理员和Bot可访问,避免日志被篡改
- 请勿泄露Bot Token,若Token不慎泄露请立刻到Discord开发者平台重置
- 使用该功能需遵守Discord服务条款、当地数据隐私法规以及所在服务器的管理规则,违规使用需自行承担相应责任
内容的提问来源于stack exchange,提问作者dillythecoder
相关产品推荐
相关产品推荐

