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

Discord.PY如何在同一命令中提问多个问题并将各答案存入独立变量

实现方案

你需要使用Discord.py内置的wait_for()方法实现逐题提问、逐次收集回答的逻辑,前置要求为:已开启message_content意图,同时在Discord开发者后台的Bot设置页开启了Message Content Intent权限,否则无法读取用户消息内容。

示例代码
from discord.ext import commands
import discord

# 初始化Bot,开启必要意图
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='!', intents=intents)

@bot.command()
async def 收集信息(ctx):
    # 检查函数:仅接收触发命令的用户在当前频道的回复,避免其他消息干扰
    def check(m):
        return m.author == ctx.author and m.channel == ctx.channel

    # 第一个问题,回答存入user_name变量
    await ctx.send("请输入你的昵称:")
    name_msg = await bot.wait_for('message', check=check, timeout=30)
    user_name = name_msg.content

    # 第二个问题,回答存入user_age变量
    await ctx.send("请输入你的年龄:")
    age_msg = await bot.wait_for('message', check=check, timeout=30)
    user_age = age_msg.content

    # 第三个问题,回答存入user_fav_game变量
    await ctx.send("请输入你最喜欢的游戏:")
    game_msg = await bot.wait_for('message', check=check, timeout=30)
    user_fav_game = game_msg.content

    # 收集完成后的后续操作示例,可按需修改
    await ctx.send(f"信息收集完成!\n昵称:{user_name}\n年龄:{user_age}\n最喜欢的游戏:{user_fav_game}")

# 超时异常处理
@收集信息.error
async def 收集信息_error(ctx, error):
    if isinstance(error, commands.CommandTimeoutError):
        await ctx.send("等待回复超时,操作已取消,请重新发起命令。")

bot.run("你的Bot Token")
关键说明
  • 你可以按需增减问题数量,每个问题对应一个独立的变量存储回答,变量命名可自行调整
  • timeout参数为等待回复的最大时长,单位为秒,可自行调整;如果不需要超时限制可以删除该参数,但不推荐,会导致流程永久卡住
  • 如果需要校验回答格式(比如年龄必须为数字),可以在拿到回答变量后增加判断逻辑,不符合要求可以提示用户重新输入,再重新调用一次wait_for即可
  • 如果你使用的是Discord.py的斜杠交互命令,逻辑完全一致,只需要把ctx替换成交互上下文即可

内容的提问来源于stack exchange,提问作者Fish

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:15:05