ИСправление списка каналов
Docker Hub / build-and-push (push) Failing after 14s

This commit is contained in:
kislovdm
2026-04-15 14:30:45 +03:00
parent 1fd5e4ea39
commit 1ef5cf4e38
+33 -2
View File
@@ -90,6 +90,37 @@ def _normalize(value: str) -> str:
return str(value or "").strip().casefold() return str(value or "").strip().casefold()
def _deduplicate_chats(chats: list[Any]) -> list[Any]:
"""
Возвращает уникальные чаты с сохранением исходного порядка.
Сначала пытаемся уникализировать по chat.id, затем по нормализованному title.
"""
unique: list[Any] = []
seen_ids: set[str] = set()
seen_titles: set[str] = set()
for chat in chats:
chat_id = getattr(chat, "id", None)
if chat_id is not None:
key_id = str(chat_id).strip()
if key_id in seen_ids:
continue
seen_ids.add(key_id)
unique.append(chat)
continue
key_title = _normalize(_max_chat_title(chat))
if not key_title:
unique.append(chat)
continue
if key_title in seen_titles:
continue
seen_titles.add(key_title)
unique.append(chat)
return unique
async def _refresh_chats_best_effort(max_client: MaxClient) -> None: async def _refresh_chats_best_effort(max_client: MaxClient) -> None:
# group.py: fetch_chats(marker=None) заполняет max_client.chats # group.py: fetch_chats(marker=None) заполняет max_client.chats
try: try:
@@ -104,7 +135,7 @@ def _find_chat_by_title(max_client: MaxClient, title: str) -> Any | None:
wanted = _normalize(title) wanted = _normalize(title)
if not wanted: if not wanted:
return None return None
chats = list(getattr(max_client, "chats", []) or []) chats = _deduplicate_chats(list(getattr(max_client, "chats", []) or []))
for c in chats: for c in chats:
if _normalize(_max_chat_title(c)) == wanted: if _normalize(_max_chat_title(c)) == wanted:
return c return c
@@ -166,7 +197,7 @@ async def handle_control_command(
if cmd == "/list": if cmd == "/list":
await _refresh_chats_best_effort(max_client) await _refresh_chats_best_effort(max_client)
chats = list(getattr(max_client, "chats", []) or []) chats = _deduplicate_chats(list(getattr(max_client, "chats", []) or []))
if not chats: if not chats:
return "Список чатов пуст (или клиент MAX ещё не успел их загрузить)." return "Список чатов пуст (или клиент MAX ещё не успел их загрузить)."