117 operations. Every one takes the global flags (--json, --plain, -a/--account, --results-only, --select, --dry-run, --yes, --no-input, --flood-wait-max, -v) anywhere on the line.
| Command | Summary |
|---|---|
chat action-bar get |
Read or dismiss the action bar of a chat (the anti-spam info box) |
chat admin-log list |
Recent actions (the admin log) |
chat admin-log report |
Report an anti-spam deletion as a false positive |
chat admin demote |
Dismiss an administrator |
chat admin list |
List administrators with their rights and ranks |
chat admin promote |
Promote a member to admin, or change an existing admin's rights and rank |
chat affiliate list |
Affiliate (Star referral) bots connected to a channel, plus suggestions |
chat affiliate set |
Connect or disconnect an affiliate bot for a channel |
chat archive |
Move chats to the archive, or back out of it |
chat autoarchive set |
Chat-list archive rules for new and archived chats |
chat badge get |
Aggregate unread badge and the chat-list limits behind it |
chat catchup |
What did I miss: every unread chat with its recent messages |
chat clear |
Clear a chat's history — for me, for both sides, or a date range |
chat community ban |
Ban a member from a whole community |
chat community create |
Create a Community (a hub grouping several chats) |
chat community list |
List my communities, a community's chats, or its pending link requests |
chat community set |
Add, hide, remove a chat in a community, or answer a link request |
chat convert |
Convert a basic group to a supergroup, or a supergroup to a gigagroup |
chat create |
Create a basic group, supergroup, broadcast channel or forum |
chat delete |
Delete a chat: for me, for both sides, or for everyone |
chat direct ban |
Ban a user from a channel's direct messages |
chat direct list |
Browse a channel's direct-message conversations |
chat direct unban |
Unban a user from a channel's direct messages |
chat discussion list |
Groups eligible to become a channel's discussion group |
chat discussion set |
Link a discussion group to a channel |
chat discussion unset |
Unlink a channel's discussion group |
chat edit |
Edit a group/channel profile: title, about, location, colors, emoji status, tab |
chat get |
Full info for one chat: dialog record, settings, notify, ttl, theme |
chat import |
Import a chat history exported from another messenger |
chat invite create |
Create an invite link (expiring, limited, approval-gated or paid) |
chat invite delete |
Delete a revoked invite link, or every revoked link of an admin |
chat invite edit |
Edit an invite link |
chat invite get |
Inspect one invite link, the primary link, or preview a link you were given |
chat invite list |
List a chat's invite links (active, revoked, or grouped by admin) |
chat invite open |
Read a private channel through an invite peek, without joining |
chat invite revoke |
Revoke an invite link |
chat join |
Join a public group/channel, or a private one by invite link |
chat leave |
Leave groups and channels |
chat list |
List dialogs with folder, type, unread, pinned and search filters |
chat member add |
Add members to a group or channel |
chat member ban |
Ban a member, optionally purging and reporting them in one step |
chat member delete-history |
Delete every message one member ever sent |
chat member edit |
Edit a member's custom rank and paid-message exception |
chat member get |
One member's status, rights, rank, join date and inviter |
chat member list |
List members with the participant filters the API offers |
chat member remove |
Remove (kick) a member; they can rejoin |
chat member report |
Report a member (and optionally their messages) as spam |
chat member restrict |
Restrict what one member may do, with an expiry |
chat member unban |
Lift a ban or a restriction |
chat mention list |
Unread mentions, reactions or poll votes of a chat |
chat mute |
Mute or unmute chats, for a duration or forever |
chat notify get |
Show a chat's notification settings, exception and effective value |
chat notify set |
Set one chat's notification exception |
chat open |
Open a chat like a human: recent history AND a read receipt |
chat permission get |
Show the chat-wide default permissions (what every member may do) |
chat permission list |
Print the canonical right vocabulary (admin mask, member mask, layer support) |
chat permission set |
Set the chat-wide default permissions |
chat photo delete |
Remove the group/channel photo |
chat photo set |
Set the group/channel photo (still, video or emoji avatar) |
chat pin |
Pin or unpin dialogs, or rewrite the whole pinned order |
chat poster list |
Harvest the senders that posted in a chat over a message window |
chat promo list |
Chat-list top rows: pending suggestions, birthday bar, PSA promo |
chat read |
Send a read receipt for chats, a thread, or a whole folder |
chat report |
Report a chat, a user or specific messages |
chat request approve |
Approve join requests |
chat request deny |
Decline join requests |
chat request list |
List pending join requests |
chat revenue get |
Stars / TON revenue of a channel (and per-user paid-message revenue) |
chat revenue list |
Stars / TON transaction history of a channel |
chat saved list |
Saved-Messages sublists and channel direct-message topics |
chat secret discard |
Discard a secret chat, optionally deleting it or reporting spam |
chat secret list |
Secret chats this session holds, with state and key fingerprint |
chat secret send |
Send into a secret chat, set its timer, ack or show typing |
chat secret start |
Start a secret chat with a user, or accept an incoming request |
chat send-as list |
Peers I may post as in this chat |
chat send-as set |
Set the default peer I post as in this chat |
chat set |
Per-dialog switches: content sharing, forum view mode, send-as |
chat setting get |
Print every administrable policy toggle with its current value |
chat setting set |
Change group/channel policy toggles (the Manage screen) |
chat similar list |
Channels similar to this one (or global recommendations) |
chat sponsored list |
Sponsored messages the server wants shown in this channel |
chat sponsored report |
Report a sponsored message |
chat stats get |
Channel, supergroup, post, story or poll statistics |
chat stats list |
Public forwards (reposts) of a post or a story |
chat suggested-post approve |
Approve a post suggested to a channel |
chat suggested-post deny |
Reject a post suggested to a channel |
chat suggestion delete |
Dismiss a server-suggested admin action |
chat theme list |
List the chat themes available |
chat theme set |
Set or remove the theme of one chat |
chat topic close |
Close a topic |
chat topic create |
Create a topic |
chat topic delete |
Delete a topic and all its messages |
chat topic edit |
Rename a topic or change its icon |
chat topic get |
Get one or more topics by id |
chat topic hide |
Hide the General topic |
chat topic list |
List or search a forum's topics |
chat topic mute |
Mute a topic |
chat topic pin |
Pin topics (pass several ids to set the pinned order) |
chat topic read |
Mark a topic read, including its mentions and reactions |
chat topic reopen |
Reopen a closed topic |
chat topic unhide |
Show the General topic again |
chat topic unmute |
Unmute a topic |
chat topic unpin |
Unpin a topic |
chat transfer |
Transfer ownership of a group or channel (2FA) |
chat translate |
Turn Telegram's translation bar on or off for a chat |
chat ttl set |
Set or show a chat's auto-delete timer |
chat typing |
Send or cancel a chat action (typing, recording, uploading) |
chat unread |
Mark a chat unread again — the undo for an accidental read receipt |
chat username get |
Check a username: availability, owner, and Fragment collectible info |
chat username set |
Set the public link, or the display order of the additional usernames |
chat username toggle |
Activate or deactivate one additional username |
chat username unset |
Make a group/channel private by clearing its username(s) |
chat verification set |
Attach or remove a third-party (bot) verification badge |
chat wallpaper set |
Set, apply, revert or remove the wallpaper of one chat |
chat welcome delete |
Delete one or all welcome messages |
chat welcome list |
List a group/channel's welcome messages |
chat welcome set |
Add or edit a welcome message |
Read or dismiss the action bar of a chat (the anti-spam info box).
The bar's own buttons live elsewhere: contact add, contact share-phone, user block, chat report --spam and chat archive --undo. --hide dismisses the bar and honours --dry-run itself, so reading it stays available under one.
tlgr chat action-bar get <CHAT> [OPTIONS]
returns ActionBar
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--hide |
flag | Dismiss the bar. |
$ tlgr chat action-bar get @alice --jsonCatalog coverage (5 full, 0 partial)
Full: contacts-users.nearby-geo-distance, contacts-users.user-action-bar, contacts-users.user-action-bar-hide, dialogs.actionbar-invite-members, dialogs.peer-settings-get
Recent actions (the admin log).
The filter is built here rather than through Telethon's iter_admin_log, which shifts four names (restrict→ban, unrestrict→unban, ban→kick, unban→unkick) and has no flag at all for invites, send, forums, sub-extend or edit-rank. tlgr's --filter names are the API's. Retention is about 48 hours for most classes, and the endpoint is aggressively flood-limited.
tlgr chat admin-log list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[AdminLogEvent]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--admin |
user | Only these admins. | |
--filter |
text | Comma-separated event classes; default all. | |
--min-id |
int | Stop at this event id. | |
--search, -s |
text | Free-text query. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat admin-log list @mygroup --filter ban,kick --jsonCatalog coverage (2 full, 0 partial)
Full: groupcall.admin-log, groups-channels-admin.admin-log
Report an anti-spam deletion as a false positive.
The candidate ids come from chat admin-log list --filter delete, where the anti-spam bot's deletions appear.
tlgr chat admin-log report <CHAT> <MSG_ID> [OPTIONS]
mutating · returns AntiSpamReport
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Supergroup. |
MSG_ID |
msg-id | yes | The wrongly deleted message. |
$ tlgr chat admin-log report @mygroup 918 --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.antispam-false-positive
Dismiss an administrator.
Sends an empty ChatAdminRights; the person keeps their membership. You need add-admins and — for somebody another admin promoted — channelParticipantAdmin.can_edit.
tlgr chat admin demote <CHAT> <USER> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns AdminResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | yes | Who to dismiss. |
$ tlgr chat admin demote @mygroup @alice --yes --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.demote-admin
Partial: groups-channels-admin.basic-group-admin
is_admin=false in a basic group; chat admin list owns the id.
List administrators with their rights and ranks.
The creator is reported as status: creator. When the chat has Telegram's aggressive anti-spam turned on, its bot is appended locally exactly as the GUI does — the server never lists it, and its deletions do show up in the admin log.
tlgr chat admin list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[Participant]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--rights/--no-rights |
flag | True |
Expand each admin's mask into right names. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat admin list @mygroup --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.admin-list, groups-channels-admin.basic-group-admin
Promote a member to admin, or change an existing admin's rights and rank.
--rights sets the mask absolutely; --grant/--revoke patch the one the member already has, which is read first. --all grants every right you hold, because the server refuses to let you give away more. A basic group has no granular rights: the request collapses to messages.editChatAdmin and the dropped names are reported in dropped rather than silently lost.
tlgr chat admin promote <CHAT> <USER> [OPTIONS]
mutating · returns AdminResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | yes | Who to promote. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--anonymous/--no-anonymous |
flag | Shorthand for the anonymous right. |
|
--all |
flag | Grant every right you hold yourself. | |
--except |
text | With --all: withhold these. | |
--grant |
text | Add these to the current mask. | |
--none |
flag | Empty mask (the same as chat admin demote). |
|
--rank |
text | Custom title, max 16 chars. | |
--revoke |
text | Remove these from the current mask. | |
--rights |
text | The whole mask, comma-separated. |
Also invocable as: tlgr chat admin edit
$ tlgr chat admin promote @mygroup @alice --rights ban-users,delete-messages --jsonCatalog coverage (4 full, 1 partial)
Full: groupcall.admin-right-manage-call, groups-channels-admin.member-tag-rank, groups-channels-admin.promote-admin, stories.admin-rights
Partial: groups-channels-admin.basic-group-admin
Basic groups get the one all-or-nothing bit; chat admin list owns the id.
Affiliate (Star referral) bots connected to a channel, plus suggestions.
tlgr chat affiliate list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[AffiliateBot]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | The channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--suggested |
flag | Suggested affiliate bots instead of the connected ones. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat affiliate list @mychannel --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.affiliate-program
Listing; chat affiliate set connects one and owns the id.
Connect or disconnect an affiliate bot for a channel.
Connecting is free; the Stars commission comes out of the bot's revenue.
tlgr chat affiliate set <CHAT> <BOT> [OPTIONS]
mutating · returns AffiliateResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | The channel. |
BOT |
user | yes | The affiliate bot. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--off |
flag | Revoke the affiliate link instead. |
$ tlgr chat affiliate set @mychannel @refbot --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.affiliate-program
Move chats to the archive, or back out of it.
One RPC for any number of peers, because folders.editPeerFolders is the only batched chat action Telegram has. --undo is the half v1 never had.
tlgr chat archive [CHAT]... [OPTIONS]
mutating · idempotent (reports already) · returns ArchiveResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | one or more | Chats to archive. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--dismiss-bar |
flag | Also hide the 'auto-archived' action bar. | |
--from-file |
path | Peers from a file, '-' for stdin. | |
--undo |
flag | Unarchive (folder 0) instead. |
Also invocable as: tlgr chat unarchive
$ tlgr chat archive @alice --jsonCatalog coverage (4 full, 0 partial)
Full: dialogs.archive, dialogs.bulk-chat-actions, dialogs.unarchive, dialogs.unarchive-autoarchived
Chat-list archive rules for new and archived chats.
Auto-archiving new non-contacts needs Premium unless the app config says otherwise; the server refuses it otherwise.
tlgr chat autoarchive set [OPTIONS]
mutating · idempotent (reports already) · returns ArchiveSettings
| Flag | Type | Default | Meaning |
|---|---|---|---|
--auto |
on | off | |
--keep-folders |
on | off | |
--keep-unmuted |
on | off |
$ tlgr chat autoarchive set --auto on --jsonCatalog coverage (1 full, 0 partial)
Full: dialogs.archive-settings
Aggregate unread badge and the chat-list limits behind it.
Computed locally from the dialog list, because no server-side total exists. Muted chats are counted separately rather than silently.
tlgr chat badge get [OPTIONS]
returns Badge
| Flag | Type | Default | Meaning |
|---|---|---|---|
--count |
chats | messages | chats |
--folder |
text | all |
Scope the badge to a folder. |
--include-muted |
flag | Count muted chats toward the badge. | |
--limits |
flag | Also report the chat-list limits. |
$ tlgr chat badge get --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.badge-preferences, dialogs.limits, dialogs.unread-counters
What did I miss: every unread chat with its recent messages.
SEMANTICS ARE FROZEN: read-only, emits no read receipts, and includes chats that carry only the manual unread mark.
tlgr chat catchup [OPTIONS]
returns Catchup
| Flag | Type | Default | Meaning |
|---|---|---|---|
--folder |
text | main |
Restrict to a folder / archive / main. |
--limit-chats |
int | 20 |
Max unread chats to include. |
--per-chat |
int | 10 |
Max messages per chat. |
--type |
user | bot | group |
Also invocable as: tlgr catchup
$ tlgr chat catchup --jsonCatalog coverage (1 full, 0 partial)
Full: dialogs.sync-updates
The CLI-visible half; the getDifference loop is the daemon's (PR-4).
Clear a chat's history — for me, for both sides, or a date range.
Irreversible. Date ranges are private-chat and basic-group only; supergroups clear through channels.deleteHistory, where clearing for everyone needs admin rights.
tlgr chat clear <CHAT> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns ClearResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to clear. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--for-both |
flag | Also delete for the other side (revoke). | |
--max-id |
msg-id | Only up to this id. | |
--saved-peer |
chat | Clear a Saved-Messages sublist. | |
--since |
datetime | Range start (private chats only). | |
--topic |
msg-id | Clear one forum topic. | |
--until |
datetime | Range end (private chats only). |
$ tlgr chat clear @alice --yes --jsonCatalog coverage (7 full, 0 partial)
Full: dialogs.clear-history-both, dialogs.clear-history-by-date, dialogs.clear-history-self, groups-channels-admin.clear-history, messages-core.history-clear, messages-core.history-clear-date-range, messages-core.history-clear-topic
Ban a member from a whole community.
Registered and refusing with NOT_SUPPORTED (exit 13): layer 229.
tlgr chat community ban <COMMUNITY> <USER> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns CommunityResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
COMMUNITY |
chat | yes | The community. |
USER |
user | yes | Who to ban. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--off |
flag | Unban instead. |
$ tlgr chat community ban @myhub @spammer --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.community-link-requests
Create a Community (a hub grouping several chats).
Registered and refusing with NOT_SUPPORTED (exit 13): the whole Community surface arrived in MTProto layer 229 and Telethon 1.44 speaks 227, so there is no request class to send. The command shape is settled and will start working with the layer uplift.
tlgr chat community create <TITLE> [OPTIONS]
mutating · returns CommunityResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
TITLE |
text | yes | The community's title. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--about |
text | Description. | |
--hidden |
flag | Do not show the community publicly. | |
--peer |
chat | Seed it with this chat. |
$ tlgr chat community create 'Release hub' --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.community-create
List my communities, a community's chats, or its pending link requests.
Registered and refusing with NOT_SUPPORTED (exit 13): layer 229.
tlgr chat community list [COMMUNITY] [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[CommunityRow]
| Argument | Type | Required | Meaning |
|---|---|---|---|
COMMUNITY |
chat | no | One community. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--collapse |
text | Collapse it in the chat list. | |
--mute |
text | Community-wide notify settings. | |
--requests |
flag | Pending link requests instead of chats. | |
--user |
user | Which of its chats this member joined. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat community list --jsonCatalog coverage (2 full, 2 partial)
Full: dialogs.community-collapse, dialogs.notify-community
Partial: groups-channels-admin.community-link-requests, groups-channels-admin.community-manage-links
The whole Community surface is layer-229 and refuses with a reason; chat community set and chat community ban own the two ids.
Add, hide, remove a chat in a community, or answer a link request.
Registered and refusing with NOT_SUPPORTED (exit 13): layer 229.
tlgr chat community set <COMMUNITY> <CHAT> [STATE] [OPTIONS]
mutating · returns CommunityResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
COMMUNITY |
chat | yes | The community. |
CHAT |
chat | yes | The chat to link. |
STATE |
text | no | visible |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--approve |
flag | Approve this chat's link request. | |
--collapsed |
text | Collapse it in my dialog list. | |
--deny |
flag | Reject this chat's link request. | |
--all |
flag | Answer every pending request. |
$ tlgr chat community set @myhub @mygroup visible --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.community-manage-links
Partial: groups-channels-admin.community-link-requests
Layer-229 surface; chat community ban owns the link-requests id.
Convert a basic group to a supergroup, or a supergroup to a gigagroup.
Both conversions are one-way. Both ids are reported, because the history stays in the old peer (chat.migrated_to points at the new one). Supergroup-only commands offer --upgrade rather than migrating a chat out from under its owner.
tlgr chat convert <CHAT> <TARGET> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns MigrateResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | The chat to convert. |
TARGET |
text | yes | supergroup (from a basic group) or gigagroup. |
$ tlgr chat convert @mygroup supergroup --yes --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.convert-to-gigagroup, groups-channels-admin.upgrade-basic-to-supergroup
Create a basic group, supergroup, broadcast channel or forum.
--type supergroup is what the GUI creates today; group is the legacy basic group, which cannot have a username or a location. missing carries messages.invitedUsers.missing_invitees verbatim, and the command exits 1 when any seed member was refused.
tlgr chat create <TITLE> [OPTIONS]
mutating · returns CreatedChat
| Argument | Type | Required | Meaning |
|---|---|---|---|
TITLE |
text | yes | The chat's title. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--about |
text | Description. | |
--address |
text | Street address that goes with --geo. | |
--for-import |
flag | Destination for a history import (see chat import). |
|
--forward-history |
int | Basic groups: history new members see. | |
--geo |
text | Create a location-based group. | |
--members |
user | Seed members. | |
--photo |
path | Set the photo afterwards. | |
--tabs |
flag | With --type forum: the tabbed topic UI. | |
--ttl |
text | Auto-delete timer at creation. | |
--type |
group | supergroup | channel |
--username |
text | Claim a public username afterwards. |
$ tlgr chat create 'Release team' --type supergroup --members @alice --jsonCatalog coverage (7 full, 2 partial)
Full: groups-channels-admin.create-basic-group, groups-channels-admin.create-channel, groups-channels-admin.create-forum, groups-channels-admin.create-geo-group, groups-channels-admin.create-supergroup, groups-channels-admin.create-with-autodelete, location.geogroup-create
Partial: groups-channels-admin.add-members, groups-channels-admin.add-members-failure-report
Seed members go in at creation; chat member add owns adding them later.
Delete a chat: for me, for both sides, or for everyone.
--for-everyone is owner-only and destroys the chat itself. Leaving a channel does not delete the history for anyone else.
tlgr chat delete <CHAT> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns DeleteChatResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to delete. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--for-both |
flag | Private chat / basic group: delete for the other side too. | |
--for-everyone |
flag | Owner only: destroy the group or channel itself. | |
--for-me |
flag | Leave it and wipe only my copy of the history. |
$ tlgr chat delete @alice --yes --jsonCatalog coverage (7 full, 0 partial)
Full: dialogs.delete-chat-private, dialogs.delete-group-for-all, groups-channels-admin.delete-basic-group, groups-channels-admin.delete-channel, groups-channels-admin.delete-for-all-members, messages-core.history-delete-conversation, messages-core.saved-dialog-delete
Ban a user from a channel's direct messages.
Acts on channel.linked_monoforum_id, not on the channel: banning somebody from your DMs and banning them from your channel are different decisions.
tlgr chat direct ban <CHANNEL> <USER> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns DirectBanResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The channel. |
USER |
user | yes | Who to ban from the DMs. |
Also invocable as: tlgr chat monoforum ban
$ tlgr chat direct ban @mychannel @spammer --yes --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.monoforum-ban
Banning; chat direct unban lifts it and owns the id.
Browse a channel's direct-message conversations.
Each conversation is a monoForumDialog keyed by saved_peer_id (the user). Reading and replying inside one is message list/send --direct <user>.
tlgr chat direct list <CHANNEL> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[DirectDialog]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The channel. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr chat monoforum list
$ tlgr chat direct list @mychannel --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.monoforum-topic-list
Unban a user from a channel's direct messages.
chat member edit --free-messages on waives the Stars price for one user without touching the ban.
tlgr chat direct unban <CHANNEL> <USER> [OPTIONS]
mutating · returns DirectBanResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The channel. |
USER |
user | yes | Who to ban from the DMs. |
Also invocable as: tlgr chat monoforum unban
$ tlgr chat direct unban @mychannel @alice --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.monoforum-ban
Groups eligible to become a channel's discussion group.
A basic group in this list must be converted first (chat convert <chat> supergroup); needs_migration says which.
tlgr chat discussion list [OPTIONS]
returns list[DiscussionCandidate]
$ tlgr chat discussion list --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.discussion-candidates
Link a discussion group to a channel.
The server refuses a group whose prehistory is hidden; --unhide-prehistory makes it visible first, and says so rather than doing it silently. LINK_NOT_MODIFIED reports already: true.
tlgr chat discussion set <CHANNEL> <GROUP> [OPTIONS]
mutating · returns DiscussionResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The broadcast. |
GROUP |
chat | yes | The discussion group. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--unhide-prehistory |
flag | Make the group's prehistory visible first. |
$ tlgr chat discussion set @mychannel @mygroup --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.discussion-link
Unlink a channel's discussion group.
tlgr chat discussion unset <CHANNEL> [OPTIONS]
mutating · returns DiscussionResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The broadcast. |
$ tlgr chat discussion unset @mychannel --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.discussion-unlink
Edit a group/channel profile: title, about, location, colors, emoji status, tab.
One request per changed field, applied in a fixed order and reported in changed. Colours, emoji statuses and emoji packs are boost-gated: --palettes prints every option with the level it needs, without editing anything. A basic group accepts only --title and --about.
tlgr chat edit <CHAT> [OPTIONS]
mutating · returns ChatEditResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--about |
text | New description, max 255 chars. | |
--address |
text | Street address. | |
--color |
text | Message accent palette id, or off. |
|
--color-emoji |
text | Background emoji for --color. | |
--emoji-status |
text | Emoji status, or off. |
|
--emoji-status-until |
text | Expiry for --emoji-status. | |
--geo |
text | Geogroup location; off clears it. |
|
--main-tab |
posts | gifts | media |
--palettes |
flag | Do not edit: print the palettes and the level each needs. | |
--profile-color |
text | Profile palette id, or off. |
|
--profile-color-emoji |
text | Background emoji for --profile-color. | |
--title |
text | New title. |
$ tlgr chat edit @mygroup --title 'Release team' --about 'Ship it' --jsonCatalog coverage (8 full, 0 partial)
Full: groups-channels-admin.channel-emoji-status, groups-channels-admin.edit-about, groups-channels-admin.edit-title, groups-channels-admin.main-profile-tab, groups-channels-admin.peer-color-message, groups-channels-admin.peer-color-profile, groups-channels-admin.set-location, location.channel-geo
Full info for one chat: dialog record, settings, notify, ttl, theme.
--full adds users.getFullUser / messages.getFullChat / channels.getFullChannel, which the server caches for about a minute. read_outbox_max_id is here; the per-member reader list is message seen.
tlgr chat get <CHAT> [OPTIONS]
returns ChatInfo
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to describe. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--dialog/--no-dialog |
flag | True |
Include the dialog record. |
--field |
text | Emit one field only (scripting). | |
--full |
flag | Also fetch getFullUser / getFullChat / getFullChannel. | |
--refresh |
flag | Bypass the 60 s server-side *Full cache. |
$ tlgr chat get @alice --full --jsonCatalog coverage (8 full, 1 partial)
Full: dialogs.chat-full-settings, dialogs.get-peer-dialog, dialogs.online-count, dialogs.read-receipts-outbox, groups-channels-admin.bulk-resolve-chats, groups-channels-admin.get-full-info, media.content-protection, updates.presence-group-online-count
Partial: groups-channels-admin.pending-suggestions
Pending suggestions are reported here; dismissing one is PR-7's.
Import a chat history exported from another messenger.
Only a private chat, or a group you created (or hold import rights in), accepts an import. --check and --dry-run stop after the two feasibility calls.
tlgr chat import <CHAT> <EXPORT> [OPTIONS]
mutating · returns ImportState
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Where to import into. |
EXPORT |
path | yes | Exported .txt from the other app. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--check |
flag | Only report whether the import would be accepted. | |
--media-dir |
path | Attachments the export names. |
$ tlgr chat import @alice ./whatsapp.txt --check --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.history-import, groups-channels-admin.import-chat-history
Create an invite link (expiring, limited, approval-gated or paid).
--limit and --request-approval are mutually exclusive, which is the server's rule and not ours. The subscription period is fixed at 30 days; creating a paid link costs nothing, only joining does. --replace-primary invalidates the old permanent link for everyone who holds it.
tlgr chat invite create <CHAT> [OPTIONS]
mutating · returns Invite
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--expires |
text | Expiry, as a duration or a timestamp. | |
--replace-primary |
flag | Revoke and replace the permanent link. | |
--request-approval |
flag | Joins land in the approval queue instead. | |
--subscription-stars |
int | Paid link: Stars per 30-day period. | |
--title |
text | Label shown to admins. | |
--limit |
int | Maximum joins; excludes --request-approval. |
$ tlgr chat invite create @mygroup --title 'Launch week' --limit 25 --expires 7d --jsonCatalog coverage (3 full, 0 partial)
Full: groups-channels-admin.invite-link-create, groups-channels-admin.invite-link-primary, groups-channels-admin.invite-link-subscription
Delete a revoked invite link, or every revoked link of an admin.
Only revoked links can be deleted; revoke an active one first. --revoked reports deleted: -1, because messages.deleteRevokedExportedChatInvites answers with a bare true and inventing a count would be inventing data.
tlgr chat invite delete <CHAT> [LINK] [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns InviteDeleted
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
LINK |
text | no | The revoked link to delete. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--admin |
user | With --revoked: whose links to purge. | |
--revoked |
flag | Delete every revoked link instead. |
$ tlgr chat invite delete @mygroup --revoked --yes --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.invite-link-delete, groups-channels-admin.invite-link-delete-all-revoked
Edit an invite link.
May answer with messages.exportedChatInviteReplaced; both links are reported, the new one in link and the old one in replaced_link. A paid subscription link accepts only --title.
tlgr chat invite edit <CHAT> <LINK> [OPTIONS]
mutating · returns Invite
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
LINK |
text | yes | The invite link to edit. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--expires |
text | New expiry; off clears it. |
|
--request-approval/--no-request-approval |
flag | Turn the approval queue on or off. | |
--title |
text | New label. | |
--limit |
int | New usage limit; 0 clears it. |
$ tlgr chat invite edit @mygroup https://t.me/+AbCdEf --limit 50 --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.invite-link-edit
Inspect one invite link, the primary link, or preview a link you were given.
One argument that is a t.me/+… or joinchat link previews it with messages.checkChatInvite and needs no rights; a chat plus a link inspects your own with messages.getExportedChatInvite and needs invite-users. A peek answers with peek_expires, which is the window chat invite open reads inside.
tlgr chat invite get <CHAT|LINK> [LINK] [OPTIONS]
returns InviteInfo
| Argument | Type | Required | Meaning |
|---|---|---|---|
| `CHAT | LINK` | chat | yes |
LINK |
text | no | With a chat: which link. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--png |
path | Write the QR code to a PNG. | |
--qr |
flag | Also render the link as an ASCII QR code. |
$ tlgr chat invite get https://t.me/+AbCdEf --jsonCatalog coverage (3 full, 1 partial)
Full: groups-channels-admin.check-invite, groups-channels-admin.invite-link-get, groups-channels-admin.invite-link-qr
Partial: groups-channels-admin.invite-link-primary
The QR is rendered locally and needs the optional tlgr[qr] extra; without it the link is still reported and a warning says so. Minting the primary link is chat invite create.
List a chat's invite links (active, revoked, or grouped by admin).
admin_id is mandatory in the request, so it defaults to you; only the owner may name somebody else. The cursor packs the (date, link) pair of the last row. --by-admin swaps the rows for one per admin, with their active and revoked counts in usage and requested.
tlgr chat invite list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[Invite]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--admin |
user | Whose links to list; defaults to me. | |
--by-admin |
flag | One row per admin with their link counts instead. | |
--revoked |
flag | Revoked links instead of active ones. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat invite list @mygroup --revoked --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.invite-link-admins, groups-channels-admin.invite-link-list
Read a private channel through an invite peek, without joining.
A peek is the server's offer, not ours: when it answers anything other than chatInvitePeek this exits 6 rather than joining on your behalf.
tlgr chat invite open <LINK> [OPTIONS]
returns InvitePeek
| Argument | Type | Required | Meaning |
|---|---|---|---|
LINK |
chat | yes | The invite link. |
$ tlgr chat invite open https://t.me/+AbCdEf --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.invite-peek
Revoke an invite link.
Revoked links stay listable with chat invite list --revoked until chat invite delete removes them.
tlgr chat invite revoke <CHAT> <LINK> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns InviteRevoked
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
LINK |
text | yes | The invite link to revoke. |
$ tlgr chat invite revoke @mygroup https://t.me/+AbCdEf --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.invite-link-revoke
Join a public group/channel, or a private one by invite link.
INVITE_REQUEST_SENT is success-with-pending (exit 0, pending_approval: true) and USER_ALREADY_PARTICIPANT is already: true (exit 0); an expired hash exits 5. A layer-229 join that needs a web view is reported in needs_web_view rather than claimed as a join.
tlgr chat join <CHAT|LINK> [OPTIONS]
mutating · returns JoinResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
| `CHAT | LINK` | chat | yes |
$ tlgr chat join @somechannel --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.join-by-invite, groups-channels-admin.join-by-username
Leave groups and channels.
Bulk leaving is the CHANNELS_TOO_MUCH escape hatch — pair it with chat list --scope inactive, which names the chats you have not opened in the longest time.
tlgr chat leave [CHAT]... [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns LeaveResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | any number | Chats to leave. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--common-with |
user | Leave every group shared with. | |
--delete-history |
flag | Also delete my copy of the history. | |
--remove-from-folders |
flag | Strip the peer from every chat folder. |
$ tlgr chat leave @somegroup --jsonCatalog coverage (4 full, 1 partial)
Full: dialogs.delete-and-leave, dialogs.leave-group, groups-channels-admin.leave, groups-channels-admin.owner-leave-successor
Partial: contacts-users.user-leave-common-groups
--common-with leaves the shared groups; listing them is user chat list.
List dialogs with folder, type, unread, pinned and search filters.
Never emits a read receipt. --folder takes a peer-folder (main/archive/all) or a chat folder by id or name, evaluated client-side because Telegram has no getDialogs(filter_id). --scope swaps the dialog list for the admined-public, inactive or left-channel lists, which are chats rather than dialogs.
tlgr chat list [OPTIONS]
paginated (DIALOGS cursor) · returns Page[Dialog]
| Flag | Type | Default | Meaning |
|---|---|---|---|
--by-location |
flag | With --scope admined-public: geogroups. | |
--check-limit |
flag | With --scope admined-public: report the limit instead. | |
--common-with |
user | Chats shared with this user. | |
--folder |
text | main |
main |
--for-personal |
flag | With --scope admined-public: personal-channel candidates. | |
--inactive |
flag | The groups/channels you have not opened for longest. | |
--muted |
flag | Only muted chats. | |
--pinned |
flag | Only pinned dialogs, in pinned order. | |
--scope |
dialogs | admined-public | inactive |
--search, -s |
text | Match title or username. | |
--sort |
default | date | unread |
--type |
user | bot | group |
--unmuted |
flag | Only unmuted chats. | |
--unread |
flag | Only chats with unread messages or a mark. | |
--unread-mark |
flag | Only chats carrying the manual unread mark. | |
--with-drafts |
flag | Only chats with a saved draft. | |
--with-join-requests |
flag | Only chats with pending join requests. | |
--with-mentions |
flag | Only chats with unread mentions. | |
--with-reactions |
flag | Only chats with unread reactions. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr chats, tlgr inbox
$ tlgr chat list --unread --jsonCatalog coverage (15 full, 2 partial)
Full: dialogs.folder-chat-count, dialogs.inactive-chats, dialogs.join-requests-badge, dialogs.list-archive, dialogs.list-folder, dialogs.list-main, dialogs.pinned-list, dialogs.restricted-peer, dialogs.saved-messages, dialogs.unread-marks-list, dialogs.unread-quick-filter, groups-channels-admin.admined-public-chats, groups-channels-admin.common-chats, groups-channels-admin.inactive-chats, groups-channels-admin.left-channels
Partial: contacts-users.contacts-sort, dialogs.search-peers
Peer search here is a substring match over the dialog list; the global one is contact search. --sort orders chats, not contacts.
Add members to a group or channel.
missing carries messages.invitedUsers.missing_invitees verbatim — one {user_id, reason} per refusal, with reason in privacy-restricted, premium-would-allow-invite or premium-required-for-pm. --invite-link-fallback DMs the link to them, and is opt-in because it sends a message on your behalf.
tlgr chat member add <CHAT> [USER]... [OPTIONS]
mutating · returns MembersAdded
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Who to add. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--forward-history |
int | Basic groups: past messages the member sees. | |
--invite-link-fallback |
flag | DM the invite link to anyone who could not be added. |
$ tlgr chat member add @mygroup @alice @carol --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.add-members, groups-channels-admin.add-members-failure-report
Ban a member, optionally purging and reporting them in one step.
participant is an InputPeer, so a channel posting in the group — or an anonymous admin's channel — can be banned as well as a user. --until follows Telegram's own rounding: 0, under 30 seconds and over 366 days all mean forever.
tlgr chat member ban <CHAT> [USER]... [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns list[MemberResult]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Who to ban. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--messages |
int | Also delete these message ids. | |
--purge |
flag | Delete everything they ever sent here. | |
--report |
flag | Report the messages as spam too. | |
--until |
text | Ban expiry; 0, under 30s or over 366d = forever. |
Also invocable as: tlgr chat ban
$ tlgr chat member ban @mygroup @spammer --purge --report --yes --jsonCatalog coverage (2 full, 2 partial)
Full: groups-channels-admin.ban-member, groups-channels-admin.moderate-member
Partial: groups-channels-admin.delete-member-history, groups-channels-admin.report-member
The moderate box bundles them; chat member delete-history and chat member report own the standalone ids.
Delete every message one member ever sent.
channels.deleteParticipantHistory answers with messages.affectedHistory and an offset to resume from; the loop runs in the daemon until the offset is 0, because deleting the first hundred messages and reporting success is not deleting a history.
tlgr chat member delete-history <CHAT> <USER> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns MemberResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Supergroup or channel. |
USER |
user | yes | Whose messages to delete. |
Also invocable as: tlgr chat member purge
$ tlgr chat member delete-history @mygroup @spammer --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.delete-member-history
Edit a member's custom rank and paid-message exception.
The rank shows up as message.from_rank in supergroups and chatParticipant.rank in basic groups; chat admin promote --rank writes the same field for admins.
tlgr chat member edit <CHAT> <USER> [OPTIONS]
mutating · returns MemberResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | yes | The member. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--free-messages/--no-free-messages |
flag | Let this user message the channel without paying Stars. | |
--rank |
text | Custom title, max 16 chars. | |
--refund |
flag | With --free-messages: refund the Stars already paid. |
$ tlgr chat member edit @mygroup @alice --rank moderator --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.paid-messages-price
Partial: groups-channels-admin.member-tag-rank
Ranks for plain members; chat admin promote --rank owns the admin half.
One member's status, rights, rank, join date and inviter.
effective_permissions is the chat's defaults patched with this member's own mask, in the same allow-polarity vocabulary chat permission get prints — which is the answer to “what may this person actually do” rather than “what did an admin type”.
tlgr chat member get <CHAT> <USER> [OPTIONS]
returns Participant
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | yes | The member. |
$ tlgr chat member get @mygroup @alice --jsonCatalog coverage (3 full, 0 partial)
Full: groups-channels-admin.member-get, groups-channels-admin.member-invited-by, groups-channels-admin.member-permissions-view
List members with the participant filters the API offers.
Every row keeps its ChannelParticipant* wrapper: status, rank, join date, inviter, promoter and both rights masks. --filter kicked is people who were removed; --filter restricted is people still in the chat with a mask on them. A chat with participants_hidden answers PERMISSION_DENIED rather than an empty page, because “nobody is in this group” would be a lie.
tlgr chat member list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[Participant]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--admins |
flag | Shorthand for --filter admins (v1). | |
--bots |
flag | Shorthand for --filter bots. | |
--filter |
recent | admins | bots |
--search, -s |
text | Server-side name query. | |
--subscription-expired |
flag | With --via-link: lapsed paid subscribers. | |
--topic |
msg-id | With --filter mentions: one topic. | |
--via-link |
text | Only people who joined through this invite link. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr chat members
$ tlgr chat member list @mygroup --filter admins --jsonCatalog coverage (5 full, 1 partial)
Full: groups-channels-admin.banned-list, groups-channels-admin.channel-subscriptions-admin, groups-channels-admin.invite-link-importers, groups-channels-admin.member-mention-autocomplete, groups-channels-admin.members-list
Partial: groups-channels-admin.admin-list
--filter admins lists them; chat admin list is the primary owner.
Remove (kick) a member; they can rejoin.
A kick is editBanned(view_messages) followed by an empty mask, so the person may come back. Use chat member ban to keep them out. --purge drains messages.affectedHistory until the server stops handing back an offset.
tlgr chat member remove <CHAT> [USER]... [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns list[MemberResult]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Who to remove. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--messages |
int | Also delete these message ids. | |
--purge |
flag | Delete everything they ever sent here. | |
--report |
flag | Report the messages as spam too. |
$ tlgr chat member remove @mygroup @spammer --purge --yes --jsonCatalog coverage (1 full, 2 partial)
Full: groups-channels-admin.remove-member
Partial: groups-channels-admin.delete-member-history, groups-channels-admin.report-member
--purge/--report are the moderate box; the standalone commands are chat member delete-history and chat member report.
Report a member (and optionally their messages) as spam.
tlgr chat member report <CHAT> <USER> [OPTIONS]
mutating · returns MemberResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Supergroup or channel. |
USER |
user | yes | Who to report. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--messages |
int | Message ids to attach to the report. |
$ tlgr chat member report @mygroup @spammer --messages 918 --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.report-member
Restrict what one member may do, with an expiry.
Read-modify-write of the member's current mask: --deny and --allow patch it, --replace supplies it whole, --none is read-only and --clear drops it back to the chat default. Names come from chat permission list --mask member.
tlgr chat member restrict <CHAT> <USER> [OPTIONS]
mutating · returns MemberResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Supergroup. |
USER |
user | yes | The member. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--allow |
text | Rights to give back, comma-separated. | |
--clear |
flag | Drop the mask; fall back to the chat default. | |
--deny |
text | Rights to take away, comma-separated. | |
--all |
flag | Allow everything. | |
--none |
flag | Read-only: deny everything but view-messages. | |
--purge |
flag | Also delete everything they sent. | |
--replace |
flag | Treat --deny/--allow as the whole mask, not a patch. | |
--until |
text | When the restriction lapses. |
$ tlgr chat member restrict @mygroup @alice --deny send-media --until 7d --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.restrict-member
Lift a ban or a restriction.
Sends an all-clear mask, which takes the user off the Removed and Restricted lists. It does not put them back in the chat.
tlgr chat member unban <CHAT> [USER]... [OPTIONS]
mutating · returns list[MemberResult]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Who to unban. |
$ tlgr chat member unban @mygroup @alice --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.unban-member
Unread mentions, reactions or poll votes of a chat.
--read clears the queue it just listed, and honours --dry-run itself so that listing stays available under it.
tlgr chat mention list <CHAT> [OPTIONS]
paginated (HISTORY cursor) · returns Page[Message]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to look in. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--kind |
mention | reaction | poll-vote |
--read |
flag | Mark the listed items read afterwards. | |
--saved-peer |
chat | Restrict to a saved sublist. | |
--topic |
msg-id | Restrict to a topic. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr chat mentions, tlgr chat reactions, tlgr chat poll-votes
$ tlgr chat mention list @somegroup --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.unread-mentions, dialogs.unread-poll-votes, dialogs.unread-reactions
Mute or unmute chats, for a duration or forever.
mute_until is absolute wall-clock time (COR-01). inputPeerNotifySettings is sparse — only the field being changed is sent, so the rest keeps inheriting the scope default. --folder costs one RPC per chat because Telegram has no batched form.
tlgr chat mute [CHAT]... [OPTIONS]
mutating · idempotent (reports already) · returns MuteResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | any number | Chats to mute. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--folder |
text | Apply to every chat of a folder. | |
--for |
duration | Mute for 1h | |
--off |
flag | Unmute, keeping the other notify fields. | |
--stories |
flag | Mute the peer's stories instead. | |
--topic |
msg-id | A forum topic. | |
--until |
datetime | Mute until an absolute time. |
Also invocable as: tlgr chat unmute
$ tlgr chat mute @alice --for 8h --jsonCatalog coverage (5 full, 0 partial)
Full: dialogs.mute-folder, dialogs.mute-for-duration, dialogs.mute-forever, dialogs.unmute, groups-channels-admin.chat-notify-settings
Show a chat's notification settings, exception and effective value.
tlgr chat notify get <CHAT> [OPTIONS]
returns NotifyView
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to describe. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--effective/--no-effective |
flag | True |
Merge the scope default under the exception. |
--topic |
msg-id | A forum topic. |
$ tlgr chat notify get @alice --jsonCatalog coverage (1 full, 0 partial)
Full: dialogs.notify-get
Set one chat's notification exception.
Every switch takes on|off|default, because default is a real third state: it removes the exception so the chat inherits the scope again.
tlgr chat notify set <CHAT> [OPTIONS]
mutating · idempotent (reports already) · returns NotifyView
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to change. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--gifts |
on | off | |
--preview |
on | off | default |
--reset |
flag | Drop the exception and inherit the scope default. | |
--silent |
on | off | default |
--sound |
text | none | |
--stories-hide-sender |
on | off | default |
--stories-mute |
on | off | default |
--topic |
msg-id | A forum topic. |
$ tlgr chat notify set @alice --silent on --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.gift-notifications, dialogs.notify-preview, dialogs.notify-silent
Open a chat like a human: recent history AND a read receipt.
SEMANTICS ARE FROZEN. The read receipt is visible to the other side and irreversible; --no-read is the silent peek, and so is message list.
tlgr chat open <CHAT> [OPTIONS]
mutating · returns OpenResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to open. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--increment-views |
flag | Also count a view on channel posts. | |
--no-read |
flag | Peek: fetch the history and emit no read receipt. | |
--topic |
msg-id | Only this forum topic. |
$ tlgr chat open @alice --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.open-chat, dialogs.peek-chat
Show the chat-wide default permissions (what every member may do).
Allow-polarity, using the same names chat permission set --allow/--deny accepts, so the output round-trips back into the input.
tlgr chat permission get <CHAT> [OPTIONS]
returns PermissionView
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
$ tlgr chat permission get @mygroup --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.default-permissions
Reading half; chat permission set writes them and owns the id.
Print the canonical right vocabulary (admin mask, member mask, layer support).
The one place the names come from: chat admin promote --rights, chat member restrict --deny, chat permission set --allow and bot default-rights set all read this table. manage-linked-peers and manage-welcome-messages are layer-229 flags Telethon 1.44 cannot express and are marked supported: false rather than omitted.
tlgr chat permission list [OPTIONS]
returns list[RightInfo]
| Flag | Type | Default | Meaning |
|---|---|---|---|
--chat |
chat | Also mark what you may grant here. | |
--mask |
admin | member | all |
$ tlgr chat permission list --mask member --jsonCatalog coverage (0 full, 3 partial)
Partial: groups-channels-admin.default-permissions, groups-channels-admin.promote-admin, groups-channels-admin.restrict-member
The vocabulary the three writing commands share; each of them owns its own catalog id.
Set the chat-wide default permissions.
Read-modify-write: the current default_banned_rights are fetched and patched, because a fresh mask resets every flag you did not mention. view-messages is not settable here — a chat nobody may read is chat member ban, not a permission — and until_date is ignored. Works for basic groups too.
tlgr chat permission set <CHAT> [OPTIONS]
mutating · returns PermissionResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--allow |
text | Rights every member may use. | |
--deny |
text | Rights no member may use. | |
--all |
flag | Allow everything (empty banned mask). | |
--none |
flag | Deny everything except view-messages. | |
--replace |
flag | Treat --allow/--deny as the whole mask, not a patch. |
$ tlgr chat permission set @mygroup --deny send-media,send-stickers --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.default-permissions
Remove the group/channel photo.
tlgr chat photo delete <CHAT> [OPTIONS]
mutating · returns ChatPhotoResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
$ tlgr chat photo delete @mygroup --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.remove-photo
Set the group/channel photo (still, video or emoji avatar).
Exactly one of <file>, --video and --emoji-markup is required.
tlgr chat photo set <CHAT> [FILE] [OPTIONS]
mutating · returns ChatPhotoResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
FILE |
path | no | The still image. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--emoji-bg |
text | Background palette for --emoji-markup. | |
--emoji-markup |
int | Build the avatar from an emoji. | |
--video |
path | Animated avatar. | |
--video-start |
number | Still frame from --video. |
$ tlgr chat photo set @mygroup ./logo.png --jsonCatalog coverage (2 full, 0 partial)
Full: chat.photo-set, groups-channels-admin.edit-photo
Pin or unpin dialogs, or rewrite the whole pinned order.
--folder <name> pins inside a chat folder, which is a filter edit rather than toggleDialogPin. PINNED_DIALOGS_TOO_MUCH is the server's answer when the pinned limit is reached.
tlgr chat pin [CHAT]... [OPTIONS]
mutating · idempotent (reports already) · returns PinnedDialogs
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | one or more | Chats to pin. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--folder |
text | main |
Pin inside a chat folder, or main |
--order |
flag | Treat the arguments as the complete pinned order. | |
--saved-peer |
chat | Pin a Saved-Messages sublist. | |
--unpin |
flag | Remove the pin instead. |
Also invocable as: tlgr chat unpin, tlgr chat pin-order
$ tlgr chat pin @alice --jsonCatalog coverage (4 full, 0 partial)
Full: dialogs.pin, dialogs.pin-in-folder, dialogs.pin-reorder, dialogs.unpin
Harvest the senders that posted in a chat over a message window.
Pagination is internal — do not hand-roll the walk. Senders are not always users: an anonymous admin and a linked channel post under a negative channel id, so filter to positive ids when harvesting people. One call walks at most 20000 messages; to go deeper, pass the report's next_before_id back as --before-id and merge the reports, until next_before_id is absent.
tlgr chat poster list <CHAT> [OPTIONS]
returns PosterReport
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to harvest. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--before-id |
msg-id | Start the walk below this message id (resume from next_before_id). | |
--max-messages |
int | 2000 |
How much history to walk. |
--min-messages |
int | 1 |
Drop senders below this count. |
--since |
datetime | Scan window start. | |
--until |
datetime | Scan window end. |
Also invocable as: tlgr chat posters
$ tlgr chat poster list @somegroup --jsonChat-list top rows: pending suggestions, birthday bar, PSA promo.
tlgr chat promo list [OPTIONS]
mutating · idempotent (reports already) · returns Promo
| Flag | Type | Default | Meaning |
|---|---|---|---|
--dismiss |
text | Dismiss one suggestion key. | |
--hide-promo |
flag | Hide the promoted / PSA dialog. |
Also invocable as: tlgr chat suggestions
$ tlgr chat promo list --jsonCatalog coverage (4 full, 0 partial)
Full: contacts-users.contacts-birthday-dismiss, dialogs.birthday-bar, dialogs.promo-psa, dialogs.suggestions-dismiss
Send a read receipt for chats, a thread, or a whole folder.
Irreversible for the other side. readHistory is namespace-split (channels.* for supergroups and channels) and Telethon picks the right one; the mention and reaction sweeps are looped until the server stops returning an offset.
tlgr chat read [CHAT]... [OPTIONS]
mutating · idempotent (reports already) · returns ReadChats
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | any number | Chats to read. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--continue-on-error/--no-continue-on-error |
flag | True |
Keep going and report per-peer results. |
--folder |
text | Read every chat of a folder instead. | |
--from-file |
path | Peers from a file, '-' for stdin. | |
--mentions |
flag | Also clear unread mentions. | |
--polls |
flag | Also clear unread poll votes. | |
--reactions |
flag | Also clear unread reactions. | |
--saved-peer |
chat | A Saved-Messages sublist. | |
--topic |
msg-id | Advance a comment thread instead. | |
--type |
user | bot | group |
--up-to |
msg-id | Read up to this message id. |
Also invocable as: tlgr chat read-all
$ tlgr chat read @alice --jsonCatalog coverage (3 full, 3 partial)
Full: dialogs.mark-read, dialogs.mark-read-all, dialogs.read-discussion
Partial: dialogs.bulk-chat-actions, dialogs.monoforum-topics, dialogs.saved-sublists
The read half of the bulk and saved-sublist surfaces; archiving in bulk is chat archive and listing sublists is chat saved list.
Report a chat, a user or specific messages.
Without --spam or --reason this walks Telegram's own option tree: call it, read options, call again with --option <hex>. The bytes are opaque and path-specific — never persist them.
tlgr chat report <CHAT> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns ReportResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to report. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--block |
flag | Block the peer afterwards. | |
--comment |
text | Free text when the tree asks. | |
--delete |
flag | Delete the chat afterwards. | |
--messages |
msg-id | Message ids to report. | |
--option |
text | Option bytes from the previous step. | |
--reason |
child-abuse | copyright | drugs |
--spam |
flag | One-shot action-bar report instead of the tree. |
Also invocable as: tlgr chat report-spam
$ tlgr chat report @spammer --spam --yes --jsonCatalog coverage (8 full, 0 partial)
Full: contacts-users.user-report-messages, contacts-users.user-report-spam, dialogs.report-chat, dialogs.report-spam-bar, dialogs.report-spam-supergroup, groups-channels-admin.report-chat, groups-channels-admin.report-chat-photo, privacy.report-profile-photo
Approve join requests.
Per-user failures are collected in failed rather than aborting the batch.
tlgr chat request approve <CHAT> [USER]... [OPTIONS]
mutating · returns RequestResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Which requesters. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--all |
flag | Answer every pending request. | |
--link |
text | With --all: only this invite link. |
$ tlgr chat request approve @mygroup @alice --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.join-request-approve-all
Partial: groups-channels-admin.join-request-approve-one
Approving one is here; declining one is chat request deny.
Decline join requests.
tlgr chat request deny <CHAT> [USER]... [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns RequestResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | one or more | Which requesters. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--all |
flag | Answer every pending request. | |
--link |
text | With --all: only this invite link. |
$ tlgr chat request deny @mygroup --all --yes --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.join-request-approve-one
Partial: groups-channels-admin.join-request-approve-all
Declining the whole queue is here too; chat request approve owns the other id.
List pending join requests.
The answer flags (--approve, --decline, --approve-all, --decline-all) run before the listing and honour --dry-run themselves, so listing keeps working under a dry run instead of printing a stub.
tlgr chat request list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[JoinRequest]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--approve |
user | Approve one requester. | |
--approve-all |
flag | Approve every pending request. | |
--community |
flag | Target a layer-229 community's peer-link requests. | |
--decline |
user | Decline one requester. | |
--decline-all |
flag | Decline every pending request. | |
--link |
text | Only requests from this invite link. | |
--search, -s |
text | Filter by name. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr chat join-requests
$ tlgr chat request list @mygroup --jsonCatalog coverage (2 full, 1 partial)
Full: dialogs.community-join-requests, groups-channels-admin.join-request-list
Partial: dialogs.join-requests-badge
The badge itself is chat list --with-join-requests; this is the queue.
Stars / TON revenue of a channel (and per-user paid-message revenue).
Read-only by design: when withdrawal_enabled is true the command says so and points at an official client, because payments.getStarsRevenueWithdrawalUrl moves money and wants the 2FA password. Needs can_view_revenue / can_view_stars_revenue.
tlgr chat revenue get <CHAT> [OPTIONS]
returns RevenueSummary
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--dark |
flag | Dark colour set in the graph specs. | |
--since |
user | Stars earned from this user's messages. | |
--ton |
flag | TON (ad) revenue instead of Stars. |
$ tlgr chat revenue get @mychannel --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.paid-message-revenue, groups-channels-admin.stars-revenue-stats
Stars / TON transaction history of a channel.
The cursor is the opaque next_offset string the server hands back.
tlgr chat revenue list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[RevenueTransaction]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--ascending |
flag | Oldest first. | |
--in |
flag | Incoming only. | |
--out |
flag | Outgoing only. | |
--subscription |
text | Only this subscription's rows. | |
--ton |
flag | TON transactions instead of Stars. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat revenue list @mychannel --in --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.stars-transactions
Saved-Messages sublists and channel direct-message topics.
tlgr chat saved list [OPTIONS]
paginated (DIALOGS cursor) · returns Page[SavedDialog]
| Flag | Type | Default | Meaning |
|---|---|---|---|
--in |
chat | me/saved, or a monoforum channel. | |
--pinned |
flag | Only pinned sublists, in order. | |
--unread |
flag | Only sublists with unread messages. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat saved list --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.monoforum-topics, dialogs.saved-sublists
Discard a secret chat, optionally deleting it or reporting spam.
tlgr chat secret discard <ID> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns SecretChat
| Argument | Type | Required | Meaning |
|---|---|---|---|
ID |
int | yes | Secret chat id. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--delete-history |
flag | Also delete the history. | |
--report-spam |
flag | Report it as spam. |
$ tlgr chat secret discard 12 --yes --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.report-encrypted-spam, dialogs.secret-discard
Secret chats this session holds, with state and key fingerprint.
NOT SUPPORTED. Secret chats never appear in messages.getDialogs and are bound to the one session that created them, so listing them needs the local key store the E2E module would own.
tlgr chat secret list [OPTIONS]
returns Page[SecretChat]
| Flag | Type | Default | Meaning |
|---|---|---|---|
--fingerprint |
flag | Include the key fingerprint. | |
--requests |
flag | Only incoming, not-yet-accepted requests. |
$ tlgr chat secret list --jsonCatalog coverage (3 full, 0 partial)
Full: contacts-users.user-secret-chat, dialogs.secret-fingerprint, dialogs.secret-list
Registered and refused with NOT_SUPPORTED (exit 13) until the E2E module exists.
Send into a secret chat, set its timer, ack or show typing.
NOT SUPPORTED. The payload of messages.sendEncrypted is a separately-serialised, AES-IGE-encrypted message with its own sequence numbers; Telethon builds none of it.
tlgr chat secret send <ID> [TEXT] [OPTIONS]
mutating · returns SecretChat
| Argument | Type | Required | Meaning |
|---|---|---|---|
ID |
int | yes | Secret chat id. |
TEXT |
text | no | What to send. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--read |
flag | Acknowledge up to now. | |
--ttl |
duration | Self-destruct timer. | |
--typing |
flag | Show the typing indicator. |
$ tlgr chat secret send 12 hello --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.secret-read-typing, dialogs.secret-send, dialogs.secret-ttl
Registered and refused with NOT_SUPPORTED (exit 13) until the E2E module exists.
Start a secret chat with a user, or accept an incoming request.
NOT SUPPORTED. requestEncryption/acceptEncryption need a validated Diffie-Hellman exchange tlgr cannot perform yet.
tlgr chat secret start [USER] [OPTIONS]
mutating · returns SecretChat
| Argument | Type | Required | Meaning |
|---|---|---|---|
USER |
user | no | Who to start it with. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--accept |
int | Accept this incoming secret chat. |
Also invocable as: tlgr chat secret accept
$ tlgr chat secret start @alice --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.secret-accept, dialogs.secret-create
Registered and refused with NOT_SUPPORTED (exit 13) until the E2E module exists.
Peers I may post as in this chat.
tlgr chat send-as list <CHAT> [OPTIONS]
returns list[SendAsPeer]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
$ tlgr chat send-as list @mygroup --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.send-as
Listing half; chat send-as set writes the default and owns the id.
Set the default peer I post as in this chat.
Applies to reactions as well as messages. Every send command still takes a one-off --send-as. The anonymous admin right forces the group itself.
tlgr chat send-as set <CHAT> <PEER> [OPTIONS]
mutating · returns SendAsResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
PEER |
chat | yes | Who to post as. |
$ tlgr chat send-as set @mygroup @mychannel --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.send-as
Per-dialog switches: content sharing, forum view mode, send-as.
--sharing off is noforwards, which needs Premium in a private chat and owner rights elsewhere. --send-as-list reports the identities available and changes nothing.
tlgr chat set <CHAT> [OPTIONS]
mutating · idempotent (reports already) · returns ChatSwitches
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--request-msg |
msg-id | The message that asked. | |
--send-as |
chat | Default identity to post as. | |
--send-as-list |
flag | List the identities you may post as and stop. | |
--sharing |
on | off | |
--view-as |
topics | messages |
$ tlgr chat set @alice --sharing off --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.no-forwards-private, dialogs.send-as-default, dialogs.view-as-topics
Print every administrable policy toggle with its current value.
The key names are exactly chat setting set's flag names without the leading dashes, so the output round-trips into the input. available says whether you may change each key, and gated_by names the capability flag or boost level that blocks it.
tlgr chat setting get <CHAT> [OPTIONS]
returns SettingsView
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
Also invocable as: tlgr chat settings
$ tlgr chat setting get @mygroup --jsonCatalog coverage (12 full, 6 partial)
Full: groups-channels-admin.antispam, groups-channels-admin.autotranslation, groups-channels-admin.content-protection, groups-channels-admin.forum-toggle, groups-channels-admin.gift-notifications, groups-channels-admin.group-emoji-set, groups-channels-admin.hidden-members, groups-channels-admin.prehistory-visibility, groups-channels-admin.reactions-settings, groups-channels-admin.signatures, groups-channels-admin.slow-mode, groups-channels-admin.toggle-join-to-send
Partial: groups-channels-admin.channel-direct-messages, groups-channels-admin.group-sticker-set, groups-channels-admin.paid-messages-price, groups-channels-admin.restrict-sponsored, groups-channels-admin.toggle-join-request, groups-channels-admin.view-forum-as-messages
Reading half of the Manage screen; chat setting set writes each key.
Change group/channel policy toggles (the Manage screen).
Idempotent: a toggle already in the requested state is reported in already and never sent. Failures are reported per key in failed and do not stop the rest, because a boost-gated refusal must not hide the changes that did land. --direct-messages and --paid-messages are the same call.
tlgr chat setting set <CHAT> [OPTIONS]
mutating · returns SettingResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--ads |
text | off disables sponsored messages. |
|
--allow-custom-reactions |
text | With --reactions all. | |
--antispam |
text | Aggressive anti-spam. | |
--apply-to-links |
flag | Apply --join-request to existing invite links too. | |
--autotranslate |
text | Channel auto-translation. | |
--direct-messages |
text | Enable the channel's direct messages. | |
--emoji-set |
text | Group custom-emoji pack short name. | |
--forum |
text | Enable or disable Topics. | |
--forum-tabs |
tabs | list | |
--gift-notifications |
text | Star-gift notices in the channel. | |
--guard-bot |
user | Bot that handles the queue. | |
--hidden-members |
text | Hide the member list from non-admins. | |
--join-request |
text | Require approval to join. | |
--join-to-send |
text | Require joining before sending. | |
--paid-messages |
text | Stars per incoming message. | |
--paid-reactions |
text | Enable Stars reactions. | |
--prehistory |
visible | hidden | |
--protect, --noforwards |
text | Restrict saving and forwarding. | |
--reactions |
text | Allowed reactions. | |
--reactions-limit |
int | Max distinct reactions per message. | |
--signature-profiles |
text | Link signatures to profiles. | |
--signatures |
text | Sign channel posts. | |
--slow-mode |
text | Seconds between messages, or off. | |
--sticker-set |
text | Group sticker set short name. | |
--view-as |
messages | topics |
$ tlgr chat setting set @mygroup --slow-mode 30s --hidden-members on --jsonCatalog coverage (11 full, 14 partial)
Full: dialogs.channel-autotranslation, dialogs.forum-tabs-mode, emoji.status-channel, groups-channels-admin.channel-direct-messages, groups-channels-admin.group-sticker-set, groups-channels-admin.restrict-sponsored, groups-channels-admin.toggle-join-request, groups-channels-admin.view-forum-as-messages, messages-core.paid-messages-group-price, messages-core.translate-channel-autotranslation, sticker.group-sticker-set
Partial: groups-channels-admin.antispam, groups-channels-admin.autotranslation, groups-channels-admin.channel-sponsored-messages, groups-channels-admin.content-protection, groups-channels-admin.forum-toggle, groups-channels-admin.gift-notifications, groups-channels-admin.group-emoji-set, groups-channels-admin.hidden-members, groups-channels-admin.paid-messages-price, groups-channels-admin.prehistory-visibility, groups-channels-admin.reactions-settings, groups-channels-admin.signatures, groups-channels-admin.slow-mode, groups-channels-admin.toggle-join-to-send
The writing half of the Manage screen; chat setting get reads the same keys and owns most of these ids.
Channels similar to this one (or global recommendations).
A non-Premium account gets a truncated messages.chatsSlice; total reports the full count so the cut is visible. There is no bare chat similar alias: Click cannot hold a command and a group under one name, and chat similar list is the canonical path.
tlgr chat similar list [CHAT] [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[SimilarChat]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | no | Channel, or omit for mine. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--bots |
flag | Bots similar to this bot instead. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat similar list @somechannel --jsonCatalog coverage (3 full, 0 partial)
Full: contacts-users.people-you-may-know, dialogs.recommended-channels, groups-channels-admin.similar-channels
Sponsored messages the server wants shown in this channel.
Exposed as data only; viewed is always false because tlgr never reports an impression it did not make. Results are cached five minutes server-side, which is the API's own contract. Turning them off for your channel is chat setting set --ads off.
tlgr chat sponsored list <CHAT> [OPTIONS]
returns list[SponsoredMessage]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel. |
$ tlgr chat sponsored list @somechannel --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.channel-sponsored-messages
Reading them; chat sponsored report owns the id and reports one.
Report a sponsored message.
The reason menu is server-driven: with no --option the command prints the option blobs and exits 0, so a script can walk the tree one level at a time.
tlgr chat sponsored report <CHAT> <RANDOM_ID> [OPTIONS]
mutating · returns SponsoredReport
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel. |
RANDOM_ID |
text | yes | The opaque id from chat sponsored list. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--comment |
text | Free-text comment. | |
--option |
text | Server-provided option for the next step. |
$ tlgr chat sponsored report @somechannel AQID --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.channel-sponsored-messages
Channel, supergroup, post, story or poll statistics.
Needs channelFull.can_view_stats (channels need about 500 members). Every call is routed to channelFull.stats_dc. Graph payloads are the API's own chart specification, emitted verbatim; async graphs stay as {token, zoom_token} until --load-graphs or --graph resolves them, and --out DIR writes each one to a file instead of inlining it.
tlgr chat stats get <CHAT> [OPTIONS]
returns ChatStats
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel or supergroup. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--dark |
flag | Ask for the dark colour set in the specs. | |
--graph |
text | Resolve one async graph token. | |
--load-graphs |
flag | Resolve every async graph before printing. | |
--message |
msg-id | Per-post statistics. | |
--out |
path | Write graph specs to files. | |
--poll |
msg-id | Poll vote statistics. | |
--story |
int | Story statistics. | |
--zoom |
int | With --graph: zoom into x. |
Also invocable as: tlgr stats get
$ tlgr chat stats get @mychannel --load-graphs --jsonCatalog coverage (5 full, 2 partial)
Full: groups-channels-admin.channel-stats, groups-channels-admin.poll-stats, groups-channels-admin.stats-async-graph, groups-channels-admin.supergroup-stats, messages-core.message-statistics
Partial: groups-channels-admin.message-stats, groups-channels-admin.story-stats
Per-post numbers are here; the repost list is chat stats list.
Public forwards (reposts) of a post or a story.
Also routed to the stats DC. The cursor is the opaque next_offset string.
tlgr chat stats list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[PublicForward]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--message |
msg-id | Public forwards of a post. | |
--story |
int | Public forwards of a story. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
Also invocable as: tlgr stats list
$ tlgr chat stats list @mychannel --message 918 --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.message-stats, groups-channels-admin.story-stats
Approve a post suggested to a channel.
--at doubles as the accept-and-reschedule counter-offer. Accepting a priced post debits the payer, not you.
tlgr chat suggested-post approve <CHANNEL> <MSG_ID> [OPTIONS]
mutating · returns SuggestedPostResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The channel. |
MSG_ID |
msg-id | yes | The suggested post. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--at |
text | Publish then instead of when proposed. |
$ tlgr chat suggested-post approve @mychannel 918 --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.suggested-post-approve
Approving; chat suggested-post deny rejects and owns the id.
Reject a post suggested to a channel.
tlgr chat suggested-post deny <CHANNEL> <MSG_ID> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns SuggestedPostResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHANNEL |
chat | yes | The channel. |
MSG_ID |
msg-id | yes | The suggested post. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--comment |
text | Reason sent back to the author. |
$ tlgr chat suggested-post deny @mychannel 918 --comment 'off topic' --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.suggested-post-approve
Dismiss a server-suggested admin action.
The pending keys come from chat get --full (channelFull.pending_suggestions).
tlgr chat suggestion delete <CHAT> <KEY> [OPTIONS]
mutating · returns SuggestionResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
KEY |
text | yes | The suggestion key to dismiss. |
$ tlgr chat suggestion delete @mygroup CONVERT_GIGAGROUP --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.pending-suggestions
List the chat themes available.
tlgr chat theme list [OPTIONS]
paginated (RATE cursor) · returns Page[ChatTheme]
| Flag | Type | Default | Meaning |
|---|---|---|---|
--gifts |
flag | Collectible gift themes instead of emoji ones. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat theme list --jsonCatalog coverage (1 full, 0 partial)
Full: dialogs.chat-theme-list
Set or remove the theme of one chat.
tlgr chat theme set <CHAT> [OPTIONS]
mutating · idempotent (reports already) · returns ThemeResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--emoji |
text | Emoji theme from chat theme list. |
|
--gift |
text | Collectible gift theme slug. | |
--unset |
flag | Remove the per-chat theme. |
Also invocable as: tlgr chat theme unset
$ tlgr chat theme set @alice --emoji 🌷 --jsonCatalog coverage (4 full, 0 partial)
Full: dialogs.chat-theme-reset, gift.as-chat-theme, gifts.set-as-chat-theme, theme.set-chat-theme
Close a topic.
tlgr chat topic close <CHAT> <TOPIC> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
$ tlgr chat topic close @myforum 314 --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.topic-close-reopen
The closing half; chat topic reopen owns the id.
Create a topic.
The returned id is the id of the messageActionTopicCreate service message, which is exactly what every --topic flag takes. Non-Premium accounts may only use icons from inputStickerSetEmojiDefaultTopicIcons.
tlgr chat topic create <CHAT> <TITLE> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TITLE |
text | yes | Topic title. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--icon-color |
int | Icon colour; immutable afterwards. | |
--icon-emoji |
text | Custom-emoji icon (document id). | |
--send-as |
chat | Post the creation notice as this peer. |
$ tlgr chat topic create @myforum Releases --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-create
Delete a topic and all its messages.
Drains messages.affectedHistory until the offset is 0. No dedicated update is emitted; other clients learn about it from the deleted root message.
tlgr chat topic delete <CHAT> <TOPIC> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
$ tlgr chat topic delete @myforum 314 --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-delete
Rename a topic or change its icon.
icon_color cannot be changed after creation — the API has no field for it — and the General topic accepts only --title and --hidden.
tlgr chat topic edit <CHAT> <TOPIC> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--closed/--no-closed |
flag | Close or reopen in the same call. | |
--hidden/--no-hidden |
flag | Hide or show (General only). | |
--icon-emoji |
text | New custom-emoji icon. | |
--no-icon |
flag | Drop the custom emoji icon. | |
--title |
text | New title. |
$ tlgr chat topic edit @myforum 314 --title 'Release notes' --jsonCatalog coverage (1 full, 2 partial)
Full: groups-channels-admin.topic-edit
Partial: groups-channels-admin.topic-close-reopen, groups-channels-admin.topic-hide-general
--closed/--hidden do it in one call; chat topic reopen and chat topic unhide own the ids.
Get one or more topics by id.
forumTopicDeleted rows are reported as {id, deleted: true}, which is the only signal the API gives that a topic was removed.
tlgr chat topic get <CHAT> [TOPIC]... [OPTIONS]
returns list[Topic]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | one or more | Topic ids. |
$ tlgr chat topic get @myforum 314 --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.topic-get, groups-channels-admin.topic-link
Hide the General topic.
Only General (id 1) may be hidden; the server refuses any other id.
tlgr chat topic hide <CHAT> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
$ tlgr chat topic hide @myforum --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.topic-hide-general
The hiding half; chat topic unhide owns the id.
List or search a forum's topics.
The cursor packs the (offset_date, offset_id, offset_topic) triple of the last row. --closed, --hidden and --pinned are client-side filters over the page, because the API offers no flag for any of them.
tlgr chat topic list <CHAT> [OPTIONS]
paginated (PARTICIPANTS cursor) · returns Page[Topic]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--closed |
flag | Only closed topics. | |
--hidden |
flag | Only hidden topics. | |
--pinned |
flag | Only pinned topics. | |
--search, -s |
text | Title query. |
Pagination is transport-level: --limit/-n, --cursor TOKEN, --all (walked inside the daemon, paced by the account's own rate limiter).
$ tlgr chat topic list @myforum --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.topic-list
Partial: groups-channels-admin.topic-unread-counters
The counters are on every row; chat topic read clears them and owns the id.
Mute a topic.
mute_until is an absolute timestamp computed from the wall clock. --silent on without a duration switches to silent delivery instead of muting.
tlgr chat topic mute <CHAT> <TOPIC> [DURATION] [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
DURATION |
text | no | How long; omit to mute forever. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--previews/--no-previews |
flag | Show message text in notifications. | |
--silent/--no-silent |
flag | Deliver without a sound instead of muting. |
$ tlgr chat topic mute @myforum 314 8h --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.topic-notify-settings
Muting half; chat topic unmute owns the id.
Pin topics (pass several ids to set the pinned order).
--reorder sends the ids as the complete order; --force also unpins anything missing from the list. At most topics_pinned_limit topics can be pinned.
tlgr chat topic pin <CHAT> [TOPIC]... [OPTIONS]
mutating · returns TopicPinResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | one or more | Topic ids. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--force |
flag | With --reorder: unpin topics missing from the list. | |
--reorder |
flag | Treat the ids as the complete pinned order. |
$ tlgr chat topic pin @myforum 314 --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.topic-reorder-pinned
Partial: groups-channels-admin.topic-pin
Pinning is here; chat topic unpin owns the id.
Mark a topic read, including its mentions and reactions.
SEMANTICS: this emits a read receipt inside the topic, exactly like chat open does for a chat. --list is the silent half. top_msg_id is omitted for General (id 1), which is what the API requires. Sending and listing messages inside a topic is message send/list --topic.
tlgr chat topic read <CHAT> <TOPIC> [OPTIONS]
mutating · returns TopicReadResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--list |
flag | Do not read: list the unread mentions/reactions instead. | |
--max-id |
int | Read up to this message id; 0 means everything. | |
--mentions |
flag | Also clear the unread-mentions badge. | |
--reactions |
flag | Also clear the unread-reactions badge. |
$ tlgr chat topic read @myforum 314 --mentions --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.topic-messages, groups-channels-admin.topic-unread-counters
Reopen a closed topic.
tlgr chat topic reopen <CHAT> <TOPIC> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
$ tlgr chat topic reopen @myforum 314 --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-close-reopen
Show the General topic again.
tlgr chat topic unhide <CHAT> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
$ tlgr chat topic unhide @myforum --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-hide-general
Unmute a topic.
tlgr chat topic unmute <CHAT> <TOPIC> [OPTIONS]
mutating · returns TopicResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | yes | Topic id. |
$ tlgr chat topic unmute @myforum 314 --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-notify-settings
Unpin a topic.
tlgr chat topic unpin <CHAT> [TOPIC]... [OPTIONS]
mutating · returns TopicPinResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Forum supergroup. |
TOPIC |
msg-id | any number | Topic ids. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--all |
flag | Unpin every pinned topic. |
$ tlgr chat topic unpin @myforum 314 --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.topic-pin
Transfer ownership of a group or channel (2FA).
The target must already be an admin. PASSWORD_HASH_INVALID exits 4; PASSWORD_TOO_FRESH / SESSION_TOO_FRESH and CHANNELS_TOO_MUCH exit 6 with the wait reported.
tlgr chat transfer <CHAT> <USER> [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns TransferResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USER |
user | yes | The new owner. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--password |
text | Two-factor password. Never taken on the command line. |
Also invocable as: tlgr chat admin transfer
$ tlgr chat transfer @mygroup @alice --password-stdin --yes --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.transfer-ownership
Turn Telegram's translation bar on or off for a chat.
tlgr chat translate <CHAT> <STATE> [OPTIONS]
mutating · idempotent (reports already) · returns TranslateResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
STATE |
text | yes | on |
$ tlgr chat translate @alice off --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.translate-toggle, lang.chat-autotranslate, messages-core.translate-chat-toggle
Set or show a chat's auto-delete timer.
tlgr chat ttl set <CHAT> [PERIOD] [OPTIONS]
mutating · idempotent (reports already) · returns TtlResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
PERIOD |
text | no | 1d |
$ tlgr chat ttl set @alice 1d --jsonCatalog coverage (2 full, 0 partial)
Full: dialogs.ttl-get, dialogs.ttl-set
Send or cancel a chat action (typing, recording, uploading).
Seeing who else is typing is watch --events typing; this is the outgoing half.
tlgr chat typing <CHAT> [OPTIONS]
mutating · returns TypingResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to type in. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--action |
cancel | contact | game |
--cancel |
flag | Alias for --action cancel. | |
--duration |
number | 5.0 |
Keep it alive this long. |
--progress |
int | Percent, for the upload actions. | |
--topic |
msg-id | A forum topic. |
$ tlgr chat typing @alice --jsonCatalog coverage (4 full, 0 partial)
Full: dialogs.typing-cancel, dialogs.typing-send, groupcall.speaking-indicator, messages-core.typing-action
Mark a chat unread again — the undo for an accidental read receipt.
Restores the badge the account owner sees. It cannot un-send the read receipt the other side already got; nothing can.
tlgr chat unread <CHAT> [OPTIONS]
mutating · idempotent (reports already) · returns UnreadResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat to mark unread. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--clear |
flag | Clear the mark instead of setting it. | |
--saved-peer |
chat | A monoforum topic instead. |
$ tlgr chat unread @alice --jsonCatalog coverage (3 full, 0 partial)
Full: dialogs.mark-unread, dialogs.mark-unread-clear, messages-core.chat-mark-unread
Check a username: availability, owner, and Fragment collectible info.
status is available, occupied, invalid or purchasable. On USERNAME_PURCHASE_AVAILABLE the Fragment purchase date, currency, amount and URL are attached — buying happens on fragment.com, not through the API.
tlgr chat username get <USERNAME> [OPTIONS]
returns UsernameCheck
| Argument | Type | Required | Meaning |
|---|---|---|---|
USERNAME |
text | yes | The name to check. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--chat |
chat | Check it for this existing peer. |
$ tlgr chat username get mynews --jsonCatalog coverage (2 full, 0 partial)
Full: groups-channels-admin.check-username, groups-channels-admin.collectible-username-info
Set the public link, or the display order of the additional usernames.
Exactly one of <username> and --order is required. A basic group has no username at all: --upgrade migrates it first, and never silently. Public groups are forced to a visible prehistory by the server, and the public-peer count is capped per account.
tlgr chat username set <CHAT> [USERNAME] [OPTIONS]
mutating · returns UsernameResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USERNAME |
text | no | The public link to claim. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--order |
text | Set the display order of the usernames. | |
--upgrade |
flag | Migrate a basic group to a supergroup first, if needed. |
$ tlgr chat username set @mygroup mynews --jsonCatalog coverage (3 full, 0 partial)
Full: groups-channels-admin.public-private-toggle, groups-channels-admin.set-username, groups-channels-admin.username-reorder
Activate or deactivate one additional username.
tlgr chat username toggle <CHAT> <USERNAME> <ON|OFF> [OPTIONS]
mutating · returns UsernameResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
USERNAME |
text | yes | The additional username. |
| `ON | OFF` | text | yes |
$ tlgr chat username toggle @mygroup mynews off --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.username-toggle
Make a group/channel private by clearing its username(s).
Prints the private invite link afterwards, so the chat stays reachable rather than becoming unfindable in one command.
tlgr chat username unset <CHAT> [OPTIONS]
mutating · returns UsernameResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--all |
flag | Deactivate every username; collectibles stay reserved. |
$ tlgr chat username unset @mygroup --jsonCatalog coverage (1 full, 1 partial)
Full: groups-channels-admin.username-deactivate-all
Partial: groups-channels-admin.public-private-toggle
Going private is here; chat username set goes public and owns the id.
Attach or remove a third-party (bot) verification badge.
This is a bot's badge, not Telegram's blue check — channel.verified is server-assigned and has no API to set.
tlgr chat verification set <CHAT> [OPTIONS]
mutating · returns VerificationResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | The peer to badge. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--bot |
user | Your bot with verifier_settings. | |
--description |
text | Custom description for the badge. | |
--off |
flag | Remove the badge instead. |
$ tlgr chat verification set @mygroup --bot @myverifierbot --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.verify-peer
Set, apply, revert or remove the wallpaper of one chat.
tlgr chat wallpaper set <CHAT> [OPTIONS]
mutating · idempotent (reports already) · returns WallpaperResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Chat. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--blur |
flag | Blur the background. | |
--color |
text | Solid or gradient fill, '#rrggbb'. | |
--file |
path | Upload a local image. | |
--for-both |
flag | Apply on the other side too (Premium). | |
--from-message |
msg-id | Accept a suggested wallpaper. | |
--intensity |
int | Pattern intensity, -100..100. | |
--revert |
flag | Restore my previous wallpaper. | |
--slug |
text | Wallpaper slug from the gallery. | |
--unset |
flag | Remove the chat wallpaper. |
Also invocable as: tlgr chat wallpaper unset
$ tlgr chat wallpaper set @alice --slug pattern --jsonCatalog coverage (6 full, 0 partial)
Full: contacts-users.user-wallpaper, dialogs.chat-wallpaper-apply-suggested, dialogs.chat-wallpaper-revert, stories.story-set-wallpaper, wallpaper.set-for-channel-group, wallpaper.set-for-chat
Delete one or all welcome messages.
Registered and refusing with NOT_SUPPORTED (exit 13): layer 229.
tlgr chat welcome delete <CHAT> [ID] [OPTIONS]
mutating · destructive (needs --yes off a TTY) · returns WelcomeResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
ID |
int | no | Which welcome message. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--all |
flag | Delete every welcome message. |
$ tlgr chat welcome delete @mygroup --all --yes --jsonCatalog coverage (0 full, 1 partial)
Partial: groups-channels-admin.welcome-messages
Layer-229 surface; chat welcome set owns the id.
List a group/channel's welcome messages.
Registered and refusing with NOT_SUPPORTED (exit 13). chatFull.has_welcome_messages advertises them, but the ephemeral.* methods that read them are layer 229 and Telethon 1.44 speaks 227.
tlgr chat welcome list <CHAT> [OPTIONS]
returns list[WelcomeMessage]
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
$ tlgr chat welcome list @mygroup --jsonCatalog coverage (1 full, 1 partial)
Full: messages-core.chat-welcome-messages
Partial: groups-channels-admin.welcome-messages
Layer-229 surface; chat welcome set owns the writing id.
Add or edit a welcome message.
Registered and refusing with NOT_SUPPORTED (exit 13): layer 229.
tlgr chat welcome set <CHAT> [TEXT] [OPTIONS]
mutating · returns WelcomeResult
| Argument | Type | Required | Meaning |
|---|---|---|---|
CHAT |
chat | yes | Group or channel. |
TEXT |
text | no | The message. |
| Flag | Type | Default | Meaning |
|---|---|---|---|
--file |
path | Attach media. | |
--id |
int | Edit this welcome message instead of adding. | |
--parse |
text | Markup of the text: md, html or none. |
$ tlgr chat welcome set @mygroup 'Welcome aboard' --jsonCatalog coverage (1 full, 0 partial)
Full: groups-channels-admin.welcome-messages