Members & Moderation Commands
Member listing, recent actions, and membership mutation commands.
Handler group source
- Handler module:
backend/tg_client/dialogs/commands/handlers/members.py
- Registered commands:
6
- Registry integration:
backend/tg_client/dialogs/commands/registry.py
Command index
| Command |
Handler |
Service / callable |
Success event(s) |
Notes |
| `get_chat_members` |
handle_members |
membership_service.get_chat_members |
get_chat_members |
single logical response |
| `get_chat_recent_actions` |
handle_members |
membership_service.get_chat_recent_actions |
get_chat_recent_actions |
single logical response |
| `add_chat_member` |
handle_members |
membership_service.add_chat_member |
add_chat_member |
On failure the handler still emits the partial result payload together with the error string. |
| `add_chat_members` |
handle_members |
membership_service.add_chat_members |
add_chat_members |
On failure the handler still emits the partial result payload together with the error string. |
| `remove_chat_member` |
handle_members |
membership_service.remove_chat_member |
remove_chat_member |
single logical response |
| `restore_chat_member` |
handle_members |
membership_service.restore_chat_member |
restore_chat_member |
single logical response |
Group conventions
- Incoming client requests use the WebSocket
action field and are routed into the owner runtime via publish_command().
- Outbound success/error payloads are wrapped into
chat_update live events.
ctx.send_response() means one logical success event plus a conventional <command>_error event on failure.
- Manual
ctx.send() branches indicate streaming or custom event emission; these commands are documented explicitly below.
- Request field types and required flags are inferred from handler/service code because there is no formal request schema object for every command.
Command: get_chat_members
Summary
Get chat members.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 15).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::get_chat_members.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "get_chat_members",
"userbot_id": 1,
"chat_id": -1001234567890,
"query": "publicusername",
"member_filter": "supergroupMembersFilterRecent"
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
limit |
integer |
optional |
50 |
Derived from handler payload access in current code. |
offset |
integer |
optional |
0 |
Derived from handler payload access in current code. |
query |
string |
optional |
— |
Derived from handler payload access in current code. |
member_filter |
`string |
object` |
optional |
— |
Accepts a TDLib-style member-filter object or raw filter type string. |
Response variants
- Success event(s):
get_chat_members.
- Error event(s):
get_chat_members_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "get_chat_members",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
chat_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
supergroup_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
basic_group_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
basic group info api is not configured |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
user_id is required for private chat |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
| TDLib / transport error |
string |
Raw API call fails or TDLib raises in the transport wrapper |
Forwarded from TdlibBaseClient.tg_call() or returned by the service. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes get_chat_members.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::get_chat_members.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_recent_actions, add_chat_member, add_chat_members, remove_chat_member, restore_chat_member.
Command: get_chat_recent_actions
Summary
Get chat recent actions.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 31).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::get_chat_recent_actions.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "get_chat_recent_actions",
"userbot_id": 1,
"chat_id": -1001234567890,
"query": "publicusername",
"event_filters": {
"message_edits": true
}
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
query |
string |
optional |
— |
Derived from handler payload access in current code. |
limit |
integer |
optional |
50 |
Derived from handler payload access in current code. |
event_filters |
object |
optional |
— |
Service-specific filter object for recent action kinds. Needs verification based on code if clients require a formal schema. |
Response variants
- Success event(s):
get_chat_recent_actions.
- Error event(s):
get_chat_recent_actions_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "get_chat_recent_actions",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
chat_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
Recent actions are available only for channels and supergroups |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
| TDLib / transport error |
string |
Raw API call fails or TDLib raises in the transport wrapper |
Forwarded from TdlibBaseClient.tg_call() or returned by the service. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes get_chat_recent_actions.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::get_chat_recent_actions.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_members, add_chat_member, add_chat_members, remove_chat_member, restore_chat_member.
Command: add_chat_member
Summary
Add one member to a chat or supergroup.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 46).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::add_chat_member.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "add_chat_member",
"userbot_id": 1,
"chat_id": -1001234567890,
"user_id": 123456789
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
user_id |
integer |
required |
— |
Derived from handler payload access in current code. |
forward_limit |
integer |
optional |
0 |
Derived from handler payload access in current code. |
Response variants
- Success event(s):
add_chat_member.
- Error event(s):
add_chat_member_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Notes: On failure the handler still emits the partial
result payload together with the error string.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "add_chat_member",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
chat_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
user_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
| TDLib / transport error |
string |
Raw API call fails or TDLib raises in the transport wrapper |
Forwarded from TdlibBaseClient.tg_call() or returned by the service. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes add_chat_member.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::add_chat_member.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_members, get_chat_recent_actions, add_chat_members, remove_chat_member, restore_chat_member.
Command: add_chat_members
Summary
Add multiple members to a chat or supergroup.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 63).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::add_chat_members.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "add_chat_members",
"userbot_id": 1,
"chat_id": -1001234567890,
"user_ids": [
1,
2
]
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
user_ids |
array<integer> |
required |
— |
Derived from handler payload access in current code. |
Response variants
- Success event(s):
add_chat_members.
- Error event(s):
add_chat_members_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Notes: On failure the handler still emits the partial
result payload together with the error string.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "add_chat_members",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
chat_id is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
user_ids must be a list |
string |
Validation of TDLib-style input payload |
Returned as the error field of the error event. |
user_ids is required |
string |
Service-side validation or branch guard |
Returned as the error field of the error event. |
| TDLib / transport error |
string |
Raw API call fails or TDLib raises in the transport wrapper |
Forwarded from TdlibBaseClient.tg_call() or returned by the service. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes add_chat_members.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::add_chat_members.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_members, get_chat_recent_actions, add_chat_member, remove_chat_member, restore_chat_member.
Command: remove_chat_member
Summary
Remove chat member.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 79).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::remove_chat_member.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "remove_chat_member",
"userbot_id": 1,
"chat_id": -1001234567890,
"user_id": 123456789
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
user_id |
integer |
required |
— |
Derived from handler payload access in current code. |
revoke_messages |
boolean |
optional |
false |
Derived from handler payload access in current code. |
Response variants
- Success event(s):
remove_chat_member.
- Error event(s):
remove_chat_member_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "remove_chat_member",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
| TDLib / service error |
string |
Raw API call fails or the service returns a transport-shaped error |
Forwarded from TdlibBaseClient.tg_call() or the service layer. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes remove_chat_member.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::remove_chat_member.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_members, get_chat_recent_actions, add_chat_member, add_chat_members, restore_chat_member.
Command: restore_chat_member
Summary
Restore chat member.
Location in code
- Handler:
backend/tg_client/dialogs/commands/handlers/members.py::handle_members (branch starts near line 89).
- Service:
backend/tg_client/dialogs/tdlib/services/membership_service.py::restore_chat_member.
- Raw API modules:
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Normalizer / typed builder:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
Request
Structure
{
"action": "restore_chat_member",
"userbot_id": 1,
"chat_id": -1001234567890,
"user_id": 123456789
}
Parameters
| Field |
Type |
Required |
Default |
Description |
chat_id |
integer |
required |
— |
Derived from handler payload access in current code. |
user_id |
integer |
required |
— |
Derived from handler payload access in current code. |
Response variants
- Success event(s):
restore_chat_member.
- Error event(s):
restore_chat_member_error.
- Result shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Common outbound envelope:
{
"type": "chat_update",
"userbot_id": 1,
"payload": {
"userbot_id": 1,
"type": "restore_chat_member",
"result": "<typed payload or TDLib-like result>"
}
}
Errors
| Error |
Type/Code |
When happens |
Notes |
| TDLib / service error |
string |
Raw API call fails or the service returns a transport-shaped error |
Forwarded from TdlibBaseClient.tg_call() or the service layer. |
Flow
TDLibListChatsConsumer.receive_json() forwards the WebSocket action into publish_command().
AccountOwnerWorker receives the command envelope and invokes dispatch_command_payload().
- Registry handler
handle_members processes restore_chat_member.
- Service layer executes
backend/tg_client/dialogs/tdlib/services/membership_service.py::restore_chat_member.
- Raw TDLib wrapper(s):
backend/tg_client/dialogs/tdlib/api/chats.py, backend/tg_client/dialogs/tdlib/api/members.py, backend/tg_client/dialogs/tdlib/api/dialogs.py, backend/tg_client/dialogs/tdlib/api/topics.py.
- Result normalization / shaping:
backend/tg_client/dialogs/tdlib/normalizers/member_normalizer.py, backend/tg_client/dialogs/tdlib/normalizers/user_reference_normalizer.py.
- Final payload is emitted through
ctx.send() / ctx.send_response() -> send_ws() -> live event publisher.
- Sibling commands in this handler group:
get_chat_members, get_chat_recent_actions, add_chat_member, add_chat_members, remove_chat_member.