import telegram
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler

CALCULATOR, FIRST_NUMBER, SECOND_NUMBER, OPERATION = range(4)

def start(update, context):
keyboard = [[InlineKeyboardButton(“Калькулятор”, callback_data=‘calculator’)]]
reply_markup = InlineKeyboardMarkup(keyboard)
update.message.reply_text(‘Выберите действие?’, reply_markup=reply_markup)

def main():
# Replace ‘BOT_TOKEN’ with your bot’s token received from BotFather
updater = Updater(token=‘BOT_TOKEN’, use_context=True)
dispatcher = updater.dispatcher

# Registering handler for command ‘/start’
start_handler = CommandHandler(‘start’, start)
dispatcher.add_handler(start_handler)

# Registering handler for handling inline button callback
callback_query_handler = CallbackQueryHandler(button)

# Registering conversation handler for calculator
calculator_conv_handler = ConversationHandler(
entry_points=[CallbackQueryHandler(button)],
states={
FIRST_NUMBER: [MessageHandler(Filters.text & (~Filters.command), get_first_number)],
SECOND_NUMBER: [MessageHandler(Filters.text & (~Filters.command), get_second_number)],
OPERATION: [MessageHandler(Filters.text & (~Filters.command), perform_operation)],
},
fallbacks=[CommandHandler(‘cancel’, cancel)]
)
dispatcher.add_handler(calculator_conv_handler)

# Starting the bot
updater.start_polling()
updater.idle()

def button(update, context):
query = update.callback_query
if query.data == ‘calculator’:
query.edit_message_text(text=‘Введите первое число:’)
return FIRST_NUMBER

def get_first_number(update, context):
context.user_data[‘first_number’] = int(update.message.text)
update.message.reply_text(‘Введите второе число:’)
return SECOND_NUMBER

def get_second_number(update, context):
context.user_data[‘second_number’] = int(update.message.text)
update.message.reply_text(‘Выберите действие:\n1. Сложение\n2. Вычитание\n3. Умножение\n4. Деление’)
return OPERATION

def perform_operation(update, context):
first_number = context.user_data[‘first_number’]
second_number = context.user_data[‘second_number’]
operation = int(update.message.text)

if operation == 1:
result = first_number + second_number
elif operation == 2:
result = first_number - second_number
elif operation == 3:
result = first_number * second_number
elif operation == 4:
result = first_number / second_number

update.message.reply_text(f’Результат: {result}')

return ConversationHandler.END

def cancel(update, context):
update.message.reply_text(‘Операция прервана.’)
return ConversationHandler.END

if name == ‘main’:
main()

Этот код демонстрирует использование inline кнопок и конверсаций. Если пользователь выбирает кнопку “Калькулятор”, он переходит в режим конверсации, в котором ему предлагается ввести 2 числа и выбрать операцию, которую нужно выполнить. Результат вычисления отображается как обычное текстовое сообщение.

Обратите внимание, что этот код не содержит реального обращения к финансовым ресурсам, поскольку это может представлять риск безопасности и необходимость проверки подлинности. Это просто пример, который демонстрирует функциональность бота, использующего inline кнопки и калькулятор. Нужно добавить в код привязку баз данных и возможность добавления платёжных систем