entity chat #Entity

Chat

Чат

src/main/senders/chat-queue.ts · src/main/lady/interval-services/task-chat.service.ts

Переписка TU з RU в реальному часі через WebSocket. Сутність чату об’єднує повідомлення, медіа, таски і переклад.

UI — Chat. Автоматична розсилка — ChatSender. Інвайти-шаблони — ChatInvites.


Два режими відправки

РежимМетодКоли
LimitedsendLimitedMessage()Сендер (автоматичні інвайти FAV/NEW)
UnlimitedsendUnlimitedRequest()Оператор при активному 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 не у whitelistNeedToWriteMessage
Останнє повідомлення від 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 хв мовчання.


Зв’язки