Чат
src/main/senders/chat-queue.ts · src/main/lady/interval-services/task-chat.service.ts
Переписка TU з RU в реальному часі через WebSocket. Сутність чату об’єднує повідомлення, медіа, таски і переклад.
UI — Chat. Автоматична розсилка — ChatSender. Інвайти-шаблони — ChatInvites.
Два режими відправки
| Режим | Метод | Коли |
|---|---|---|
| Limited | sendLimitedMessage() | Сендер (автоматичні інвайти FAV/NEW) |
| Unlimited | sendUnlimitedRequest() | Оператор при активному ActiveChat таску |
Типи сокет-подій чату
MESSAGE, PHOTO, VIDEO, ICE_BREAKER, CHAT_STARTED, CHAT_STOPPED, OFFLINE_MESSAGE, SPAM_MESSAGE, CLOSE_CHAT.
Детально контракт — LadyRunner-Tab.
Повідомлення
Направлення
direction = false— від RU (він ініціює)direction = true— від TU
Генерація тасків — TaskChatService
Сервіс TaskChatService кожні 60 с перевіряє активних фаворитів і генерує таски:
| Умова | Таск |
|---|---|
Останнє повідомлення від RU (direction=false), 10+ хв тому, RU не у whitelist | NeedToWriteMessage |
Останнє повідомлення від TU (direction=true) | UnansweredMessage |
Фільтри перевірки:
- Сервіс активний, мережа підключена (
networkService.isConnected()), Sleep mode вимкнений - Тільки
isActiveFavorite = true, RU онлайн, неblockedByTU lastSendService.chatIsReadyToSend()— TU не надсилала нещодавно вручнуCLOSE_CHATповідомлення фільтруються — не враховуються як останнє- 10 хв — grace period щоб не флудити задачами одразу
- Whitelist check: якщо RU у whitelist — ним займається сендер, таск не потрібен
- Затримка 500 мс між RU — щоб не флудити API
Медіа
Фото і відео в чаті. Можуть бути платними.
Типи
| Тип | Опис |
|---|---|
PHOTO | Звичайне фото |
PHOTO_MEDIUM | Середнє фото |
VIDEO | Відео |
GIF_STATIC | Статичний GIF |
Нюанси
- Кожен файл має thumbnail і blur-версію
isPaid— флаг платного медіа (RU має заплатити за відкриття)- Огляд всіх медіа TU:
getLadyChatMediaAll - Огляд тільки платного:
getLadyPaidChatMedia - Завантаження/видалення — через IPC:
uploadMediaFile,deleteMediaFile
Переклад
Оператор може перекладати повідомлення через DeepL.
Мови
UK, RU, EN.
Нюанси
- DeepL API-ключ видається per-оператор при логіні (прив’язка до
operatorFamilyId) - Переклад — на вимогу, не автоматично
- Переклад нотаток — окремий флоу, теж через DeepL (DeepLService)
Ліміти відправки (узагальнення)
Детальна механіка черги — ChatQueue. Ліміти для оператора з UI-боку — Chat (таблиця «Ліміти відправки»).
Коротко: ~5.5 с між Limited-повідомленнями, 10 с таймаут очікування підтвердження, моніторинг зависання через 6 хв мовчання.
Зв’язки
- UI: Chat
- Черга: ChatQueue
- Автосендер: ChatSender
- Інвайти: ChatInvites
- Генератор тасків: TaskChatService
- Сутність таска: Tasks
- Переклад: DeepLService
- Сокет-контракт: LadyRunner-Tab