tgs sources list#
Перечислить все диалоги Telegram в вашем аккаунте: каналы, супергруппы, группы, пользователей и ботов.
Использование#
tgs sources list [flags]Флаги#
| Флаг | Сокр. | Тип | По умолчанию | Описание |
|---|---|---|---|---|
--type | string[] | (все) | Фильтр по типу: channel, supergroup, group, user, bot (повторяемый или через запятую) | |
--with-stats | bool | false | Запросить расширенную статистику (всего/за 24ч/первое сообщение + полная информация) для каждого источника | |
--limit | -l | int | 0 | Максимум записей в ответе (1-500, 0=все) |
--cursor | string | Курсор пагинации из предыдущего ответа | ||
--folder | string | "" | Ограничить выдачу чатами внутри этой папки (id или имя), включая архивные; несовместим с --cursor | |
--archived | bool | false | Включить архивированные диалоги (игнорируется при --folder — папка и так содержит свои архивные чаты) | |
--max-wait | int | 60 | Максимум секунд ожидания при FLOOD_WAIT | |
--no-cache | bool | false | Отключить кеш пиров и статистики | |
--profile | -p | string | Имя профиля аккаунта |
Порядок определения профиля, если --profile не указан: переменная TGS_PROFILE -> файл .tgs.yaml -> "default".
Примеры#
Список всех диалогов:
tgs sources listТолько каналы и супергруппы:
tgs sources list --type channel,supergroupПолучить статистику по каждому источнику (медленнее — ~4 API-запроса на источник):
tgs sources list --with-statsВключить архивированные диалоги:
tgs sources list --archivedТолько чаты из папки «Крипто» (включая архивные):
tgs sources list --folder КриптоПостраничный обход большого аккаунта:
# Первая страница
tgs sources list --limit 50
# Следующая страница с курсором из предыдущего ответа
tgs sources list --limit 50 --cursor "eyJvIjo1MCwiZCI6MH0"Вывод#
Возвращает JSON с массивом sources, полями total и returned, а также
cursor для пагинации.
{
"sources": [
{
"id": -1001234567890,
"type": "channel",
"title": "Durov's Channel",
"username": "durov",
"access": "public",
"members_count": 1234567,
"verified": true,
"unread_count": 0,
"last_message": {"id": 4321, "date": "2026-05-28T08:15:00Z"}
},
{
"id": -1009876543210,
"type": "supergroup",
"title": "Go Programming",
"username": "golang",
"access": "public",
"members_count": 78432,
"has_topics": true,
"unread_count": 5,
"last_message": {"id": 120450, "date": "2026-05-28T07:42:11Z"}
}
],
"total": 287,
"returned": 2,
"cursor": "eyJvIjo1MCwiZCI6MH0"
}total — число диалогов до фильтра и обрезки лимитом (всего в обходимой
папке/папках), returned — len(sources), т.е. фактический размер ответа
после применения --type и --limit. С --type-фильтром обычно
returned < total.
При использовании --with-stats каждый источник также содержит объект stats:
{
"stats": {
"total_messages": 12345,
"messages_24h": 3,
"first_message": {"id": 1, "date": "2015-08-26T10:00:00Z"}
}
}Поля источника#
| Поле | Тип | Описание |
|---|---|---|
id | int | Telegram peer ID (отрицательный для каналов и групп) |
type | string | Одно из: channel, supergroup, group, user, bot |
title | string | Отображаемое имя |
username | string | Публичный username без @; отсутствует, если не задан |
access | string | public или private; отсутствует для пользователей |
members_count | int | Количество участников/подписчиков; отсутствует, если недоступно |
description | string | Описание или «О чате»; только при наличии полной информации |
has_comments | bool | Канал имеет дискуссионную группу; присутствует только если true |
linked_chat_id | int | ID привязанной дискуссионной группы; только если применимо |
creation_date | string | UTC RFC3339 — дата создания чата/канала; присутствует только для каналов/групп с --with-stats или через inspect |
invite_link | string | Основная ссылка-приглашение; присутствует, если доступна |
first_name | string | Имя пользователя/бота; отсутствует для каналов/групп |
last_name | string | Фамилия пользователя; отсутствует, если не задано |
phone | string | Номер в формате E.164 (без +); отсутствует, если не виден контакту |
verified | bool | Официально верифицированный аккаунт; присутствует только если true |
scam | bool | Помечен Telegram как мошеннический; присутствует только если true |
fake | bool | Помечен Telegram как фейковый; присутствует только если true |
restricted | bool | Ограничен в некоторых регионах; присутствует только если true |
restricted_reason | string | Свободная строка с причиной ограничения; отсутствует, если нет |
deleted | bool | Удалённый аккаунт пользователя; присутствует только если true |
archived | bool | Диалог архивирован; присутствует только если true |
pinned | bool | Диалог закреплён; присутствует только если true |
saved | bool | Это «Избранное» (“Saved Messages”); присутствует только если true |
gigagroup | bool | Широковещательная группа (gigagroup); присутствует только если true |
has_topics | bool | Супергруппа с темами форума; присутствует только если true |
unread_count | int | Количество непрочитанных сообщений (всегда присутствует, в т.ч. 0) |
last_message | object | {id, date} последнего сообщения |
stats | object | Присутствует только при использовании --with-stats |
stats_error | string | Короткий код ошибки Telegram (например CHANNEL_PRIVATE), если получение статистики не удалось; отсутствует при успехе |
Поле cursor полностью отсутствует в JSON, когда больше нет результатов (оно не возвращается со значением ""). Итерируйте через jq -r '.cursor? // empty' для корректного завершения цикла.
Заметка о производительности#
По умолчанию tgs sources list работает быстро — читает список диалогов из вашего аккаунта. Флаг --with-stats делает примерно 4 дополнительных API-запроса на источник: channels.getFullChannel / messages.getFullChat / users.getFullUser для полной информации, messages.search для общего счётчика, плюс пагинированные messages.getHistory для подсчёта за 24 часа и поиска первого сообщения. Для аккаунтов с сотнями диалогов это может занять несколько минут. Статистика неактивных источников (последнее сообщение старше 7 дней) кешируется на диске и используется повторно между запусками.
Точность статистики#
total_messages— серверный счётчик сообщений диалога.messages_24h— проходит до ~1000 последних сообщений и считает те, что попали в окно 24 часов; для гиперактивных источников значение упирается в этот лимит.first_message— best-effort: для broadcast-каналов Telegram MTProto иногда не возвращает самое старое сообщение, и поле просто отсутствует.