Добавлена команда !проверка для проверки сообщения на нарушение правил с помощью ИИ.
This commit is contained in:
parent
2296176b1c
commit
71bb3c024d
5 changed files with 95 additions and 3 deletions
|
|
@ -2,6 +2,7 @@ MESSAGE_CHAT_NOT_ACTIVE = 'Извините, но я пока не работа
|
||||||
MESSAGE_PERMISSION_DENIED = 'Извините, но о таком меня может попросить только администратор чата.'
|
MESSAGE_PERMISSION_DENIED = 'Извините, но о таком меня может попросить только администратор чата.'
|
||||||
MESSAGE_NEED_REPLY = 'Извините, но эту команду нужно вызывать в ответном сообщении.'
|
MESSAGE_NEED_REPLY = 'Извините, но эту команду нужно вызывать в ответном сообщении.'
|
||||||
MESSAGE_DEFAULT_RULES = 'Правила не установлены. Просто ведите себя хорошо.'
|
MESSAGE_DEFAULT_RULES = 'Правила не установлены. Просто ведите себя хорошо.'
|
||||||
|
MESSAGE_DEFAULT_CHECK_RULES = 'Правила чата не установлены. Проверка невозможна.'
|
||||||
MESSAGE_DEFAULT_GREETING_JOIN = 'Добро пожаловать, {name}!'
|
MESSAGE_DEFAULT_GREETING_JOIN = 'Добро пожаловать, {name}!'
|
||||||
MESSAGE_DEFAULT_GREETING_REJOIN = 'С возвращением, {name}!'
|
MESSAGE_DEFAULT_GREETING_REJOIN = 'С возвращением, {name}!'
|
||||||
MESSAGE_DEFAULT_BIRTHDAY = 'Сегодня {name} празднует День Рождения!\nПоздравляю!'
|
MESSAGE_DEFAULT_BIRTHDAY = 'Сегодня {name} празднует День Рождения!\nПоздравляю!'
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ from aiogram.utils.formatting import Bold
|
||||||
import utils
|
import utils
|
||||||
from messages import *
|
from messages import *
|
||||||
import tg.tg_database as database
|
import tg.tg_database as database
|
||||||
from .default import clear_ai_chat_context
|
from .default import clear_ai_chat_context, get_ai_reply
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
|
|
@ -94,6 +94,35 @@ async def set_ai_prompt_handler(message: Message, bot: Bot):
|
||||||
await message.answer('Личность ИИ изменена.')
|
await message.answer('Личность ИИ изменена.')
|
||||||
|
|
||||||
|
|
||||||
|
@router.message(F.text == "!проверка")
|
||||||
|
async def check_rules_violation_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
|
||||||
|
|
||||||
|
chat_rules = chat['rules']
|
||||||
|
if chat_rules is None:
|
||||||
|
await message.answer(MESSAGE_DEFAULT_CHECK_RULES)
|
||||||
|
return
|
||||||
|
|
||||||
|
prompt = 'В чате действуют следующие правила:\n'
|
||||||
|
prompt += chat_rules + '\n\n'
|
||||||
|
prompt += 'Проверь, нарушает ли правила следующее сообщение (используй ссылки на конкретные пункты правил):'
|
||||||
|
|
||||||
|
await message.answer(await get_ai_reply(message.bot, chat_id, message.from_user, prompt,
|
||||||
|
message.reply_to_message.from_user, message.reply_to_message.text))
|
||||||
|
|
||||||
|
|
||||||
@router.message(F.text == "!предупреждение")
|
@router.message(F.text == "!предупреждение")
|
||||||
async def warning_handler(message: Message, bot: Bot):
|
async def warning_handler(message: Message, bot: Bot):
|
||||||
chat_id = message.chat.id
|
chat_id = message.chat.id
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from aiogram import Router, F
|
from aiogram import Router, F, Bot
|
||||||
from aiogram.types import Message
|
from aiogram.types import Message
|
||||||
from aiogram.types.user import User
|
from aiogram.types.user import User
|
||||||
from aiogram.enums.content_type import ContentType
|
from aiogram.enums.content_type import ContentType
|
||||||
|
|
@ -100,3 +100,19 @@ def clear_ai_chat_context(chat_id: int):
|
||||||
global agent
|
global agent
|
||||||
if agent is not None:
|
if agent is not None:
|
||||||
agent.clear_chat_context(chat_id)
|
agent.clear_chat_context(chat_id)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_ai_reply(bot: Bot, chat_id, user: User, message: str, fwd_user: User, fwd_message: str) -> str:
|
||||||
|
chat = database.DB.create_chat_if_not_exists(chat_id)
|
||||||
|
chat_prompt = chat['ai_prompt']
|
||||||
|
|
||||||
|
ai_message = AiMessage(user_name=await get_user_name_for_ai(user), text=message)
|
||||||
|
ai_fwd_message = AiMessage(user_name=await get_user_name_for_ai(fwd_user), text=fwd_message)
|
||||||
|
|
||||||
|
global agent
|
||||||
|
if agent is None:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
agent = AiAgent(bot.config['openrouter_token'])
|
||||||
|
|
||||||
|
await bot.send_chat_action(chat_id, 'typing')
|
||||||
|
return await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_message)
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ from vkbottle_types.codegen.objects import MessagesGetConversationMembers
|
||||||
from messages import *
|
from messages import *
|
||||||
import utils
|
import utils
|
||||||
import vk.vk_database as database
|
import vk.vk_database as database
|
||||||
from .default import clear_ai_chat_context
|
from .default import clear_ai_chat_context, get_ai_reply
|
||||||
|
|
||||||
labeler = BotLabeler()
|
labeler = BotLabeler()
|
||||||
|
|
||||||
|
|
@ -149,6 +149,36 @@ async def set_ai_prompt_handler(message: Message):
|
||||||
await message.answer('Личность ИИ изменена.')
|
await message.answer('Личность ИИ изменена.')
|
||||||
|
|
||||||
|
|
||||||
|
@labeler.chat_message(text="!проверка")
|
||||||
|
async def check_rules_violation_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
|
||||||
|
|
||||||
|
chat_rules = chat['rules']
|
||||||
|
if chat_rules is None:
|
||||||
|
await message.answer(MESSAGE_DEFAULT_CHECK_RULES)
|
||||||
|
return
|
||||||
|
|
||||||
|
prompt = 'В чате действуют следующие правила:\n'
|
||||||
|
prompt += chat_rules + '\n\n'
|
||||||
|
prompt += 'Проверь, нарушает ли правила следующее сообщение (используй ссылки на конкретные пункты правил):'
|
||||||
|
|
||||||
|
await message.answer(await get_ai_reply(message.ctx_api, chat_id, message.from_id, prompt,
|
||||||
|
message.reply_message.from_id, message.reply_message.text))
|
||||||
|
|
||||||
|
|
||||||
@labeler.chat_message(text="!предупреждение")
|
@labeler.chat_message(text="!предупреждение")
|
||||||
async def warning_handler(message: Message):
|
async def warning_handler(message: Message):
|
||||||
chat_id = message.peer_id
|
chat_id = message.peer_id
|
||||||
|
|
|
||||||
|
|
@ -89,3 +89,19 @@ def clear_ai_chat_context(chat_id: int):
|
||||||
global agent
|
global agent
|
||||||
if agent is not None:
|
if agent is not None:
|
||||||
agent.clear_chat_context(chat_id)
|
agent.clear_chat_context(chat_id)
|
||||||
|
|
||||||
|
|
||||||
|
async def get_ai_reply(api: API, chat_id, user_id: int, message: str, fwd_user_id: int, fwd_message: str) -> str:
|
||||||
|
chat = database.DB.create_chat_if_not_exists(chat_id)
|
||||||
|
chat_prompt = chat['ai_prompt']
|
||||||
|
|
||||||
|
ai_message = AiMessage(user_name=await get_user_name_for_ai(api, user_id), text=message)
|
||||||
|
ai_fwd_message = AiMessage(user_name=await get_user_name_for_ai(api, fwd_user_id), text=fwd_message)
|
||||||
|
|
||||||
|
global agent
|
||||||
|
if agent is None:
|
||||||
|
# noinspection PyUnresolvedReferences
|
||||||
|
agent = AiAgent(api.config['openrouter_token'])
|
||||||
|
|
||||||
|
await api.messages.set_activity(peer_id=chat_id, type='typing')
|
||||||
|
return await agent.get_reply(chat_id, chat_prompt, ai_message, ai_fwd_message)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue