cpp-mirai-client  v2.6.1
cpp client for mirai-api-http
MemberEvents.hpp
浏览该文件的文档.
1// Copyright (C) 2022 Numendacil and contributors
2//
3// This program is free software: you can redistribute it and/or modify
4// it under the terms of the GNU Affero General Public License as
5// published by the Free Software Foundation, either version 3 of the
6// License, or (at your option) any later version.
7//
8// This program is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11// GNU Affero General Public License for more details.
12//
13// You should have received a copy of the GNU Affero General Public License
14// along with this program. If not, see <http://www.gnu.org/licenses/>.
15
16#ifndef MIRAI_MEMBER_EVENTS_HPP_
17#define MIRAI_MEMBER_EVENTS_HPP_
18
19#include <optional>
20#include <string>
21
23
24#include "IEvent.hpp"
25
26namespace Mirai
27{
28
29/**
30 * @brief 群成员名片更改事件
31 *
32 * Member Variable | Default Value
33 * --------------- | -------------
34 * `MemberCardChangeEvent::member_` | `GroupMember{}`
35 * `MemberCardChangeEvent::origin_` | `""`
36 * `MemberCardChangeEvent::current_` | `""`
37 *
38 * 由于服务器并不会告知名片变动, 此事件只能由 mirai 在发现变动时才广播
39 */
40class MemberCardChangeEvent final : public IEvent<MemberCardChangeEvent>
41{
43private:
44 GroupMember member_;
45 std::string origin_;
46 std::string current_;
47
48 static constexpr EventTypes TYPE_ = EventTypes::MemberCardChange;
49
50public:
51 /// 获取群成员资料
52 GroupMember GetMember() const { return this->member_; }
53 /// 获取更改前的群名片
54 std::string GetOriginal() const { return this->origin_; }
55 /// 获取当前的群名片
56 std::string GetCurrent() const { return this->current_; }
57
58 struct Serializable;
59};
60
61
62
63/**
64 * @brief 群成员荣誉改变事件
65 *
66 * Member Variable | Default Value
67 * --------------- | -------------
68 * `MemberHonorChangeEvent::member_` | `GroupMember{}`
69 * `MemberHonorChangeEvent::action_` | `HonorChangeType::ENUM_END`
70 * `MemberHonorChangeEvent::honor_` | `""`
71 *
72 * 目前只支持龙王
73 */
74class MemberHonorChangeEvent final : public IEvent<MemberHonorChangeEvent>
75{
77private:
78 GroupMember member_;
79 HonorChangeType action_ = HonorChangeType::ENUM_END; // {achieve, lose}
80 std::string honor_;
81
82 static constexpr EventTypes TYPE_ = EventTypes::MemberHonorChange;
83
84public:
85 /// 获取群成员资料
86 GroupMember GetMember() const { return this->member_; }
87 /// 获取群荣誉变化行为
88 HonorChangeType GetAction() const { return this->action_; }
89 /// 获取群荣耀名称
90 std::string GetHonor() const { return this->honor_; }
91
92 struct Serializable;
93};
94
95
96
97/**
98 * @brief 群成员权限更改事件
99 *
100 * Member Variable | Default Value
101 * --------------- | -------------
102 * `MemberPermissionChangeEvent::member_` | `GroupMember{}`
103 * `MemberPermissionChangeEvent::origin_` | `PERMISSION::ENUM_END`
104 * `MemberPermissionChangeEvent::current_` | `PERMISSION::ENUM_END`
105 *
106 * 该成员不是Bot自己
107 */
108class MemberPermissionChangeEvent final : public IEvent<MemberPermissionChangeEvent>
109{
111private:
112 GroupMember member_;
115
116 static constexpr EventTypes TYPE_ = EventTypes::MemberPermissionChange;
117
118public:
119 /// 获取群成员资料
120 GroupMember GetMember() const { return this->member_; }
121 /// 获取更改前的权限
122 PERMISSION GetOriginal() const { return this->origin_; }
123 /// 获取当前权限
124 PERMISSION GetCurrent() const { return this->current_; }
125
126 struct Serializable;
127};
128
129
130
131/**
132 * @brief 群成员头衔更改事件
133 *
134 * Member Variable | Default Value
135 * --------------- | -------------
136 * `MemberSpecialTitleChangeEvent::member_` | `GroupMember{}`
137 * `MemberSpecialTitleChangeEvent::origin_` | `""`
138 * `MemberSpecialTitleChangeEvent::current_` | `""`
139 */
140class MemberSpecialTitleChangeEvent final : public IEvent<MemberSpecialTitleChangeEvent>
141{
143private:
144 GroupMember member_;
145 std::string origin_;
146 std::string current_;
147
148 static constexpr EventTypes TYPE_ = EventTypes::MemberSpecialTitleChange;
149
150public:
151 /// 获取群成员资料
152 GroupMember GetMember() const { return this->member_; }
153 /// 获取更改前的群头衔
154 std::string GetOriginal() const { return this->origin_; }
155 /// 获取当前群头衔
156 std::string GetCurrent() const { return this->current_; }
157
158 struct Serializable;
159};
160
161
162
163/**
164 * @brief 新成员加入群聊事件
165 *
166 * Member Variable | Default Value
167 * --------------- | -------------
168 * `MemberJoinEvent::member_` | `GroupMember{}`
169 * `MemberJoinEvent::inviter_` | `std::nullopt`
170 */
171class MemberJoinEvent final : public IEvent<MemberJoinEvent>
172{
174private:
175 GroupMember member_;
176 std::optional<GroupMember> inviter_ = std::nullopt;
177
178 static constexpr EventTypes TYPE_ = EventTypes::MemberJoin;
179
180public:
181 /// 获取群成员资料
182 GroupMember GetMember() const { return this->member_; }
183 /// 获取邀请人信息,若无则返回 `std::nullopt`
184 std::optional<GroupMember> GetInviter() const { return this->inviter_; }
185
186 struct Serializable;
187};
188
189
190
191/**
192 * @brief 用户申请入群事件
193 *
194 * Member Variable | Default Value
195 * --------------- | -------------
196 * `MemberJoinRequestEvent::EventId_` | `0`
197 * `MemberJoinRequestEvent::FromId_` | `0_qq`
198 * `MemberJoinRequestEvent::GroupId_` | `0_gid`
199 * `MemberJoinRequestEvent::GroupName_` | `""`
200 * `MemberJoinRequestEvent::nickname_` | `""`
201 * `MemberJoinRequestEvent::message_` | `""`
202 * `MemberJoinRequestEvent::inviter_` | `std::nullopt`
203 *
204 * 需要Bot为管理员或群主
205 */
206class MemberJoinRequestEvent final : public IEvent<MemberJoinRequestEvent>
207{
209
210private:
211 int64_t EventId_ = 0;
212 QQ_t FromId_;
213 GID_t GroupId_;
214 std::string GroupName_;
215 std::string nickname_;
216 std::string message_;
217 std::optional<QQ_t> InviterId_ = std::nullopt;
218
219 static constexpr EventTypes TYPE_ = EventTypes::MemberJoinRequest;
220
221public:
222 /// 获取事件id,唯一标识符
223 int64_t GetEventId() const { return this->EventId_; }
224 /// 获取申请人QQ
225 QQ_t GetUserId() const { return this->FromId_; }
226 /// 获取申请人昵称
227 std::string GetNickname() const { return this->nickname_; }
228 /// 获取群聊id
229 GID_t GetGroupId() const { return this->GroupId_; }
230 /// 获取群聊名称
231 std::string GetGroupName() const { return this->GroupName_; }
232 /// 获取申请信息
233 std::string GetMessage() const { return this->message_; }
234
235 /// 获取邀请人信息,若无则返回 `std::nullopt`
236 std::optional<QQ_t> GetInviter() const { return this->InviterId_; }
237
238 // TODO: add helper methods for quick response
239
240 struct Serializable;
241};
242
243
244
245/**
246 * @brief 成员退出群聊相关事件
247 *
248 * Middleware for all leave group related events
249 * Member Variable | Default Value
250 * --------------- | -------------
251 * `MemberLeaveEvent::member_` | `GroupMember{}`
252 */
253template <class Event>
254class MemberLeaveEvent : public IEvent<Event>
255{
256private:
257 GroupMember member_;
258
259public:
260 /// 获取群成员资料
261 GroupMember GetMember() const { return this->member_; }
262
263 struct Serializable;
264};
265
266/**
267 * @brief 成员被踢出群聊事件
268 *
269 * Member Variable | Default Value
270 * --------------- | -------------
271 * `MemberLeaveEventKick::member_` | `GroupMember{}`
272 * `MemberLeaveEventKick::operator_` | `std::nullopt`
273 *
274 * 该成员不是Bot自己
275 */
276class MemberLeaveEventKick : public MemberLeaveEvent<MemberLeaveEventKick>
277{
279private:
280 std::optional<GroupMember> operator_ = std::nullopt;
281
282 static constexpr EventTypes TYPE_ = EventTypes::MemberLeaveKick;
283
284public:
285 /// 获取操作员信息,为Bot时返回 `std::nullopt`
286 std::optional<GroupMember> GetOperator() const { return this->operator_; }
287
288 struct Serializable;
289};
290
291/**
292 * @brief 成员主动退出群聊事件
293 *
294 * Member Variable | Default Value
295 * --------------- | -------------
296 * `MemberLeaveEventQuit::member_` | `GroupMember{}`
297 *
298 * 该成员不是Bot自己
299 */
300class MemberLeaveEventQuit : public MemberLeaveEvent<MemberLeaveEventQuit>
301{
303private:
304 static constexpr EventTypes TYPE_ = EventTypes::MemberLeaveQuit;
305};
306
307
308
309/**
310 * @brief 群成员被禁言事件
311 *
312 * Member Variable | Default Value
313 * --------------- | -------------
314 * `MemberMuteEvent::member_` | `GroupMember{}`
315 * `MemberMuteEvent::duration_` | `0`
316 * `MemberMuteEvent::operator_` | `std::nullopt`
317 *
318 * 该成员不是Bot自己
319 */
320class MemberMuteEvent final : public IEvent<MemberMuteEvent>
321{
323private:
324 GroupMember member_;
325 std::time_t duration_ = 0;
326 std::optional<GroupMember> operator_ = std::nullopt;
327
328 static constexpr EventTypes TYPE_ = EventTypes::MemberMute;
329
330public:
331 /// 获取群成员资料
332 GroupMember GetMember() const { return this->member_; }
333 /// 获取禁言时长
334 std::chrono::seconds GetDuration() const { return std::chrono::seconds(this->duration_); }
335 /// 获取操作员信息,为Bot时返回 `std::nullopt`
336 std::optional<GroupMember> GetOperator() const { return this->operator_; }
337
338 struct Serializable;
339};
340
341
342
343/**
344 * @brief 群成员被取消禁言事件
345 *
346 * Member Variable | Default Value
347 * --------------- | -------------
348 * `MemberUnmuteEvent::member_` | `GroupMember{}`
349 * `MemberUnmuteEvent::operator_` | `std::nullopt`
350 *
351 * 该成员不是Bot自己
352 */
353class MemberUnmuteEvent final : public IEvent<MemberUnmuteEvent>
354{
356private:
357 GroupMember member_;
358 std::optional<GroupMember> operator_ = std::nullopt;
359
360 static constexpr EventTypes TYPE_ = EventTypes::MemberUnmute;
361
362public:
363 /// 获取群成员资料
364 GroupMember GetMember() const { return this->member_; }
365 /// 获取操作员信息,为Bot时返回 `std::nullopt`
366 std::optional<GroupMember> GetOperator() const { return this->operator_; }
367
368 struct Serializable;
369};
370
371
372
373#define DECLARE_TYPE_ENUM(event_type) \
374 template<> struct GetEventType<event_type::GetType()> \
375 { \
376 using type = event_type; \
377 }
378
389
390#undef DECLARE_TYPE_ENUM
391
392} // namespace Mirai
393
394
395#endif
群聊号码类型
Definition: BasicTypes.hpp:88
Common interface for all event types
Definition: IEvent.hpp:34
群成员名片更改事件
GroupMember GetMember() const
获取群成员资料
std::string GetCurrent() const
获取当前的群名片
std::string GetOriginal() const
获取更改前的群名片
群成员荣誉改变事件
GroupMember GetMember() const
获取群成员资料
HonorChangeType GetAction() const
获取群荣誉变化行为
std::string GetHonor() const
获取群荣耀名称
新成员加入群聊事件
GroupMember GetMember() const
获取群成员资料
std::optional< GroupMember > GetInviter() const
获取邀请人信息,若无则返回 std::nullopt
用户申请入群事件
std::optional< QQ_t > GetInviter() const
获取邀请人信息,若无则返回 std::nullopt
QQ_t GetUserId() const
获取申请人QQ
GID_t GetGroupId() const
获取群聊id
int64_t GetEventId() const
获取事件id,唯一标识符
std::string GetMessage() const
获取申请信息
std::string GetGroupName() const
获取群聊名称
std::string GetNickname() const
获取申请人昵称
成员被踢出群聊事件
std::optional< GroupMember > GetOperator() const
获取操作员信息,为Bot时返回 std::nullopt
成员主动退出群聊事件
成员退出群聊相关事件
GroupMember GetMember() const
获取群成员资料
群成员被禁言事件
std::optional< GroupMember > GetOperator() const
获取操作员信息,为Bot时返回 std::nullopt
GroupMember GetMember() const
获取群成员资料
std::chrono::seconds GetDuration() const
获取禁言时长
群成员权限更改事件
GroupMember GetMember() const
获取群成员资料
PERMISSION GetOriginal() const
获取更改前的权限
PERMISSION GetCurrent() const
获取当前权限
群成员头衔更改事件
std::string GetCurrent() const
获取当前群头衔
GroupMember GetMember() const
获取群成员资料
std::string GetOriginal() const
获取更改前的群头衔
群成员被取消禁言事件
std::optional< GroupMember > GetOperator() const
获取操作员信息,为Bot时返回 std::nullopt
GroupMember GetMember() const
获取群成员资料
QQ号码类型
Definition: BasicTypes.hpp:71
所有mirai相关的对象的命名空间
HonorChangeType
群称号改变类型
Definition: BasicTypes.hpp:269
PERMISSION
群成员权限
Definition: BasicTypes.hpp:185
DECLARE_TYPE_ENUM(BotOfflineEventActive)
群员资料
Definition: BasicTypes.hpp:362