cpp-mirai-client  v2.6.1
cpp client for mirai-api-http
IAdaptor.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_ADAPTOR_INTERFACE_HPP_
17#define MIRAI_ADAPTOR_INTERFACE_HPP_
18
19#include <functional>
20#include <string>
21#include <variant>
22
25
26/// 所有mirai相关的对象的命名空间
27namespace Mirai
28{
29
31{
32protected:
33 IAdaptor() = default;
34
35public:
36 template<typename... Args> using Callback = std::function<void(Args...)>;
37 using string = std::string;
38
39 virtual ~IAdaptor() = default;
40
41
42 // *********************************************
43 // ******* Connection & Event related **********
44 // *********************************************
45
46 /**
47 * @brief Register callback for ConnectionEstablished event
48 *
49 */
51
52 /**
53 * @brief Register callback for receiving content
54 *
55 */
57
58 /**
59 * @brief Register callback for ConnectionError event
60 *
61 */
63
64 /**
65 * @brief Register callback for ConnectionClosed event
66 *
67 */
69
70 /**
71 * @brief Called for opening a session to mirai-api-http
72 *
73 * Connect should not return before ConnectionEstablished callback is called.
74 * SessionKey is obtained through ConnectionEstablished callback.
75 */
76 virtual void Connect() = 0;
77
78 /**
79 * @brief Called for closing a session
80 *
81 * Disconnect should not return before ConnectionClosed callback is called
82 */
83 virtual void Disconnect(string SessionKey) = 0;
84
85
86 // *********************************************
87 // *************** Request API *****************
88 // *********************************************
89
90 /// 获取版本号
91 virtual string Version() = 0;
92
93 /// 获取Bot账号
94 virtual QQ_t GetBotQQ() = 0;
95
96 /// 获取登录账号
97 virtual std::vector<QQ_t> BotList() = 0;
98
99 /// 通过messageId获取消息
100 virtual std::variant<FriendMessageEvent, GroupMessageEvent, TempMessageEvent, StrangerMessageEvent>
101 MessageFromId(string SessionKey, MessageId_t id, UID_t target) = 0; //? std::any or std::variant
102
103
104 /// 获取好友列表
105 virtual std::vector<User> FriendList(string SessionKey) = 0;
106
107 /// 获取群列表
108 virtual std::vector<Group> GroupList(string SessionKey) = 0;
109
110 /// 获取群成员列表
111 virtual std::vector<GroupMember> MemberList(string SessionKey, GID_t target) = 0;
112
113 /// 获取最新群成员列表
114 virtual std::vector<GroupMember> LatestMemberList(string SessionKey, GID_t target) = 0;
115
116
117 /// 获取Bot资料
118 virtual UserProfile GetBotProfile(string SessionKey) = 0;
119
120 /// 获取好友资料
121 virtual UserProfile GetFriendProfile(string SessionKey, QQ_t target) = 0;
122
123 /// 获取群成员资料
124 virtual UserProfile GetMemberProfile(string SessionKey, GID_t target, QQ_t MemberId) = 0;
125
126 /// 获取QQ用户资料
127 virtual UserProfile GetUserProfile(string SessionKey, QQ_t target) = 0;
128
129
130 /// 发送好友消息
131 virtual MessageId_t SendFriendMessage(string SessionKey, QQ_t qq, const MessageChain& message,
132 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
133 /// 发送好友消息
134 virtual MessageId_t SendFriendMessage(string SessionKey, QQ_t qq, MessageChain&& message,
135 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
136
137 /// 发送群消息
138 virtual MessageId_t SendGroupMessage(string SessionKey, GID_t group, const MessageChain& message,
139 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
140 /// 发送群消息
141 virtual MessageId_t SendGroupMessage(string SessionKey, GID_t group, MessageChain&& message,
142 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
143
144 /// 发送临时会话消息
145 virtual MessageId_t SendTempMessage(string SessionKey, QQ_t qq, GID_t group, const MessageChain& message,
146 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
147 /// 发送临时会话消息
148 virtual MessageId_t SendTempMessage(string SessionKey, QQ_t qq, GID_t group, MessageChain&& message,
149 std::optional<MessageId_t> QuoteId = std::nullopt) = 0;
150
151 /// 发送头像戳一戳消息
152 virtual void SendNudge(string SessionKey, QQ_t target, UID_t subject, NudgeType kind) = 0;
153
154 /// 撤回消息
155 virtual void Recall(string SessionKey, MessageId_t id, UID_t target) = 0;
156
157 /// 获取漫游消息
158 virtual std::vector<MessageChain> RoamingMessages(string SessionKey, std::time_t TimeStart,
159 std::time_t TimeEnd, UID_t target) = 0;
160
161
162 /// 查看文件列表
163 virtual std::vector<GroupFileInfo> FileList(string SessionKey, string id, string path,
164 UID_t target, int64_t offset = 0, int64_t size = 0,
165 bool withDownloadInfo = false) = 0;
166
167 /// 获取文件信息
168 virtual GroupFileInfo GetFileInfo(string SessionKey, string id, string path, UID_t target,
169 bool withDownloadInfo = false) = 0;
170
171 /// 创建文件夹
172 virtual GroupFileInfo FileMkdir(string SessionKey, string id, string path, UID_t target,
173 string directory) = 0;
174
175 /// 删除文件
176 virtual void FileDelete(string SessionKey, string id, string path, UID_t target) = 0;
177
178 /// 移动文件
179 virtual void FileMove(string SessionKey, string id, string path, UID_t target,
180 string TargetDirId, string TargetDirPath) = 0;
181
182 /// 重命名文件
183 virtual void FileRename(string SessionKey, string id, string path, UID_t target,
184 string name) = 0;
185
186
187 /// 上传文件
188 virtual GroupFileInfo FileUpload(string SessionKey, string path, UID_t target, string type,
189 string name, string content) = 0;
190
191 /**
192 * @brief 分块上传文件
193 *
194 * @attention Experimental API
195 */
196 virtual GroupFileInfo
197 FileUploadChunked(string SessionKey, string path, UID_t target, string type,
198 string name,
199 std::function<bool(size_t offset, std::ostream& sink, bool& finish)> ContentProvider) = 0;
200
201 /// 上传图片
202 virtual MiraiImage UploadImage(string SessionKey, string type, string image) = 0;
203
204 /**
205 * @brief 分块上传图片
206 *
207 * @attention Experimental API
208 */
209 virtual MiraiImage
210 UploadImageChunked(string SessionKey, string type,
211 std::function<bool(size_t offset, std::ostream& sink, bool& finish)> ContentProvider) = 0;
212 /// 上传音频
213 virtual MiraiAudio UploadAudio(string SessionKey, string type, string Audio) = 0;
214
215 /**
216 * @brief 分块上传音频
217 *
218 * @attention Experimental API
219 */
220 virtual MiraiAudio
221 UploadAudioChunked(string SessionKey, string type,
222 std::function<bool(size_t offset, std::ostream& sink, bool& finish)> ContentProvider) = 0;
223
224
225 /// 删除好友
226 virtual void DeleteFriend(string SessionKey, QQ_t target) = 0;
227
228
229 /// 禁言群成员
230 virtual void Mute(string SessionKey, GID_t target, QQ_t member, std::chrono::seconds time) = 0;
231
232 /// 解除群成员禁言
233 virtual void Unmute(string SessionKey, GID_t target, QQ_t member) = 0;
234
235 /// 移除群成员
236 virtual void Kick(string SessionKey, GID_t target, QQ_t member, string message, bool block) = 0;
237
238 /// 退出群聊
239 virtual void Quit(string SessionKey, GID_t target) = 0;
240
241 /// 全体禁言
242 virtual void MuteAll(string SessionKey, GID_t target) = 0;
243
244 /// 解除全体禁言
245 virtual void UnmuteAll(string SessionKey, GID_t target) = 0;
246
247 /// 设置群精华消息
248 virtual void SetEssence(string SessionKey, MessageId_t id, GID_t target) = 0;
249
250 /// 获取群设置
251 virtual GroupConfig GetGroupConfig(string SessionKey, GID_t target) = 0;
252
253 /// 修改群设置
254 virtual void SetGroupConfig(string SessionKey, GID_t target, string name,
255 std::optional<bool> AllowConfessTalk = std::nullopt,
256 std::optional<bool> AllowMemberInvite = std::nullopt,
257 std::optional<bool> AutoApprove = std::nullopt,
258 std::optional<bool> AllowAnonymousChat = std::nullopt) = 0;
259
260 /// 获取群员设置
261 virtual GroupMember GetMemberInfo(string SessionKey, GID_t target, QQ_t member) = 0;
262
263 /// 修改群员设置
264 virtual void SetMemberInfo(string SessionKey, GID_t target, QQ_t member, string name,
265 string title) = 0;
266
267 /// 修改群员管理员
268 virtual void MemberAdmin(string SessionKey, GID_t target, QQ_t member, bool assign) = 0;
269
270
271 /// 获取群公告
272 virtual std::vector<GroupAnnouncement> AnnoList(string SessionKey, GID_t target, int64_t offset = 0,
273 int64_t size = 0) = 0;
274
275 /// 发布群公告
276 virtual GroupAnnouncement AnnoPublish(string SessionKey, GID_t target, string content,
277 string url, string path, string base64,
278 bool ToNewMember = false, bool pinned = false, bool ShowEditCard = false,
279 bool ShowPopup = false, bool RequireConfirm = false) = 0;
280
281 /// 删除群公告
282 virtual void AnnoDelete(string SessionKey, GID_t target, string fid) = 0;
283
284
285 /// 添加好友申请
286 virtual void RespNewFriendRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId, GID_t GroupId,
287 int operate, string message) = 0;
288
289 /// 用户入群申请
290 virtual void RespMemberJoinRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId, GID_t GroupId,
291 int operate, string message) = 0;
292
293 /// Bot被邀请入群申请
294 virtual void RespBotInvitedJoinGroupRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId,
295 GID_t GroupId, int operate, string message) = 0;
296
297
298 /// 执行命令
299 virtual void CmdExecute(string SessionKey, const MessageChain& command) = 0;
300 /// 执行命令
301 virtual void CmdExecute(string SessionKey, MessageChain&& command) = 0;
302
303 /// 注册命令
304 virtual void CmdRegister(string SessionKey, string name, std::vector<string> alias,
305 string usage, string description) = 0;
306
307
308 /// Call any api, just in case
309 virtual string CallAPI(const string& path, const string& method, const string& data) = 0;
310};
311
312
313} // namespace Mirai
314
315#endif
群聊号码类型
Definition: BasicTypes.hpp:88
virtual void MuteAll(string SessionKey, GID_t target)=0
全体禁言
virtual std::vector< User > FriendList(string SessionKey)=0
获取好友列表
std::function< void(Args...)> Callback
Definition: IAdaptor.hpp:36
virtual void RespBotInvitedJoinGroupRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId, GID_t GroupId, int operate, string message)=0
Bot被邀请入群申请
virtual MiraiImage UploadImageChunked(string SessionKey, string type, std::function< bool(size_t offset, std::ostream &sink, bool &finish)> ContentProvider)=0
分块上传图片
virtual void FileRename(string SessionKey, string id, string path, UID_t target, string name)=0
重命名文件
virtual void CmdExecute(string SessionKey, MessageChain &&command)=0
执行命令
virtual void DeleteFriend(string SessionKey, QQ_t target)=0
删除好友
virtual std::vector< GroupMember > MemberList(string SessionKey, GID_t target)=0
获取群成员列表
virtual void Recall(string SessionKey, MessageId_t id, UID_t target)=0
撤回消息
virtual void MemberAdmin(string SessionKey, GID_t target, QQ_t member, bool assign)=0
修改群员管理员
virtual std::vector< GroupMember > LatestMemberList(string SessionKey, GID_t target)=0
获取最新群成员列表
virtual std::vector< MessageChain > RoamingMessages(string SessionKey, std::time_t TimeStart, std::time_t TimeEnd, UID_t target)=0
获取漫游消息
virtual MessageId_t SendGroupMessage(string SessionKey, GID_t group, const MessageChain &message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送群消息
virtual void SetEssence(string SessionKey, MessageId_t id, GID_t target)=0
设置群精华消息
virtual void Mute(string SessionKey, GID_t target, QQ_t member, std::chrono::seconds time)=0
禁言群成员
virtual void Unmute(string SessionKey, GID_t target, QQ_t member)=0
解除群成员禁言
virtual GroupFileInfo FileUploadChunked(string SessionKey, string path, UID_t target, string type, string name, std::function< bool(size_t offset, std::ostream &sink, bool &finish)> ContentProvider)=0
分块上传文件
virtual void SendNudge(string SessionKey, QQ_t target, UID_t subject, NudgeType kind)=0
发送头像戳一戳消息
virtual void OnConnectionError(Callback< ClientConnectionErrorEvent >)=0
Register callback for ConnectionError event
virtual std::vector< GroupAnnouncement > AnnoList(string SessionKey, GID_t target, int64_t offset=0, int64_t size=0)=0
获取群公告
virtual MessageId_t SendFriendMessage(string SessionKey, QQ_t qq, const MessageChain &message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送好友消息
virtual void Quit(string SessionKey, GID_t target)=0
退出群聊
virtual GroupFileInfo FileUpload(string SessionKey, string path, UID_t target, string type, string name, string content)=0
上传文件
virtual UserProfile GetBotProfile(string SessionKey)=0
获取Bot资料
virtual void OnRecv(Callback< const string & >)=0
Register callback for receiving content
virtual string CallAPI(const string &path, const string &method, const string &data)=0
Call any api, just in case
virtual GroupFileInfo FileMkdir(string SessionKey, string id, string path, UID_t target, string directory)=0
创建文件夹
virtual void Connect()=0
Called for opening a session to mirai-api-http
IAdaptor()=default
virtual MessageId_t SendFriendMessage(string SessionKey, QQ_t qq, MessageChain &&message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送好友消息
virtual void Disconnect(string SessionKey)=0
Called for closing a session
virtual GroupMember GetMemberInfo(string SessionKey, GID_t target, QQ_t member)=0
获取群员设置
virtual std::vector< Group > GroupList(string SessionKey)=0
获取群列表
virtual void SetGroupConfig(string SessionKey, GID_t target, string name, std::optional< bool > AllowConfessTalk=std::nullopt, std::optional< bool > AllowMemberInvite=std::nullopt, std::optional< bool > AutoApprove=std::nullopt, std::optional< bool > AllowAnonymousChat=std::nullopt)=0
修改群设置
virtual void CmdRegister(string SessionKey, string name, std::vector< string > alias, string usage, string description)=0
注册命令
virtual UserProfile GetMemberProfile(string SessionKey, GID_t target, QQ_t MemberId)=0
获取群成员资料
virtual void UnmuteAll(string SessionKey, GID_t target)=0
解除全体禁言
virtual void OnConnectionClosed(Callback< ClientConnectionClosedEvent >)=0
Register callback for ConnectionClosed event
virtual UserProfile GetUserProfile(string SessionKey, QQ_t target)=0
获取QQ用户资料
virtual MessageId_t SendTempMessage(string SessionKey, QQ_t qq, GID_t group, const MessageChain &message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送临时会话消息
virtual GroupAnnouncement AnnoPublish(string SessionKey, GID_t target, string content, string url, string path, string base64, bool ToNewMember=false, bool pinned=false, bool ShowEditCard=false, bool ShowPopup=false, bool RequireConfirm=false)=0
发布群公告
virtual GroupConfig GetGroupConfig(string SessionKey, GID_t target)=0
获取群设置
virtual void RespNewFriendRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId, GID_t GroupId, int operate, string message)=0
添加好友申请
virtual void AnnoDelete(string SessionKey, GID_t target, string fid)=0
删除群公告
virtual void Kick(string SessionKey, GID_t target, QQ_t member, string message, bool block)=0
移除群成员
virtual void RespMemberJoinRequestEvent(string SessionKey, int64_t EventId, QQ_t FromId, GID_t GroupId, int operate, string message)=0
用户入群申请
virtual std::variant< FriendMessageEvent, GroupMessageEvent, TempMessageEvent, StrangerMessageEvent > MessageFromId(string SessionKey, MessageId_t id, UID_t target)=0
通过messageId获取消息
virtual void CmdExecute(string SessionKey, const MessageChain &command)=0
执行命令
virtual std::vector< QQ_t > BotList()=0
获取登录账号
virtual MessageId_t SendTempMessage(string SessionKey, QQ_t qq, GID_t group, MessageChain &&message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送临时会话消息
virtual void FileDelete(string SessionKey, string id, string path, UID_t target)=0
删除文件
virtual UserProfile GetFriendProfile(string SessionKey, QQ_t target)=0
获取好友资料
virtual ~IAdaptor()=default
virtual void SetMemberInfo(string SessionKey, GID_t target, QQ_t member, string name, string title)=0
修改群员设置
virtual MessageId_t SendGroupMessage(string SessionKey, GID_t group, MessageChain &&message, std::optional< MessageId_t > QuoteId=std::nullopt)=0
发送群消息
virtual GroupFileInfo GetFileInfo(string SessionKey, string id, string path, UID_t target, bool withDownloadInfo=false)=0
获取文件信息
virtual MiraiImage UploadImage(string SessionKey, string type, string image)=0
上传图片
virtual QQ_t GetBotQQ()=0
获取Bot账号
virtual MiraiAudio UploadAudio(string SessionKey, string type, string Audio)=0
上传音频
virtual std::vector< GroupFileInfo > FileList(string SessionKey, string id, string path, UID_t target, int64_t offset=0, int64_t size=0, bool withDownloadInfo=false)=0
查看文件列表
virtual void FileMove(string SessionKey, string id, string path, UID_t target, string TargetDirId, string TargetDirPath)=0
移动文件
std::string string
Definition: IAdaptor.hpp:37
virtual void OnConnectionEstablished(Callback< ClientConnectionEstablishedEvent >)=0
Register callback for ConnectionEstablished event
virtual string Version()=0
获取版本号
virtual MiraiAudio UploadAudioChunked(string SessionKey, string type, std::function< bool(size_t offset, std::ostream &sink, bool &finish)> ContentProvider)=0
分块上传音频
消息链对象,由一系列消息元素组成
QQ号码类型
Definition: BasicTypes.hpp:71
Base class for QQ_t and GID_t
Definition: BasicTypes.hpp:43
所有mirai相关的对象的命名空间
NudgeType
头像戳一戳消息的发送环境
Definition: BasicTypes.hpp:205
int64_t MessageId_t
消息id类型,用于撤回消息和引用消息
Definition: BasicTypes.hpp:35
群文件信息
Definition: MediaTypes.hpp:76
群员资料
Definition: BasicTypes.hpp:362
QQ用户资料
Definition: BasicTypes.hpp:409