privchat_protocol/rpc/message/reaction.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/// 消息反应(Reaction)相关 RPC
19use serde::{Deserialize, Serialize};
20use std::collections::HashMap;
21
22/// 添加消息反应请求
23///
24/// RPC路由: `message/reaction/add`
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct MessageReactionAddRequest {
27 /// 服务端消息ID
28 pub server_message_id: u64,
29 /// 频道ID(可选,用于验证)
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub channel_id: Option<u64>,
32 /// Emoji表情
33 pub emoji: String,
34
35 /// 用户ID(服务器端填充,客户端不可设置)
36 #[serde(skip_deserializing, default)]
37 pub user_id: u64,
38}
39
40/// 移除消息反应请求
41///
42/// RPC路由: `message/reaction/remove`
43#[derive(Debug, Clone, Serialize, Deserialize)]
44pub struct MessageReactionRemoveRequest {
45 /// 服务端消息ID
46 pub server_message_id: u64,
47 /// Emoji表情
48 pub emoji: String,
49
50 /// 用户ID(服务器端填充,客户端不可设置)
51 #[serde(skip_deserializing, default)]
52 pub user_id: u64,
53}
54
55/// 获取消息反应列表请求
56///
57/// RPC路由: `message/reaction/list`
58#[derive(Debug, Clone, Serialize, Deserialize)]
59pub struct MessageReactionListRequest {
60 /// 服务端消息ID
61 pub server_message_id: u64,
62
63 /// 用户ID(服务器端填充,客户端不可设置)
64 #[serde(skip_deserializing, default)]
65 pub user_id: u64,
66}
67
68/// 获取消息反应统计请求
69///
70/// RPC路由: `message/reaction/stats`
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct MessageReactionStatsRequest {
73 /// 服务端消息ID
74 pub server_message_id: u64,
75
76 /// 用户ID(服务器端填充,客户端不可设置)
77 #[serde(skip_deserializing, default)]
78 pub user_id: u64,
79}
80
81/// 添加消息反应响应
82///
83/// RPC路由: `message/reaction/add`
84/// 简单操作,返回 true(成功/失败由协议层 code 处理)
85pub type MessageReactionAddResponse = bool;
86
87/// 移除消息反应响应
88///
89/// RPC路由: `message/reaction/remove`
90/// 简单操作,返回 true(成功/失败由协议层 code 处理)
91pub type MessageReactionRemoveResponse = bool;
92
93/// 获取消息反应列表响应
94///
95/// RPC路由: `message/reaction/list`
96#[derive(Debug, Clone, Serialize, Deserialize)]
97pub struct MessageReactionListResponse {
98 pub success: bool,
99 pub reactions: HashMap<String, Vec<u64>>,
100 pub total_count: usize,
101}
102
103/// 获取消息反应统计响应
104///
105/// RPC路由: `message/reaction/stats`
106#[derive(Debug, Clone, Serialize, Deserialize)]
107pub struct MessageReactionStatsData {
108 pub reactions: HashMap<String, Vec<u64>>,
109 pub total_count: usize,
110}
111
112/// 获取消息反应统计响应
113///
114/// RPC路由: `message/reaction/stats`
115#[derive(Debug, Clone, Serialize, Deserialize)]
116pub struct MessageReactionStatsResponse {
117 pub success: bool,
118 pub stats: MessageReactionStatsData,
119}