如何让Discord Python机器人实现猜数字游戏的用户交互响应逻辑?
实现方案(基于discord.py v2.x版本)
核心逻辑可以通过discord.py内置的wait_for方法实现,该方法可以监听指定用户的后续消息,配合随机数生成即可完成猜数字功能,完整可运行示例如下:
import discord from discord.ext import commands import random # 初始化机器人,开启消息内容读取权限 intents = discord.Intents.default() intents.message_content = True bot = commands.Bot(command_prefix="n!", intents=intents) @bot.event async def on_ready(): print(f"机器人已登录,账号为 {bot.user}") @bot.command(name="guessnumber") async def guess_number(ctx): # 生成1-10的随机目标数字 target = random.randint(1, 10) await ctx.send("好的,我正在想一个1到10之间的数字") # 定义消息过滤规则:仅接收触发指令的同一用户、同一频道的消息 def check(msg): return msg.author == ctx.author and msg.channel == ctx.channel try: # 等待用户回复,超时时间设为30秒,可自行调整 reply_msg = await bot.wait_for("message", check=check, timeout=30) # 校验用户输入内容 try: user_guess = int(reply_msg.content) if user_guess < 1 or user_guess > 10: await ctx.send("请输入1到10范围内的有效数字") elif user_guess == target: await ctx.send(f"恭喜你猜对了!正确答案就是{target}") else: await ctx.send(f"猜错啦,正确答案是{target},可以重新发起指令再玩一次") except ValueError: await ctx.send("你输入的不是数字,请重新发起指令后输入有效数字") except TimeoutError: await ctx.send("等待超时,本次猜数字游戏已结束") # 替换为自己的机器人Token即可运行 bot.run("你的机器人Token")
注意:使用前需要先进入Discord开发者平台的机器人设置页面,在「Privileged Gateway Intents」板块开启「Message Content Intent」权限,否则机器人无法读取用户发送的消息内容。
关键逻辑说明:
wait_for是实现后续响应的核心方法,第一个参数指定监听的事件类型,此处message代表监听新消息事件check过滤函数可以避免其他用户的消息或者其他频道的消息干扰当前游戏进程- 示例为单次猜测的最简实现,如果需要支持多次猜测,只需在猜错的逻辑分支添加循环,重新等待用户输入即可
内容的提问来源于stack exchange,提问作者Akio_
相关产品推荐
相关产品推荐

