136 lines
5.2 KiB
Python
136 lines
5.2 KiB
Python
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()
|