import time from typing import Final import re from telegram import Update from telegram.ext import Application, MessageHandler, filters, ContextTypes from typing import Optional import random import os import requests from dotenv import load_dotenv import requests load_dotenv() TOKEN: Final = os.environ.get("TOKEN") BOT_USERNAME: Final = os.environ.get("BOT_USERNAME") CHAT_ID: Final = int(os.environ.get("CHAT_ID")) CHECKPOINT_PATH: Final = "models/seq2seq/checkpoint/150_checkpoint.tar" ROMANTIKI_GIF_ID: Final = "CgACAgIAAxkBAAE4zMlojLmMwqrxG5e2rnYS2f9_PZZgVwACL2oAAjbWyUqiyR5II6u6YDYE" BEZUMTSI_GIF_ID: Final = "CgACAgIAAxkBAAE4zMlojLmMwqrxG5e2rnYS2f9_PZZgVwACL2oAAjbWyUqiyR5II6u6YDYE" last_gif_sent = 1.0 gif_sent_cooldown = 180.0 response_chance = 1.0 def handle_response(author: str, content: str) -> Optional[str]: if random.random() < response_chance: return requests.post("http://localhost:8000/generate", json={"author": author, "content": content + " "}).json()["response"] return None def edit_response(text: Optional[str]) -> Optional[str]: if text is None: return None # text = re.sub(r'\s+([,.!?;])\s+', r'\1 ', text) return text async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE): if update.message.chat_id == CHAT_ID: global last_gif_sent if "роман" in update.message.text.lower() and \ time.time() - last_gif_sent >= gif_sent_cooldown: await context.bot.send_animation( chat_id=update.message.chat_id, animation=ROMANTIKI_GIF_ID) last_gif_sent = time.time() elif "безу" in update.message.text.lower() and \ time.time() - last_gif_sent >= gif_sent_cooldown: await context.bot.send_animation(chat_id=update.message.chat_id, animation=BEZUMTSI_GIF_ID) last_gif_sent = time.time() else: author = "" first_name = update.message.from_user.first_name last_name = update.message.from_user.last_name if first_name: author += first_name if last_name: author += f" {last_name}" content = update.message.text.replace(BOT_USERNAME, '').strip().lower() # response = edit_response(handle_response(author, content)) response = handle_response(author, content) print(response) if response: await context.bot.sendMessage(update.message.chat_id, response, reply_to_message_id=update.message.id) async def error(update: Update, context: ContextTypes.DEFAULT_TYPE): print(f"{update.message.from_user.username} in {update.message.chat.type} " f"chat caused error \"{context.error}\"\n" f"{update}\"") def main() -> None: """Run the bot.""" application = Application.builder().token(TOKEN).build() application.add_handler(MessageHandler(filters.TEXT, handle_message)) application.add_error_handler(error) application.run_polling(allowed_updates=Update.ALL_TYPES, drop_pending_updates=True) if __name__ == '__main__': print("Running main...") # print(chatbot("test")) main()