59 lines
2 KiB
Python
59 lines
2 KiB
Python
from functools import partial
|
||
|
||
from aiogram import Router, F
|
||
from aiogram.enums import ChatType, ContentType
|
||
from aiogram.filters import Command, CommandObject, CommandStart
|
||
from aiogram.types import Message
|
||
|
||
import ai_agent
|
||
import utils
|
||
from messages import *
|
||
|
||
import tg.tg_database as database
|
||
from .default import ACCEPTED_CONTENT_TYPES
|
||
|
||
router = Router()
|
||
|
||
|
||
@router.message(CommandStart(), F.chat.type == ChatType.PRIVATE)
|
||
async def start_handler(message: Message):
|
||
chat_id = message.chat.id
|
||
database.DB.create_chat_if_not_exists(chat_id)
|
||
database.DB.chat_update(chat_id, active=1)
|
||
await message.answer("Привет!")
|
||
|
||
|
||
@router.message(Command("личность", prefix="!"), F.chat.type == ChatType.PRIVATE)
|
||
async def set_prompt_handler(message: Message, command: CommandObject):
|
||
chat_id = message.chat.id
|
||
database.DB.create_chat_if_not_exists(chat_id)
|
||
|
||
database.DB.chat_update(chat_id, ai_prompt=command.args)
|
||
await message.answer("Личность ИИ изменена.")
|
||
|
||
|
||
@router.message(Command("сброс", prefix="!"), F.chat.type == ChatType.PRIVATE)
|
||
async def reset_context_handler(message: Message):
|
||
chat_id = message.chat.id
|
||
database.DB.create_chat_if_not_exists(chat_id)
|
||
|
||
ai_agent.agent.clear_chat_context(chat_id)
|
||
await message.answer("Контекст очищен.")
|
||
|
||
|
||
@router.message(F.content_type.in_(ACCEPTED_CONTENT_TYPES), F.chat.type == ChatType.PRIVATE)
|
||
async def any_message_handler(message: Message):
|
||
chat_id = message.chat.id
|
||
|
||
if message.content_type != ContentType.TEXT:
|
||
await message.answer(MESSAGE_NOT_TEXT)
|
||
return
|
||
|
||
answer, success = await utils.run_with_progress(
|
||
partial(ai_agent.agent.get_private_chat_reply, chat_id, message.text, message.message_id),
|
||
partial(message.bot.send_chat_action, chat_id, 'typing'),
|
||
interval=4)
|
||
|
||
answer_id = (await message.answer(answer)).message_id
|
||
if success:
|
||
ai_agent.agent.set_last_response_id(chat_id, answer_id)
|