from dotenv import load_dotenv import os load_dotenv() # take environment variables # Code of your application, which uses environment variables (e.g. from `os.environ` or # `os.getenv`) as if they came from the actual environment. # Code of your application, which uses environment variables (e.g. from `os.environ` or # `os.getenv`) as if they came from the actual environment. #!/usr/bin/env python # pylint: disable=unused-argument # This program is dedicated to the public domain under the CC0 license. """ Simple Bot to reply to Telegram messages. First, a few handler functions are defined. Then, those functions are passed to the Application and registered at their respective places. Then, the bot is started and runs until we press Ctrl-C on the command line. Usage: Basic Echobot example, repeats messages. Press Ctrl-C on the command line or send a signal to the process to stop the bot. """ import logging from telegram import ForceReply, InlineKeyboardButton, InlineKeyboardMarkup, Update from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters, CallbackQueryHandler # Enable logging logging.basicConfig( format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO ) # set higher logging level for httpx to avoid all GET and POST requests being logged logging.getLogger("httpx").setLevel(logging.WARNING) logger = logging.getLogger(__name__) keyboard = [ [InlineKeyboardButton(text ="9", callback_data = "9"), InlineKeyboardButton(text = "8", callback_data="8"), InlineKeyboardButton(text ="7", callback_data="7"),InlineKeyboardButton(text ="-", callback_data="-")], [InlineKeyboardButton(text ="6", callback_data ="6"), InlineKeyboardButton(text = "5", callback_data="5"), InlineKeyboardButton(text ="4", callback_data="4"),InlineKeyboardButton(text ="+", callback_data="+")], [InlineKeyboardButton(text ="3", callback_data="3"), InlineKeyboardButton(text ="2", callback_data ="2"), InlineKeyboardButton(text = "1", callback_data="1"),InlineKeyboardButton(text ="c", callback_data="c")], [InlineKeyboardButton(text ="0", callback_data="0"),InlineKeyboardButton(text ="=", callback_data="=")], [InlineKeyboardButton(text ="/", callback_data="/"),InlineKeyboardButton(text ="*", callback_data="*"),InlineKeyboardButton(text =".", callback_data=".")], ] # Define a few command handlers. These usually take the two arguments update and # context. async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: """Send a message when the command /start is issued.""" await update.message.reply_text( rf"Здраствуйте, {update.effective_user.full_name}!, начните считать: ", reply_markup=InlineKeyboardMarkup(keyboard)) # keyboard = InlineKeyboardMarkup(keyboard) async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: """Send a message when the command /help is issued.""" await update.message.reply_text("Все команды:/start - перезапуск/запуск системы,/help - помощь в командах.") async def calc(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: query = update.callback_query await query.answer() expression = context.user_data.get("expression", "") data = query.data if data == "c": expression = "" elif data == "=": try: expression = str(eval(expression )) except Exception: expression = "" else: expression += data context.user_data["expression"] = expression await query.edit_message_text(f"Выражение: {expression}", reply_markup=InlineKeyboardMarkup(keyboard)) # async def calc(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: # await update.message.reply_text("Введите выражение:", reply_markup=InlineKeyboardMarkup(keyboard)) # await update.callback_query # print(update.callback_query) # context.chat_data["выражение"] = "0" # query = update.callback_query # await query.answer() # data = query.data # print(data) # # try: # # result = eval(context.chat_data["выражение"]) # # print(result) # # except: # # print("Случилась ошибка") # # print(context.chat_data) # if data == "C": # Exception = "" # elif data == "=": # try # except def main() -> None: """Start the bot.""" # Create the Application and pass it your bot's token. application = Application.builder().token(os.getenv("TOKEN")).build() # on different commands - answer in Telegram application.add_handler(CommandHandler("start", start)) # application.add_handler(CommandHandler("calc", calc)) application.add_handler(CommandHandler("help", help_command)) # on non command i.e message - echo the message on Telegram # application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo)) application.add_handler(CallbackQueryHandler(calc)) # Run the bot until the user presses Ctrl-C application.run_polling(allowed_updates=Update.ALL_TYPES) if __name__ == "__main__": main()