mirror of
https://gitflic.ru/project/maks1ms/ocab.git
synced 2025-04-04 08:33:47 +03:00
145 lines
5.7 KiB
Python
145 lines
5.7 KiB
Python
# 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)
|