如何实现Nextcord猜数字指令后仅记录发起用户的消息?
实现Nextcord的猜数字指令(仅响应发起用户消息)
你需要用wait_for方法来监听发起指令用户的后续消息,而非全局的on_message,这样能精准关联到当前的猜数字会话。以下是完整实现代码:
import random import nextcord from nextcord.ext import commands client = commands.Bot(command_prefix=".", intents=nextcord.Intents.all()) @client.command(name="guess") async def guess(ctx): await ctx.reply("I thought of a number between **1 and 100, You got 5 guesses good luck!**") guesses = 0 num = random.randint(1, 100) print(num) # 调试用 while guesses < 5: # 仅接收发起指令的用户在同一频道的消息 def check(msg): return msg.author == ctx.author and msg.channel == ctx.channel try: # 等待用户消息,超时60秒自动结束游戏 message = await client.wait_for("message", check=check, timeout=60.0) except nextcord.TimeoutError: await ctx.reply("你太久没输入啦,游戏结束!正确数字是:{}".format(num)) return # 验证输入是否为有效数字 if not message.content.isdigit(): await ctx.reply("请输入有效的数字!") continue user_guess = int(message.content) guesses += 1 if user_guess == num: await ctx.reply("恭喜你猜对了!正确数字就是{},你用了{}次猜测".format(num, guesses)) return elif user_guess > num: await ctx.reply("错误,我想的数字更低!你还有{}次机会".format(5 - guesses)) else: await ctx.reply("错误,我想的数字更高!你还有{}次机会".format(5 - guesses)) # 5次机会耗尽 await ctx.reply("5次机会都用完啦!正确数字是:{}".format(num)) # 替换为你的机器人Token后运行 client.run("YOUR_BOT_TOKEN")
关键逻辑说明:
wait_for("message", check=check):专门监听message事件,通过check函数过滤出仅发起指令的用户、且在同一频道的消息,确保不会响应无关用户的输入。- 输入校验:用
isdigit()判断用户输入是否为数字,若输入无效则提示重新输入,不消耗猜测次数。 - 超时机制:设置60秒超时,避免用户长时间无响应导致会话挂起。
- 循环控制:通过
while guesses <5限制猜测次数,猜对或次数耗尽时直接结束游戏。
内容的提问来源于stack exchange,提问作者0minutes
相关产品推荐
相关产品推荐

