# flake8: noqa from aiogram import Bot, F, Router, types from ocab_core.modules_system.public_api import get_module, log, register_router # from ocab_modules.standard.database.db_api import * (get_approved_chat_id, get_yandexgpt_in_words, get_yandexgpt_start_words) = get_module( "standard.config", ["get_approved_chat_id", "get_yandexgpt_in_words", "get_yandexgpt_start_words"], ) answer_to_message = get_module("external.yandexgpt", "answer_to_message") ( get_chat, add_chat, get_user, add_user, get_user_name, change_user_name, get_user_tag, change_user_tag, update_chat_all_stat, update_user_all_stat, add_message, ) = get_module( "standard.database", [ "db_api.get_chat", "db_api.add_chat", "db_api.get_user", "db_api.add_user", "db_api.get_user_name", "db_api.change_user_name", "db_api.get_user_tag", "db_api.change_user_tag", "db_api.update_chat_all_stat", "db_api.update_user_all_stat", "db_api.add_message", ], ) async def chat_check(message: types.Message): # Проверка наличия id чата в базе данных чатов # Если чата нет в базе данных, то проверяем его в наличии в конфиге и если он там есть то добавляем его в БД # Если чат есть в базе данных, то pass if get_chat(message.chat.id) is None: if message.chat.id in get_approved_chat_id(): # print(f"Chat in approve list: {message.chat.id} {message.chat.title}") 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}") log(f"Chat added: {message.chat.id} {message.chat.title}") else: # print(f"Chat not in approve list: {message.chat.id} {message.chat.title}") 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}") log(f"Chat updated: {message.chat.id} {message.chat.title}") else: # print(f"Chat already exists: {message.chat.id} {message.chat.title}") 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, ) log(f"User added: {message.from_user.id} {current_user_name}") else: 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) 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) 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()) ): 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: log("message_processing") await answer_to_message(message, bot) router = Router() # Если сообщение содержит текст то вызывается функция message_processing router.message.register(message_processing, F.text) async def module_init(): register_router(router)