1use serde::Deserialize;
15use serde_json::Value;
16
17use crate::Target;
18use crate::message::{MessageChain, MessageID, TimeStamp};
19use crate::message::element::{GroupMember, FriendMember, Group};
20
21#[serde(tag = "type")]
22#[derive(Debug, Clone, Deserialize)]
23pub enum MessageEvent {
24 GroupMessage {
25 #[serde(rename = "messageChain")]
26 message_chain: MessageChain,
27 sender: GroupMember,
28 },
29
30 FriendMessage {
31 #[serde(rename = "messageChain")]
32 message_chain: MessageChain,
33 sender: FriendMember,
34 },
35}
36
37#[serde(tag = "type")]
38#[derive(Clone, Debug, Deserialize)]
39pub enum RecallEvent {
40 GroupRecallEvent {
41 #[serde(rename = "authorId")]
42 author_id: Target,
43 #[serde(rename = "messageId")]
44 message_id: MessageID,
45 time: TimeStamp,
46 group: Group,
47 operator: Option<GroupMember>, },
49 FriendRecallEvent {
50 #[serde(rename = "authorId")]
51 author_id: Target,
52 #[serde(rename = "messageId")]
53 message_id: MessageID,
54 time: TimeStamp,
55 operator: Target,
56 },
57}
58
59#[derive(Clone, Debug, Deserialize)]
60pub enum BotLoginEventKind {
61 BotOnlineEvent,
62 BotOfflineEventActive,
63 BotOfflineEventForce,
64 BotOfflineEventDropped,
65 BotReloginEvent,
66}
67
68#[derive(Debug, Clone, Deserialize)]
69pub struct BotLoginEvent {
70 #[serde(rename = "type")]
71 kind: BotLoginEventKind,
72 qq: Target,
73}
74
75#[derive(Clone, Debug, Deserialize)]
76pub enum BotGroupEventKind {
77 BotJoinGroupEvent,
78 BotLeaveEventActive,
79 BotLeaveEventKick,
80}
81
82#[derive(Debug, Clone, Deserialize)]
83pub struct BotGroupEvent {
84 #[serde(rename = "type")]
85 kind: BotGroupEventKind,
86 group: Group,
87}
88
89#[serde(tag = "type")]
90#[derive(Clone, Debug, Deserialize)]
91pub enum BotMuteEvent {
92 BotMuteEvent {
93 #[serde(rename = "durationSeconds")]
94 duration: u32,
95 operator: GroupMember,
96 },
97 BotUnmuteEvent {
98 operator: GroupMember
99 },
100}
101
102#[derive(Debug, Clone, Deserialize)]
103pub enum GroupChangeEventKind {
104 GroupNameChangeEvent,
105 GroupEntranceAnnouncementChangeEvent,
106 GroupMuteAllEvent,
107 GroupAllowAnonymousChatEvent,
108 GroupAllowMemberInviteEvent,
109}
110
111#[serde(untagged)]
112#[derive(Clone, Debug, Deserialize)]
113pub enum ChangeType {
114 String {
115 origin: String,
116 current: String,
117 },
118 Bool {
119 origin: bool,
120 current: bool,
121 },
122}
123
124#[derive(Clone, Debug, Deserialize)]
125pub struct GroupChangeEvent {
126 #[serde(rename = "type")]
127 kind: GroupChangeEventKind,
128 #[serde(flatten)]
129 change: ChangeType,
130 group: Group,
131 operator: Option<GroupMember>,
132}
133
134#[serde(untagged)]
135#[derive(Debug, Clone, Deserialize)]
136pub enum EventPacket {
137 MessageEvent(MessageEvent),
138 BotLoginEvent(BotLoginEvent),
139 BotMuteEvent(BotMuteEvent),
140 RecallEvent(RecallEvent),
141 GroupChangeEvent(GroupChangeEvent),
142
143 Unsupported(Value),
144}