privchat_protocol/rpc/group/member.rs
1// Copyright 2025 Shanghai Boyu Information Technology Co., Ltd.
2// https://privchat.dev
3//
4// Author: zoujiaqing <zoujiaqing@gmail.com>
5//
6// Licensed under the Apache License, Version 2.0 (the "License");
7// you may not use this file except in compliance with the License.
8// You may obtain a copy of the License at
9//
10// http://www.apache.org/licenses/LICENSE-2.0
11//
12// Unless required by applicable law or agreed to in writing, software
13// distributed under the License is distributed on an "AS IS" BASIS,
14// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15// See the License for the specific language governing permissions and
16// limitations under the License.
17
18/// 群组成员管理相关 RPC
19use serde::{Deserialize, Serialize};
20
21/// 获取群组成员列表请求
22///
23/// RPC路由: `group/member/list`
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct GroupMemberListRequest {
26 /// 群组ID
27 pub group_id: u64,
28
29 /// 请求者ID(服务器端填充,客户端不可设置)
30 #[serde(skip_deserializing, default)]
31 pub user_id: u64,
32}
33
34/// 移除群组成员请求
35///
36/// RPC路由: `group/member/remove`
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct GroupMemberRemoveRequest {
39 /// 群组ID
40 pub group_id: u64,
41 /// 被移除的用户ID
42 pub user_id: u64,
43
44 /// 操作者ID(服务器端填充,客户端不可设置)
45 #[serde(skip_deserializing, default)]
46 pub operator_id: u64,
47}
48
49/// 离开群组请求
50///
51/// RPC路由: `group/member/leave`
52#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct GroupMemberLeaveRequest {
54 /// 群组ID
55 pub group_id: u64,
56
57 /// 用户ID(服务器端填充,客户端不可设置)
58 #[serde(skip_deserializing, default)]
59 pub user_id: u64,
60}
61
62/// 添加群组成员请求
63///
64/// RPC路由: `group/member/add`
65#[derive(Debug, Clone, Serialize, Deserialize)]
66pub struct GroupMemberAddRequest {
67 /// 群组ID
68 pub group_id: u64,
69 /// 要添加的用户ID
70 pub user_id: u64,
71 /// 成员角色
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub role: Option<String>,
74
75 /// 邀请者ID(服务器端填充,客户端不可设置)
76 #[serde(skip_deserializing, default)]
77 pub inviter_id: u64,
78}
79
80/// 禁言群组成员请求
81///
82/// RPC路由: `group/member/mute`
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct GroupMemberMuteRequest {
85 /// 群组ID
86 pub group_id: u64,
87 /// 被禁言的用户ID
88 pub user_id: u64,
89 /// 禁言时长(秒),0表示永久禁言
90 pub mute_duration: u64,
91
92 /// 操作者ID(服务器端填充,客户端不可设置)
93 #[serde(skip_deserializing, default)]
94 pub operator_id: u64,
95}
96
97/// 取消禁言群组成员请求
98///
99/// RPC路由: `group/member/unmute`
100#[derive(Debug, Clone, Serialize, Deserialize)]
101pub struct GroupMemberUnmuteRequest {
102 /// 群组ID
103 pub group_id: u64,
104 /// 被取消禁言的用户ID
105 pub user_id: u64,
106
107 /// 操作者ID(服务器端填充,客户端不可设置)
108 #[serde(skip_deserializing, default)]
109 pub operator_id: u64,
110}
111
112/// 获取群组成员列表响应
113///
114/// RPC路由: `group/member/list`
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct GroupMemberInfo {
117 pub user_id: u64,
118 pub username: String,
119 pub nickname: String,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub avatar_url: Option<String>,
122 pub role: String,
123 pub joined_at: String,
124 pub is_muted: bool,
125}
126
127/// 获取群组成员列表响应
128///
129/// RPC路由: `group/member/list`
130#[derive(Debug, Clone, Serialize, Deserialize)]
131pub struct GroupMemberListResponse {
132 pub members: Vec<GroupMemberInfo>,
133 pub total: usize,
134}
135
136/// 添加群组成员响应
137///
138/// RPC路由: `group/member/add`
139/// 简单操作,返回 true(成功/失败由协议层 code 处理)
140pub type GroupMemberAddResponse = bool;
141
142/// 移除群组成员响应
143///
144/// RPC路由: `group/member/remove`
145/// 简单操作,返回 true(成功/失败由协议层 code 处理)
146pub type GroupMemberRemoveResponse = bool;
147
148/// 离开群组响应
149///
150/// RPC路由: `group/member/leave`
151/// 简单操作,返回 true(成功/失败由协议层 code 处理)
152pub type GroupMemberLeaveResponse = bool;