如何让Discord.py机器人把用户的DM问卷回复发送给我?
实现Discord.py问卷回复转发到管理员DM的方案
当然可行啦!你已经完成了核心功能的第一步,接下来只需要监听用户在DM中的提交操作,把收集到的回复转发给你就可以了。我给你两种常见的实现方式,你可以根据自己的需求选择:
方式一:使用单独的提交命令(比如#submit)
这种方式适合用户整理好所有回复后,用命令一次性提交。
首先,你需要先获取自己的Discord用户ID(开启开发者模式后右键头像复制即可),然后在代码里定义这个ID:
MY_USER_ID = 你的用户ID数字 # 比如 123456789012345678
然后添加处理提交命令的函数:
@bot.command() async def submit(ctx, *, response): # 验证命令是否在DM中发送 if ctx.channel.type == discord.ChannelType.private: try: # 获取管理员(也就是你)的用户对象 admin = await bot.fetch_user(MY_USER_ID) # 转发回复,带上提交用户的信息方便溯源 await admin.send(f"📝 用户 {ctx.author.display_name}(ID: {ctx.author.id})提交了问卷回复:\n{response}") # 给提交用户发送确认消息 await ctx.send("✅ 你的问卷回复已成功提交,感谢你的参与!") except discord.HTTPException: # 处理发送失败的情况(比如你屏蔽了bot的DM) await ctx.send("⚠️ 抱歉,无法将你的回复发送给管理员,请联系管理员检查设置。") else: # 如果用户在服务器频道发命令,提示去DM提交 await ctx.send("请在与机器人的DM对话中使用此命令提交问卷回复!")
方式二:自动收集多轮问卷回复(无需单独提交命令)
这种方式更流畅,用户回复完每个问题后自动收集,全部完成后直接转发给你,不需要用户额外输入提交命令:
import asyncio # 记得导入asyncio模块 MY_USER_ID = 你的用户ID数字 @bot.command() async def survey(ctx): # 先给用户发送问卷开头 dm_channel = await ctx.author.create_dm() await dm_channel.send("你好!现在开始填写问卷,请依次回复以下问题:") # 定义问卷问题列表,可根据需求修改 questions = [ "1. 你对当前服务器的整体满意度打几分?(1-10分)", "2. 你最喜欢服务器里的哪个功能?", "3. 你对服务器有什么改进建议?" ] responses = [] try: # 逐个发送问题并收集回复 for question in questions: await dm_channel.send(question) # 等待用户回复,超时时间设为5分钟(300秒) msg = await bot.wait_for( 'message', check=lambda m: m.author == ctx.author and isinstance(m.channel, discord.DMChannel), timeout=300 ) responses.append(msg.content) # 收集完成后,把所有回复转发给你 admin = await bot.fetch_user(MY_USER_ID) reply_content = f"📝 新的问卷回复来自用户 {ctx.author.display_name}(ID: {ctx.author.id}):\n" for i in range(len(questions)): reply_content += f"\n{questions[i]}\n回复:{responses[i]}" await admin.send(reply_content) # 通知用户提交成功 await dm_channel.send("✅ 你的问卷已全部填写完成,感谢你的宝贵意见!") except asyncio.TimeoutError: # 处理超时情况 await dm_channel.send("⏰ 问卷提交超时,请重新发送#survey命令开始填写。")
一些注意事项
- 确保你已经开启了Discord的开发者模式:设置→高级→开发者模式,开启后右键自己的头像就能复制ID。
- 不要屏蔽机器人的DM消息,否则机器人无法给你发送转发的回复。
- 如果是使用
wait_for的方式,一定要记得导入asyncio模块。
内容的提问来源于stack exchange,提问作者YwM
相关产品推荐
相关产品推荐

