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
相关产品推荐
相关产品推荐

