You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:57:04