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

Telegram猜数字机器人每次收用户猜测就更换秘密数字问题求解

问题修复方案

核心错误点

  • 赋值逻辑反向:你想将生成的随机数存入guess_number.variable做全局存储,但代码里写成了将不存在的guess_number.variable赋值给临时变量a,直接触发未定义访问报错
  • 命令处理函数结构错误:/start命令绑定的guess_number函数没有接收telebot要求传入的message参数,也没有和后续的欢迎消息发送逻辑做关联
  • 无属性初始化逻辑:第一次调用函数前guess_number.variable不存在,直接访问必然报错

单用户可用修复代码

import random
import telebot
from telebot.types import Message
bot = telebot.TeleBot("-token-")

# 提前初始化函数属性避免首次访问报错
guess_number.variable = random.randint(0, 100)

@bot.message_handler(commands = ('start'))
def send_welcome(message):
    # 启动游戏时生成新的秘密数字存入函数属性
    guess_number.variable = random.randint(0, 100)
    bot.send_message(message.chat.id, "you entered a guessing game, traveller. Guess a number from 0 to 100, or be eaten by a dragon.")

@bot.message_handler(func=lambda message: True)
def checking(message):
    try: 
        user_message = int(message.text)
        if user_message > guess_number.variable:
            bot.send_message(message.chat.id, "your number is greater than mine")
        elif user_message < guess_number.variable:
            bot.send_message(message.chat.id, "your number is smaller than mine")
        else:
            bot.send_message(message.chat.id, "yep, that's the right number. Send /start to play again.")
    except ValueError:
            bot.send_message(message.chat.id, "you must enter an integer")
bot.polling()

多用户兼容优化

上述单用户版本所有用户共用同一个秘密数字,若需要支持多用户同时游玩互不干扰,可改用字典按会话ID存储秘密数字:

import random
import telebot
from telebot.types import Message
bot = telebot.TeleBot("-token-")

# 全局存储字典:key为聊天会话ID,value为对应会话的秘密数字
secret_numbers = {}

@bot.message_handler(commands = ('start'))
def send_welcome(message):
    secret_numbers[message.chat.id] = random.randint(0, 100)
    bot.send_message(message.chat.id, "you entered a guessing game, traveller. Guess a number from 0 to 100, or be eaten by a dragon.")

@bot.message_handler(func=lambda message: True)
def checking(message):
    # 校验用户是否已启动游戏
    if message.chat.id not in secret_numbers:
        bot.send_message(message.chat.id, "Send /start to start the game first.")
        return
    try: 
        user_message = int(message.text)
        secret = secret_numbers[message.chat.id]
        if user_message > secret:
            bot.send_message(message.chat.id, "your number is greater than mine")
        elif user_message < secret:
            bot.send_message(message.chat.id, "your number is smaller than mine")
        else:
            bot.send_message(message.chat.id, "yep, that's the right number. Send /start to play again.")
            # 猜对后清除当前会话的记录
            del secret_numbers[message.chat.id]
    except ValueError:
            bot.send_message(message.chat.id, "you must enter an integer")
bot.polling()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:15:03