puniyu_adapter_api 0.1.2

puniyu 的适配器api
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
pub mod types;

use crate::types::{
	AvatarSize, CreateGroupFolderInfo, DownloadFileInfo, GroupHighlightsType, GroupInfo,
	GroupMuteInfo, HighlightsAction, MessageType, MuteType, QQCredentialInfo,
	QQGroupFileSystemInfo, QQRkeyInfo, SendMsgType, SetAdminType, SetFriendApplyType,
	SetGroupApplyType, UserInfo,
};
use async_trait::async_trait;
use puniyu_contact::Contact;
use puniyu_element::Message;
use std::path::PathBuf;
use std::time::Duration;

use puniyu_common::Result;

pub enum GetHistoryMsgType {
	MessageId(String),
	MessageSeq(u64),
}

impl From<String> for GetHistoryMsgType {
	fn from(message_id: String) -> Self {
		Self::MessageId(message_id)
	}
}
impl From<&str> for GetHistoryMsgType {
	fn from(message_id: &str) -> Self {
		Self::MessageId(String::from(message_id))
	}
}

impl From<u64> for GetHistoryMsgType {
	fn from(message_seq: u64) -> Self {
		Self::MessageSeq(message_seq)
	}
}

#[async_trait]
pub trait AdapterApi: Send + Sync + 'static {
	/// 获取头像URL
	///
	/// ## 参数
	/// `target_id` - 目标ID
	/// `size` - 头像尺寸
	///
	async fn get_avatar_url(&self, _target_id: &str, _size: Option<AvatarSize>) -> Result<String> {
		Err("此接口未实现".into())
	}

	/// 获取群头像URL
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `size` - 头像尺寸
	///
	async fn get_group_avatar_url(
		&self,
		_group_id: &str,
		_size: Option<AvatarSize>,
	) -> Result<String> {
		Err("此接口未实现".into())
	}

	/// 发送消息
	///
	/// ## 参数
	/// `contact` - 联系人
	/// `element` - 消息元素
	///
	async fn send_msg(&self, _contact: Contact, _element: Message) -> Result<SendMsgType> {
		Err("此接口未实现".into())
	}

	/// 发送长消息
	///
	/// ## 参数
	/// `res_id` - 资源ID
	///
	async fn send_long_msg(&self, _res_id: &str) -> Result<SendMsgType> {
		Err("此接口未实现".into())
	}

	/// 撤回消息
	///
	/// ## 参数
	/// `message_id` - 消息ID
	///
	async fn recall_msg(&self, _message_id: &str) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 获取消息
	///
	/// ## 参数
	/// `message_id` - 消息ID
	///
	async fn get_msg(&self, _message_id: &str) -> Result<MessageType> {
		Err("此接口未实现".into())
	}

	/// 获取历史消息
	///     指定消息位置开始向前获取历史消息,按时间倒序排列
	///
	/// ## 参数
	/// `contact` - 联系人
	/// `message` - 消息ID或消息序列号
	/// `count` - 获取消息数量,最大值为20
	///
	async fn get_history_msg(
		&self,
		_contact: Contact,
		_message: GetHistoryMsgType,
		_count: u8,
	) -> Result<Vec<MessageType>> {
		Err("此接口未实现".into())
	}

	/// 获取群精华消息
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `page` - 页码,从1开始
	/// `page_size` - 每页数量,最大值为20
	///
	async fn get_group_highlights(
		&self,
		_group_id: &str,
		_page: u8,
		_page_size: u8,
	) -> Result<Vec<GroupHighlightsType>> {
		Err("此接口未实现".into())
	}

	/// 设置群精华消息
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `message_id` - 消息ID
	/// `action` - 添加或删除精华消息
	///
	async fn set_group_highlights(
		&self,
		_group_id: &str,
		_message_id: &str,
		_action: HighlightsAction,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 发送赞
	///
	/// ## 参数
	/// `target_id` - 目标ID
	/// `count` - 赞的数量,默认为10
	///
	async fn send_like(&self, _target_id: &str, _count: Option<u8>) -> Result<()> {
		Err("此接口未实现".into())
	}
	/// 群踢人
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `target_id` - 目标ID
	/// `reject_add_request` - 是否拒绝加群请求
	/// `reason` - 踢人原因
	///
	async fn group_kick_member(
		&self,
		_group_id: &str,
		_target_id: &str,
		_reject_add_request: Option<bool>,
		_reason: Option<&str>,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 群禁言
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `target_id` - 目标ID
	/// `duration` - 禁言时长
	///
	async fn set_group_mute(
		&self,
		_group_id: &str,
		_target_id: &str,
		_duration: Duration,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 群全体禁言
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `action` - 设置或取消全体禁言
	async fn set_group_all_mute(&self, _group_id: &str, _action: MuteType) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 设置群管理员
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `target_id` - 目标ID
	/// `action` - 设置或取消管理员
	///
	async fn set_group_admin(
		&self,
		_group_id: &str,
		_target_id: &str,
		_action: SetAdminType,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 设置群成员名片
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `target_id` - 目标ID
	/// `card` - 名片内容
	///
	async fn set_group_member_card(
		&self,
		_group_id: &str,
		_target_id: &str,
		_card: &str,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 设置群名称
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `name` - 群名称
	///
	async fn set_group_name(&self, _group_id: &str, _name: &str) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 退出群组
	///     如果Bot为群主,则解散群组
	/// ## 参数
	/// `group_id` - 群ID
	///
	async fn set_group_quit(&self, _group_id: &str) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 设置群成员头衔
	///     仅Bot为群主可用
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `target_id` - 目标ID
	/// `title` - 头衔内容
	///
	async fn set_group_member_title(
		&self,
		_group_id: &str,
		_target_id: &str,
		_title: &str,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 获取陌生人信息
	///
	/// ## 参数
	/// `target_id` - 陌生人ID
	///
	async fn get_stranger_info(&self, _target_id: &str) -> Result<UserInfo> {
		Err("此接口未实现".into())
	}

	/// 获取好友列表
	async fn get_friend_list(&self) -> Result<Vec<UserInfo>> {
		Err("此接口未实现".into())
	}

	/// 获取群信息
	///
	/// ## 参数
	/// `group_id` - 群ID
	///
	async fn get_group_info(&self, _group_id: &str) -> Result<GroupInfo> {
		Err("此接口未实现".into())
	}

	/// 获取群列表
	async fn get_group_list(&self) -> Result<Vec<GroupInfo>> {
		Err("此接口未实现".into())
	}

	/// 获取群成员列表
	///
	/// ## 参数
	/// `group_id` - 群ID
	///
	async fn get_group_member_list(&self, _group_id: &str) -> Result<Vec<UserInfo>> {
		Err("此接口未实现".into())
	}

	async fn get_group_honor(&self, _group_id: &str) -> Result<Vec<UserInfo>> {
		Err("此接口未实现".into())
	}

	/// 设置好友申请
	///
	/// ## 参数
	/// `action` - 设置或拒绝好友申请
	///
	async fn set_friend_apply(&self, _action: SetFriendApplyType) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 设置加群申请
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `action` - 设置或拒绝加群申请
	///
	async fn set_invited_join_group(
		&self,
		_group_id: &str,
		_action: SetGroupApplyType,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 上传文件
	///
	/// ## 参数
	/// `contact` - 联系人
	/// `file` - 文件路径
	/// `folder` - 目标文件夹
	async fn upload_file(
		&self,
		_contact: Contact,
		_file: Vec<u8>,
		_folder: Option<&str>,
	) -> Result<()> {
		Err("此接口未实现".into())
	}

	/// 下载文件到协议端
	///     NapCat之类的所在的
	///
	/// ## 参数
	/// `file` - 文件标识符
	/// `path` - 本地保存路径
	///
	async fn download_file(&self, _file: &str, _path: PathBuf) -> Result<DownloadFileInfo> {
		Err("此接口未实现".into())
	}

	/// 创建群文件目录
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `folder` - 目录名称
	///
	async fn create_group_folder(
		&self,
		_group_id: &str,
		_folder: &str,
	) -> Result<CreateGroupFolderInfo> {
		Err("此接口未实现".into())
	}

	/// 重命名群文件目录
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `folder_id` - 目录ID
	/// `folder_name` - 目录新名称
	///
	async fn rename_group_folder(
		&self,
		_group_id: &str,
		_folder_id: &str,
		_folder_name: &str,
	) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 删除群文件目录
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `folder_id` - 目录ID
	///
	async fn delete_group_folder(&self, _group_id: &str, _folder_id: &str) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 获取文件URL
	///
	/// ## 参数
	/// `contact` - 联系人
	/// `file_id` - 文件ID
	///
	async fn get_file_url(&self, _contact: Contact, _file_id: &str) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 删除群文件
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `file_id` - 文件ID
	///
	async fn del_group_file(&self, _group_id: &str, _file_id: &str) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 获取群文件系统信息
	///
	/// ## 参数
	/// `group_id` - 群ID
	///
	async fn get_group_file_system_info(&self, _group_id: &str) -> Result<QQGroupFileSystemInfo> {
		Err("此接口未实现".into())
	}

	/// 获取群文件列表
	///
	/// ## 参数
	/// `group_id` - 群ID
	/// `folder_id` - 目录ID,默认根目录
	///
	async fn get_group_file_list(
		&self,
		_group_id: &str,
		_folder_id: Option<&str>,
	) -> Result<Vec<DownloadFileInfo>> {
		Err("此接口未实现".into())
	}

	/// 获取群禁言列表
	///
	/// ## 参数
	/// `group_id` - 群ID
	///
	async fn get_group_mute_list(&self, _group_id: &str) -> Result<Vec<GroupMuteInfo>> {
		Err("此接口未实现".into())
	}

	/// 戳一戳
	///     支持群聊,私聊场景
	///
	/// ## 参数
	/// `contact` - 联系人
	/// `count` - 戳一戳次数,默认1次
	///
	async fn poke_user(&self, _contact: Contact, _count: Option<u8>) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 设置头像
	///
	/// ## 参数
	/// `avatar` - 头像二进制数据
	///
	async fn set_avatar(&self, _avatar: Vec<u8>) -> Result<bool> {
		Err("此接口未实现".into())
	}

	/// 获取Cookie
	///   支持获取指定域名下的Cookie
	async fn get_cookie(&self, _domain: &str) -> Result<String> {
		Err("此接口未实现".into())
	}

	/// 获取QQ 相关接口凭证
	///   支持获取指定域名下的相关凭证
	async fn get_credentials(&self, _domain: &str) -> Result<QQCredentialInfo> {
		Err("此接口未实现".into())
	}

	/// 获取CSRF Token
	async fn get_csrf_token(&self) -> Result<u64> {
		Err("此接口未实现".into())
	}

	async fn get_rkey(&self) -> Result<QQRkeyInfo> {
		Err("此接口未实现".into())
	}
}