Источники#
tgs sources позволяет перечислить и изучить диалоги Telegram в вашем аккаунте — каналы, супергруппы, группы, пользователей и ботов. Весь вывод в формате JSON, удобном для обработки через jq или AI-агентов.
Пайп в
jq: диагностические логи ([tgs] retry: …,[tgs] FLOOD_WAIT: …) пишутся в stderr, а JSON — в stdout. При пайпе вjqглушите stderr, чтобы парсер не подавился:tgs sources list --with-stats 2>/dev/null | jq '.sources[].title'Избегайте
2>&1 | jq …— это смешает логи со stdout и сломает разбор JSON.
Список всех источников#
Самый простой вызов возвращает все диалоги в вашем аккаунте:
tgs sources listОтвет — JSON-объект с массивом sources, полем total и опциональным 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"}
}
],
"total": 287
}
total— общее число диалогов в вашем аккаунте до применения фильтра--type. CLI гарантирует, чтоtotal >= len(sources)(счётчик Telegram бывает устаревший — мы поднимаемtotalдо фактически возвращённого количества). Не делитеtotalна длину массива — для пагинации используйтеcursor.
Фильтр по типу#
Используйте --type для ограничения результатов по типу диалога. Можно передать один тип или несколько через запятую:
# Только каналы
tgs sources list --type channel
# Каналы и супергруппы
tgs sources list --type channel,supergroup
# Только боты
tgs sources list --type botПоддерживаемые типы: channel, supergroup, group, user, bot.
Получение полных метрик#
По умолчанию tgs sources list работает быстро и не делает лишних API-запросов. Добавьте --with-stats, чтобы получить статистику сообщений по каждому источнику:
tgs sources list --with-statsКаждый источник в ответе будет содержать объект stats:
{
"stats": {
"total_messages": 12345,
"messages_24h": 3,
"first_message": {"id": 1, "date": "2015-08-26T10:00:00Z"}
}
}first_message — best-effort: для broadcast-каналов Telegram MTProto иногда не возвращает самое первое сообщение, и поле просто отсутствует. total_messages и messages_24h присутствуют всегда.
Заметка о производительности: --with-stats делает примерно 4 API-запроса на источник, а messages_24h обходит историю сообщений (до ~1000 шт.) до пересечения порога 24 часа — у гипер-активных источников значение упирается в этот лимит. Для больших аккаунтов это может занять несколько минут. Статистика неактивных источников (последнее сообщение старше 7 дней) кешируется на диске и используется повторно между запусками.
Изучение одного источника#
tgs sources inspect даёт полную картину по одному источнику. Работает как для подписанных каналов, так и для публичных, на которые вы не подписаны:
# По username
tgs sources inspect @durov
# По числовому Telegram ID — используйте префикс `id:` (голый "-1001234…" будет
# съеден парсером CLI как флаг; используйте `id:` или разделитель `--`).
tgs sources inspect id:-1001234567890
# Разделитель `--` тоже работает, но всё после него считается позиционным —
# флаги команды должны идти ДО `--`:
tgs sources inspect --no-stats -- -1001234567890
# Ваше «Избранное» (Saved Messages)
tgs sources inspect -В ответе появляются дополнительные поля, недоступные в list: subscribed, description, creation_date, invite_link. для broadcast-каналов creation_date отражает дату создания канала; для пользователей это поле опускается (Telegram не отдаёт дату регистрации пользователя).
Ограничение числовых ID: числовой ID работает только если этот peer был ранее разрешён через
@usernameили+телефон(этот вызов кладёт access_hash в локальный peer-кеш). Обычныйtgs sources listpeer-кеш НЕ наполняет. Если inspect числового ID падает с “peer is not in the local cache”, сделайте сначала одинinspect @<username>(или+<phone>), затем повторитеid:<n>.
Изучение канала без подписки#
Зная @username, вы можете изучить любой публичный канал, не вступая в него:
tgs sources inspect @somebigtechchannelВ ответе subscribed будет false, а ключ stats будет полностью отсутствовать в JSON. Остальные отображаемые поля (title, username, access, members_count, description, verified) подтягиваются из публичной информации канала.
Чтобы пропустить получение статистики (быстрее):
tgs sources inspect @durov --no-statsПагинация для больших аккаунтов#
Если у вас сотни диалогов, используйте --limit и --cursor для постраничного обхода:
# Первая страница
tgs sources list --limit 50В ответе будет строка cursor. Передайте её для получения следующей страницы:
tgs sources list --limit 50 --cursor "eyJvIjo1MCwiZCI6MH0"Когда страниц больше нет, ключ cursor полностью отсутствует в JSON (он не возвращается со значением ""). Цикл выше корректно обрабатывает это через jq -r '.cursor? // empty'.
Типичный цикл пагинации в shell-скрипте:
cursor=""
while true; do
if [ -z "$cursor" ]; then
result=$(tgs sources list --limit 50)
else
result=$(tgs sources list --limit 50 --cursor "$cursor")
fi
echo "$result" | jq '.sources[]'
cursor=$(echo "$result" | jq -r '.cursor? // empty')
[ -z "$cursor" ] && break
doneАрхивированные диалоги#
Архивированные диалоги по умолчанию скрыты из списка. Передайте --archived, чтобы включить их:
tgs sources list --archivedПапки#
В Telegram пользователи могут группировать диалоги по папкам — это вкладки в официальном клиенте. tgs sources folders перечисляет ваши папки и разворачивает содержащиеся в каждой из них чаты, повторяя то, что показывает UI:
tgs sources foldersСтандартная вкладка «Все чаты» в вывод не попадает — только пользовательские папки и совместные чатлисты.
Содержимое папки всегда включает её архивные чаты: папка — это представление, которое может охватывать архив, поэтому tgs sources folders (и любая команда с --folder) раскрывает каждого участника независимо от того, в архиве он или нет. Отдельного флага для этого нет.
Зная нужную папку, передавайте --folder в другие команды, чтобы ограничить выборку её содержимым. Принимается числовой ID папки или её имя (без учёта регистра):
# Список чатов из папки «Crypto»
tgs sources list --folder Crypto
# То же, по числовому ID
tgs sources list --folder 3Как использовать --folder в поисковых командах — см. раздел Фильтр по папке в руководстве по поиску.
Полная справка#
- tgs sources list — все флаги и поля вывода
- tgs sources inspect — изучение одного источника
- tgs sources folders — список папок и их содержимого