У меня есть программа эмулятор игральных кубиков, он там делает броски с различными гранями и т. д, но это не важно. Я хочу её интегрировать в Telegram бота. Я уже начал это делать, но столкнулся с проблемой. Я не могу в @bot.message_handler(content_types=['text']) сделать вычисления, а потом в @bot.callback_query_handler(func=lambda call: True) эти вычисления отправлять.
Я скину код, кто может наведите на верный путь
BOT телеграм
import config
import telebot
from telebot import types
bot = telebot.TeleBot(config.token)
@bot.message_handler(commands=['start'])
def welcome(message):
#keyboard
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton('База данных')
item2 = types.KeyboardButton('Генератор паролей')
item3 = types.KeyboardButton('Эмулятор игральных кубиков')
markup.add(item1,item2,item3)
bot.send_message(message.chat.id,'Добро пожаловать, {0.first_name}!\nЯ - <b>{1.first_name}</b>'.format(message.from_user,bot.get_me()),
parse_mode='html', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def replayter(message):
global hap
if message.chat.type == 'private':
if message.text == 'База данных':
markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton('Общий балл', callback_data='1')
item2 = types.InlineKeyboardButton('Добавить учеников', callback_data='2')
item3 = types.InlineKeyboardButton('Удалить ученика', callback_data='3')
item4 = types.InlineKeyboardButton('Изменить данные ученика', callback_data='4')
item5 = types.InlineKeyboardButton('Распечатать базу данных', callback_data='5')
item6 = types.InlineKeyboardButton('Поиск по возрасту', callback_data='6')
item7 = types.InlineKeyboardButton('Поиск по баллу', callback_data='7')
markup.add(item1, item2, item3, item4, item5,item6,item7)
bot.send_message(message.chat.id, 'Какую операцию Вы хотите выполнить?', reply_markup=markup)
elif message.text == "Генератор поролей":
markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton('Сгенерировать', callback_data='8')
markup.add(item1)
bot.send_message(message.chat.id, 'Какую операцию Вы хотите выполнить?', reply_markup=markup)
elif message.text == "Эмулятор игральных кубиков":
global hap
global results
n = bot.send_message(message, 'Введите количество граней куба: '.format(message.from_user, bot.get_me()))
z = bot.send_message(message.chat.id, 'Введите количество кубов: '.format(message.from_user, bot.get_me()))
g = bot.send_message(message.chat.id,'Введите количество бросков: '.format(message.from_user, bot.get_me()))
sp = [n,z,g]
hap = []
for i in range(sp[2]):
hap.append([])
for j in range(sp[1]):
d = randrange(1, sp[0] + 1)
hap[i].append(d)
results = []
for i in hap:
results.append(sum(i))
markup = types.InlineKeyboardMarkup(row_width=2)
item1 = types.InlineKeyboardButton('Вывести результаты всех кубиков', callback_data='9')
item2 = types.InlineKeyboardButton('Вывести результаты всех бросков', callback_data='10')
item3 = types.InlineKeyboardButton('Вывести максимальную сумму', callback_data='11')
item4 = types.InlineKeyboardButton('Вывести минимальную сумму', callback_data='12')
item5 = types.InlineKeyboardButton('Увеличить результат броска', callback_data='13')
markup.add(item1,item2,item3,item4,item5)
bot.send_message(message.chat.id, 'Какую операцию Вы хотите выполнить?', reply_markup=markup)
else:
bot.send_message(message.chat.id, 'Я таких слов не знаю(')
@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
try:
if call.message:
if call.data == '1':
pass
elif call.data == '2':
pass
elif call.data == '3':
pass
elif call.data == '4':
pass
elif call.data == '5':
pass
elif call.data == '6':
pass
elif call.data == '7':
pass
elif call.data == '8':
pass
elif call.data == '9':
bot.send_message(call.message.chat.id,str(*hap))
elif call.data == '10':
pass
elif call.data == '11':
pass
elif call.data == '12':
pass
elif call.data == '13':
pass
bot.edit_message_text(chat_id= call.message.chat.id, message_id=call.message.message_id, text='База данных',reply_markup=None)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Генератор поролей',
reply_markup=None)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text='Эмулятор игральных кубиков',
reply_markup=None)
bot.answer_callback_query(chat_id=call.message.chat.id, show_alert=True,text = 'Тест')
except Exception as r:
print(repr(r))
bot.polling(none_stop=True)
Программа,которую я хочу интегрировать
from random import randrange
# -*- coding: utf-8 -*-
def wyw(): #ввод данных
n = int(input('Введите количество граней куба: '))
z = int(input('Введите количество кубов: '))
g = int(input('Введите количество бросков: '))
return [n, z, g]
def f_results(): # результаты бросков
global results
results = []
for i in hap:
results.append(sum(i))
return results
def act(): #генератор случайных бросков
global hap
sp = wyw()
hap = []
for i in range(sp[2]):
hap.append([])
for j in range(sp[1]):
d = randrange(1, sp[0] + 1)
hap[i].append(d)
return hap
act()
f_results()
menu_commands ='Какую операцию Вы хотите выполнить?\n1) Вывести результаты всех кубиков\n2) Вывести результаты всех бросков\n3) Вывести максимальную сумму\n4) Вывести минимальную сумму\n5) Увеличить результат броска\n6) Уменьшить результат броска\n7) Вывести файл со значениями бросков\n8) Выйти из программы\nВведите номер операции: '
menu = int(input(menu_commands))
while 0<menu<8:
if menu == 1:
print(*hap)
menu = int(input(menu_commands))
if menu == 2:
print(*results)
menu = int(input(menu_commands))
if menu == 3:
def mx(): # максимальный результат
return max(results)
print(mx())
menu = int(input(menu_commands))
if menu == 4:
def mn(): # минимальный результат
return min(results)
print(mn())
menu = int(input(menu_commands))
if menu == 5:
def pribavit_k_brosku():
pribav = int(input('Введите число, которое хотите прибавить: '))
ind = int(input('К какому броску вы хотите прибавить? (введите числом): ')) - 1
global results
results[ind] = results[ind] + pribav
return results
print(*pribavit_k_brosku())
menu = int(input(menu_commands))
if menu == 6:
def otnyat_ot_broska():
vichet = int(input('Введите число, которое хотите отнять: '))
ind = len(hap) + 1
while ind >= len(hap):
ind = int(input('Из какого броска вы хотите отнять? (введите числом): ')) - 1
results[ind] = results[ind] - vichet
return results
print(*otnyat_ot_broska())
menu = int(input(menu_commands))
if menu == 7:
def log():
f = open('cubelog.txt', 'a+', encoding='utf-8')
f.write(f'{str(hap)}\n\n')
f.close()
log()
menu = int(input(menu_commands))
print('Программа завершена')