Members & Moderation

Member listing, recent actions, and membership mutation commands.

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.