vk_chat_bot/tg/handlers/private.py

59 lines
2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)