# flake8: noqa from aiogram import Bot, F, Router, types from src.core.logger import log from src.modules.external.yandexgpt.handlers import answer_to_message from src.modules.standard.config.config import ( get_aproved_chat_id, get_yandexgpt_in_words, get_yandexgpt_start_words, ) from src.modules.standard.database.db_api import * async def chat_check(message: types.Message): # Проверка наличия id чата в базе данных чатов # Если чата нет в базе данных, то проверяем его в наличии в конфиге и если он там есть то добавляем его в БД # Если чат есть в базе данных, то pass if get_chat(message.chat.id) is None: if message.chat.id in get_aproved_chat_id(): # print(f"Chat in approve list: {message.chat.id} {message.chat.title}") await log(f"Chat in approve list: {message.chat.id} {message.chat.title}") add_chat(message.chat.id, message.chat.title) # print(f"Chat added: {message.chat.id} {message.chat.title}") await log(f"Chat added: {message.chat.id} {message.chat.title}") else: # print(f"Chat not in approve list: {message.chat.id} {message.chat.title}") await log( f"Chat not in approve list: {message.chat.id} {message.chat.title}" ) pass else: # Проверяем обновление названия чата chat = get_chat(message.chat.id) if chat.chat_name != message.chat.title: chat.chat_name = message.chat.title chat.save() # print(f"Chat updated: {message.chat.id} {message.chat.title}") await log(f"Chat updated: {message.chat.id} {message.chat.title}") else: # print(f"Chat already exists: {message.chat.id} {message.chat.title}") await log(f"Chat already exists: {message.chat.id} {message.chat.title}") pass async def user_check(message: types.Message): # Проверка наличия id пользователя в базе данных пользователей # Если пользователя нет в базе данных, то добавляем его # Если пользователь есть в базе данных, то pass current_user_name = "" if message.from_user.last_name is None: current_user_name = message.from_user.first_name else: current_user_name = ( message.from_user.first_name + " " + message.from_user.last_name ) if get_user(message.from_user.id) is None: add_user( message.from_user.id, message.from_user.first_name, message.from_user.last_name, message.from_user.username, ) # print(f"User added: {message.from_user.id} {message.from_user.first_name} {message.from_user.last_name}") await log(f"User added: {message.from_user.id} {current_user_name}") else: # print(f"User already exists: {message.from_user.id} {message.from_user.first_name} {message.from_user.last_name} {message.from_user.username}") await log( f"User already exists: {message.from_user.id} {current_user_name} {message.from_user.username}" ) # Проверяем обновление имени пользователя if get_user_name(message.from_user.id) != current_user_name: change_user_name(message.from_user.id, current_user_name) # print(f"User updated: {message.from_user.id} {message.from_user.first_name} {message.from_user.last_name}") await log(f"User name updated: {message.from_user.id} {current_user_name}") # Проверяем обновление username пользователя if get_user_tag(message.from_user.id) != message.from_user.username: change_user_tag(message.from_user.id, message.from_user.username) # print(f"User updated: {message.from_user.id} {message.from_user.username}") await log( f"User tag updated: {message.from_user.id} {message.from_user.username}" ) pass async def add_stats(message: types.Message): # Добавляем пользователю и чату статистику update_chat_all_stat(message.chat.id) update_user_all_stat(message.from_user.id) async def message_processing(message: types.Message, bot: Bot): await chat_check(message) await user_check(message) await add_stats(message) add_message(message) # Если сообщение в начале содержит слово из списка или внутри сообщения содержится слово из списка или сообщение отвечает на сообщение бота if (message.text.split(" ")[0] in get_yandexgpt_start_words()) or ( any(word in message.text for word in get_yandexgpt_in_words()) ): # print("message_processing") await log("message_processing") await answer_to_message(message, bot) elif message.reply_to_message is not None: if message.reply_to_message.from_user.is_bot: # print("message_processing") await log("message_processing") await answer_to_message(message, bot) router = Router() # Если сообщение содержит текст то вызывается функция message_processing router.message.register(message_processing, F.text)