Files
Deal/.superpowers/sdd/channel-discovery/task-4-brief.md
T
Rustam Khalimov 9e07568ddd Инициализировать репозиторий «Дейл»
Первый коммит: модульный монолит ядра (.NET 10) и gRPC-сервисы
ai/ml/telegram, фронтенд Vue 3/Vite/Tailwind, документация (ТЗ,
инструкция пользователя, техдокументация, код-стайл), бэклог,
скрипты развёртывания и архив прототипа LeadRadar.
2026-09-11 02:50:17 +03:00

2.0 KiB
Raw Blame History

Task 4: Telegram-действия поиска (методы TelegramManager)

Files:

  • Modify: backend/app/services/telegram.py (класс TelegramManager)

Interfaces:

  • Consumes: self.client, ban_guard.

  • Produces (async-методы):

    • async def discovery_search(q: str, limit: int = 30) -> list[dict]client(functions.contacts.SearchRequest(q=q, limit=limit)); вернуть [{id(str), name, username, kind, hue}] (kind через _kind_of, hue через dialog_hue); между вызовами — await asyncio.sleep(ban_guard.search_pause()).
    • async def discovery_info(dialog_id: str) -> dict{id, name, username, kind, hue, participants: int | None, is_forum: bool} (participants из full_chat где возможно; иначе None).
    • async def discovery_read(dialog_id: str, limit: int) -> dict — последние сообщения: {"ok": bool, "error": str | None, "messages": [{"id", "text", "date_ms", "topic_id"}]}; topic_idgetattr(getattr(m,'reply_to',None),'reply_to_top_id',None). История недоступна → {"ok": False, "error": "no_history", "messages": []}.
    • async def discovery_join(username: str) -> Noneclient(functions.channels.JoinChannelRequest(...)); ПЕРЕД вызовом await ban_guard.wait_join_delay(); FloodWaitErrorban_guard.note_flood() и проброс.
    • async def discovery_leave(dialog_id: str) -> Nonechannels.LeaveChannelRequest.
    • def add_dialog_monitored(dialog_id, name, username, kind, hue) -> None — INSERT/UPDATE dialogs с monitor=TRUE, backfilled=FALSE (как в set_monitor, но без авто-join-логики).
  • Step 1: Реализовать методы (импорт telethon.tl.functions, telethon.errors.rpcerrorlist.FloodWaitError).

  • Step 2: Проверить компиляцию py_compile. Полная проверка — после Task 6/7 на живом аккаунте (ручные шаги в Task 10).