Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

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


 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()
Голосование за лучший ответ
Терр Онтал Мудрец (12764) 9 месяцев назад
Что выводит print(box_type)?
aleks hzЗнаток (367) 9 месяцев назад
рендомно выбранное число
Терр Онтал Мудрец (12764) aleks hz, ну и каким образом ЧИСЛО может быть ключом в словаре, в котором все ключи - строки?
Беспрекословный Эксперт Мыслитель (6698) 9 месяцев назад
.
aleks hzЗнаток (367) 9 месяцев назад
гуру, а ответы в chatgpt задаёт, библиотеку я импортировал и всё что он сказал правильно
aleks hz Знаток (367) aleks hz, не правильно*
Похожие вопросы