diff --git a/tg/handlers/admin.py b/tg/handlers/admin.py index f6dffcd..0128430 100644 --- a/tg/handlers/admin.py +++ b/tg/handlers/admin.py @@ -5,6 +5,7 @@ from aiogram.utils.formatting import Bold import utils from messages import * import tg.tg_database as database +from .default import reset_ai_chat_context router = Router() @@ -72,6 +73,27 @@ async def set_greeting_handler(message: Message, bot: Bot): await message.answer('Приветствие изменено.') +@router.message(F.text == "!личность") +async def set_ai_prompt_handler(message: Message, bot: Bot): + chat_id = message.chat.id + chat = database.DB.create_chat_if_not_exists(chat_id) + if chat['active'] == 0: + await message.answer(MESSAGE_CHAT_NOT_ACTIVE) + return + + if not await tg_user_is_admin(chat_id, message.from_user.id, bot): + await message.answer(MESSAGE_PERMISSION_DENIED) + return + + if message.reply_to_message is None: + await message.answer(MESSAGE_NEED_REPLY) + return + + database.DB.chat_update(chat_id, ai_prompt=message.reply_to_message.text) + reset_ai_chat_context(chat_id) + await message.answer('Личность ИИ изменена.') + + @router.message(F.text == "!предупреждение") async def warning_handler(message: Message, bot: Bot): chat_id = message.chat.id diff --git a/tg/handlers/default.py b/tg/handlers/default.py index 22dd593..d0e14c8 100644 --- a/tg/handlers/default.py +++ b/tg/handlers/default.py @@ -54,6 +54,11 @@ def get_ai_chat_context(chat_id: int) -> ChatContext: return chat_contexts[chat_id] +def reset_ai_chat_context(chat_id: int): + chat_contexts.pop(chat_id, None) + get_ai_chat_context(chat_id) + + async def ai_message_handler(message: Message): chat_id = message.chat.id diff --git a/tg/handlers/user.py b/tg/handlers/user.py index 5286660..545255c 100644 --- a/tg/handlers/user.py +++ b/tg/handlers/user.py @@ -49,6 +49,7 @@ async def help_handler(message: Message): response += '!старт - начать работу в чате\n' response += '!правила* - изменить правила\n' response += '!приветствие* - изменить приветствие новичков\n' + response += '!личность* - изменить описание личности ИИ\n' response += '!предупреждение* - выдать предупреждение участнику\n' response += '\n' response += Italic('Команды с пометкой * нужно вызывать в ответном сообщении.') diff --git a/vk/handlers/admin.py b/vk/handlers/admin.py index aa16d76..7fecfd4 100644 --- a/vk/handlers/admin.py +++ b/vk/handlers/admin.py @@ -6,6 +6,7 @@ from vkbottle_types.codegen.objects import MessagesGetConversationMembers from messages import * import utils import vk.vk_database as database +from .default import reset_ai_chat_context labeler = BotLabeler() @@ -126,6 +127,28 @@ async def set_birthday_handler(message: Message): await message.answer('Уведомление о дне рождения изменено.') +@labeler.chat_message(text="!личность") +async def set_ai_prompt_handler(message: Message): + chat_id = message.peer_id + chat = database.DB.create_chat_if_not_exists(chat_id) + if chat['active'] == 0: + await message.answer(MESSAGE_CHAT_NOT_ACTIVE) + return + + chat_members = await message.ctx_api.messages.get_conversation_members(peer_id=chat_id, extended=False) + if not vk_user_is_admin(message.from_id, chat_members): + await message.answer(MESSAGE_PERMISSION_DENIED) + return + + if message.reply_message is None: + await message.answer(MESSAGE_NEED_REPLY) + return + + database.DB.chat_update(chat_id, ai_prompt=message.reply_message.text) + reset_ai_chat_context(chat_id) + await message.answer('Личность ИИ изменена.') + + @labeler.chat_message(text="!предупреждение") async def warning_handler(message: Message): chat_id = message.peer_id diff --git a/vk/handlers/default.py b/vk/handlers/default.py index 69019d1..fbda6e2 100644 --- a/vk/handlers/default.py +++ b/vk/handlers/default.py @@ -53,6 +53,11 @@ def get_ai_chat_context(chat_id: int) -> ChatContext: return chat_contexts[chat_id] +def reset_ai_chat_context(chat_id: int): + chat_contexts.pop(chat_id, None) + get_ai_chat_context(chat_id) + + async def ai_message_handler(message: Message): chat_id = message.peer_id diff --git a/vk/handlers/user.py b/vk/handlers/user.py index c0be0c2..7ed2d82 100644 --- a/vk/handlers/user.py +++ b/vk/handlers/user.py @@ -57,6 +57,7 @@ async def rules_handler(message: Message): response += '!приветствие* - изменить приветствие новичков\n' response += '!возвращение* - изменить приветствие при возвращении\n' response += '!деньрождения* - изменить уведомление о дне рождения\n' + response += '!личность* - изменить описание личности ИИ\n' response += '!предупреждение* - выдать предупреждение участнику\n' response += '!исключить* - навсегда исключить участника\n' response += '\n'