Skip to main content

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}