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

如何实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 12:00:24