Как в телеграм боте сделать функцию input?
Испольхую бибилиотеку PyTelegramBotApi
Хочу сделать телеграмм бот-калькулятора. Который бы принимал любое число введенное польхователям и выполнял команду. Не могу придумать код. Кто сможет помочь, как реализовать функцию input в телеграм боте?
Отрывок с кода. По задумке человек должен вести число, и нажать на стрелку вперед, а бот должен сохранить это число. Так пользователь водит два числа, воспользовавшись стрелкой, а программа должна их прибавить. Не могу придумать код что бы реализовать это.
elif call.data == 'pravo':
bot.answer_callback_query(callback_query_id=call.id, show_alert=True,
text="Введи свої бали ЗНО, шляхом натискання кнопки ➡️")
keybord3 = types.InlineKeyboardMarkup()
button = types.InlineKeyboardButton(text="➡", callback_data="zno1")
keybord3.add(button)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
text="Введіть Бали ЗНО з українскьої мови", reply_markup=keybord3)
Ответы (1 шт):
Вот уже готовая реализация калькулятора. Единственное - в боте реализовано только сложение (+). В роли input() тут выступает функция bot.register_next_step_handler. Также реализовал а-ля Key-Value хранилище в памяти
import telebot
from telebot import types
bot = telebot.TeleBot('BOT TOKEN HERE')
storage = {}
def init_storage(user_id):
storage[user_id] = dict(first_number=None, second_number=None)
def store_number(user_id, key, value):
storage[user_id][key] = dict(value=value)
def get_number(user_id, key):
return storage[user_id][key].get('value')
@bot.message_handler(func=lambda m: True)
def start(message):
init_storage(message.from_user.id)
bot.reply_to(message, "Введите + чтобы прибавить два числа ")
bot.register_next_step_handler(message, plus)
def plus(message):
if message.text == "+":
bot.reply_to(message,"Enter number 1: ")
bot.register_next_step_handler(message, plus_one)
else:
bot.reply_to(message, "Введите + чтобы прибавить два числа ")
bot.register_next_step_handler(message, plus)
def plus_one(message):
first_number = message.text
if not first_number.isdigit():
msg = bot.reply_to(message, 'Enter only digits!')
bot.register_next_step_handler(message, plus_one)
return
store_number(message.from_user.id, "first_number", first_number)
bot.reply_to(message, "Enter number 2: ")
bot.register_next_step_handler(message, plus_two)
def plus_two(message):
second_number = message.text
if not second_number.isdigit():
msg = bot.reply_to(message, 'Enter only digits!')
bot.register_next_step_handler(message, plus_two)
return
store_number(message.from_user.id, "second_number", second_number)
number_1 = get_number(message.from_user.id, "first_number")
number_2 = get_number(message.from_user.id, "second_number")
result_plus = int(number_1) + int(number_2)
bot.reply_to(message, f"Ответ: {result_plus}")
if __name__ == '__main__':
bot.skip_pending = True
bot.polling(none_stop=True)
#bot.infinity_polling()
Удачи!
