You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MaxUserProfileService (src/Services/MaxUserProfileService.php, singleton в контейнере): наполнение max_users полноценным профилем — avatar_url, full_avatar_url, name, description — через эндпоинт ядра getChatMembers (в апдейтах MAX аватар не приходит; источник истины — участники чата).
refresh(int|list<int>): bool — chat_id из активных max_chats; если активного чата нет — false без вызова
API;
upsertFromMember(ChatMember): MaxUser — updateOrCreate по user_id, пишет profile_checked_at;
ensureAvatar(MaxUser, ?int $chatId = null): bool — дозаполняет аватар, если пуст; явный chatId работает без
реестра; при уже заполненном аватаре ничего не вызывает.
Группировка userIds по чатам и батчинг по users.profile_batch_size (по умолчанию 50) на вызов getChatMembers.
Конфиг users.*: profile_from_active_chats (env MAX_USERS_PROFILE_FROM_ACTIVE_CHATS, default true) — резолв
chat_id из активных max_chats; profile_batch_size (env MAX_USERS_PROFILE_BATCH_SIZE, default 50) — лимит
userIds на вызов getChatMembers; profile_check_interval (env MAX_USERS_PROFILE_CHECK_INTERVAL, default 86400 —
раз в сутки) — периодичность перепроверки профиля в ensureAvatar, сек (0 — обновлять только при пустом аватаре).
Реестр чатов переименован: класс BotChat → MaxChat (таблица max_chats), enum ChatStatus → MaxChatStatus, слушатель PersistChatListener → PersistMaxChatListener, связь MaxUser::chats() → MaxUser::maxChats(). Уже задеплоенным БД нужна отдельная миграция на rename.
Публичный контракт конфигурации сохранён: ключи chats.*, env MAX_CHATS_*, Support\Config::chatsModel() не
менялись. Модели переопределяются через MAX_CHATS_MODEL/MAX_USERS_MODEL.
Затронутые сценарии
Профиль с аватаром подтягивается «по требованию»: RefreshDatabase-совместимый вызов refresh()/ensureAvatar()
из приложения после того, как бот добавлен в чат. Заполнение аватара прямо при апдейтах намеренно НЕ добавлено
(экономим вызовы API под Rate limit) — основной путь по требованию.