/
vitbur
/
ai_agents
Обзор
Документация
Войти
/
vitbur
/
ai_agents
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
agent_second/bot.py
75 строк
3 KB
Vitaly Buravlev
added german grammar checker
06 июл 2026, 13:37
06 июл 2026, 13:37
1624b2b
Код
Авторство
О чём код?
import os import asyncio from aiogram import Bot, Dispatcher, F from aiogram.types import Message from config import TELEGRAM_TOKEN from graph import grammar_agent bot = Bot(token=TELEGRAM_TOKEN) dp = Dispatcher() def format_bot_response(state: dict) -> str: """Вспомогательная функция для сборки красивого ответа.""" response = f"📊 *Оценка текста:* {state['score']}/5\n\n" if state["has_errors"]: response += f"❌ *Найденные неточности:*\n• " + "\n• ".join(state["errors_list"]) + "\n\n" response += f"📖 *Грамматические правила:*\n{state['rules']}\n\n" response += f"✅ *Правильные варианты:*\n{state['corrections']}" else: response += "🎉 *Прекрасно!* Ошибок или критических неточностей не обнаружено." return response @dp.message(F.text) async def handle_text_message(message: Message): """Хэндлер для текстовых сообщений.""" wait_msg = await message.answer("🔄 Анализирую текст...") # Запускаем агента с текстом final_state = grammar_agent.invoke({ "text_content": message.text, "image_path": None }) await wait_msg.delete() await message.answer(format_bot_response(final_state), parse_mode="Markdown") @dp.message(F.photo) async def handle_photo_message(message: Message): """Хэндлер для изображений.""" wait_msg = await message.answer("📥 Скачиваю изображение и распознаю текст...") # Создаем временную папку для картинок, если её нет os.makedirs("downloads", exist_ok=True) photo = message.photo[-1] file_path = f"downloads/{photo.file_id}.jpg" # Скачиваем файл на сервер await bot.download(photo, destination=file_path) await wait_msg.edit_text("🔄 ИИ анализирует изображение на ошибки...") # Запускаем агента с путем к картинке final_state = grammar_agent.invoke({ "text_content": None, "image_path": file_path }) # Удаляем временный файл после обработки if os.path.exists(file_path): os.remove(file_path) await wait_msg.delete() await message.answer(format_bot_response(final_state), parse_mode="Markdown") async def main(): print("Бот успешно запущен!") await dp.start_polling(bot) if __name__ == "__main__": asyncio.run(main())