Top.Mail.Ru
Ответы

Ошибка в python или может быть в библиотеке telebot

У меня есть код и почему то даже если выпадает число меньше чем шансы выпадения бойца он всё равно его не даёт, не записывает в json и не пишет в телеграмм. Это очень странно я уже тысячу раз всё пересмотрел и не нашёл ошибки, а вот сам код:


12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
 import telebot 
import json 
import random 
import os 
 
TOKEN = '6804502685:AAHNs1eyQSc1bdbysJ-EVHXqrck9j01IWSo' 
 
bot = telebot.TeleBot(TOKEN) 
 
fighters = { 
    "воробушек": { 
        "редкость": "легендарная", 
        "маленький ящик": 5, 
        "большой ящик": 10, 
        "мегаящик": 15 
    }, 
    "котик": { 
        "редкость": "эпическая", 
        "маленький ящик": 10, 
        "большой ящик": 15, 
        "мегаящик": 20 
    } 
} 
 
def open_box(user_id, box_type): 
    box_chance = random.randint(1, 100) 
    print(box_chance) 
    chosen_fighter = None 
    coins = random.randint(200, 2000) 
 
    for fighter, info in fighters.items(): 
        if box_type in info and box_chance <= info[box_type]: 
            chosen_fighter = fighter 
            break 
 
    user_data = { 
        "pers": chosen_fighter, 
        "coin": coins 
    } 
 
    if not os.path.exists('user_data.json'): 
        with open('user_data.json', 'w') as file: 
            json.dump({}, file) 
 
    with open('user_data.json', 'r+') as file: 
        data = json.load(file) 
        if str(user_id) not in data: 
            data[str(user_id)] = {"бойцы": [], "монеты": 0} 
        if chosen_fighter: 
            data[str(user_id)]["бойцы"].append(chosen_fighter) 
        data[str(user_id)]["монеты"] += coins 
        file.seek(0) 
        json.dump(data, file, indent=4) 
 
    if chosen_fighter: 
        return user_data 
    else: 
        return None 
 
@bot.message_handler(commands=['open_box']) 
def handle_open_box(message): 
    user_id = message.from_user.id 
    keyboard = telebot.types.InlineKeyboardMarkup() 
    keyboard.row( 
        telebot.types.InlineKeyboardButton('Маленький ящик', callback_data='small_box'), 
        telebot.types.InlineKeyboardButton('Большой ящик', callback_data='big_box'), 
        telebot.types.InlineKeyboardButton('Мегаящик', callback_data='mega_box') 
    ) 
    bot.send_message(user_id, 'Выберите ящик:', reply_markup=keyboard) 
 
@bot.callback_query_handler(func=lambda call: True) 
def handle_box_selection(call): 
    user_id = call.from_user.id 
    box_type = call.data 
 
    user_data = open_box(user_id, box_type) 
    if user_data: 
        bot.send_message(user_id, f'Поздравляем! Вы получили бойца: {user_data["pers"]} и {user_data["coin"]} монет.') 
    else: 
        bot.send_message(user_id, 'Поздравляем! В этот раз вам не выпал боец, но вы получили монеты.') 
 
bot.polling() 
По дате
По рейтингу
Аватар пользователя
Мудрец

.

Аватар пользователя
Мудрец

Что выводит print(box_type)?