-
Notifications
You must be signed in to change notification settings - Fork 18
/
wfc.js
2147 lines (1933 loc) · 75.9 KB
/
wfc.js
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
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/*
* Copyright (c) 2020 WildFireChat. All rights reserved.
*/
import {EventEmitter} from 'events';
import {atob, btoa} from '../util/base64.min.js';
import Long from 'long';
import impl from '../proto/proto.min';
import Config from "../../config";
import EventType from "./wfcEvent";
import ConnectionStatus from "./connectionStatus";
import NullUserInfo from "../model/nullUserInfo";
//import avenginekit from "../av/engine/avenginekitproxy";
export class WfcManager {
/**
* 事件通知,{@link EventType}中定义的事件,都会采用本{@link eventEmitter} 通知
* @type {module:events.internal.EventEmitter}
*/
eventEmitter = new EventEmitter();
constructor() {
impl.eventEmitter = {
emit: (ev, ...args) => {
if (ev === EventType.ConnectionStatusChanged || ev === EventType.UserOnlineEvent) {
self.eventEmitter.emit(ev, ...args)
} else {
if (impl.connectionStatus === ConnectionStatus.ConnectionStatusConnected) {
self.eventEmitter.emit(ev, ...args)
} else {
// ignore
}
}
}
};
}
/**
* 初始化,请参考本demo的用法
* @param {[]} args,pc 时,传入[node实例]; web 时,可以传入Config配置对象,配置项,请参考{@link Config}
*/
init(args = []) {
console.log('wfc init');
impl.init(args);
//avenginekit.setup(self);
//self.setProxyInfo("", "192.168.1.80", 1080, "", "");
console.log('wfc init end')
}
/**
* 注册新的自定义消息
*
* @param {string} name
* @param {number} flag 用来标识本消息是否需要存储、计数等,{@link PersistFlag}
* @param {number} type 消息类型,{@link MessageContentType}
* @param {class} clazz 消息对应的class
*/
registerMessageContent(name, flag, type, clazz) {
impl.registerMessageContent(name, flag, type, clazz);
}
/**
* 获取clientId,获取用户token时,一定要通过调用此方法获取clientId,否则会连接失败。
* @returns {string} clientId
*/
getClientId() {
return impl.getClientId();
}
/*
* 启用国密加密。注意需要服务器端同步开启国密配置
*/
useSM4() {
impl.useSM4();
}
/**
* 连接服务器
* @param {string} userId 用户id
* @param {string} token 用户token,生成token时,所使用的clientId,一定要通过{@link getClientId}获取
* @return {number} 返回上一次活动时间。如果间隔时间较长,可以加个第一次登录的等待提示界面,在等待时同步所有的用户信息/群组信息/频道信息等。
*/
connect(userId, token) {
return impl.connect(userId, token);
}
/**
* 设置代理,只支持socks5代理
*
* @param {String} host 代理host,host和ip必须至少有一个。
* @param {String} ip 代理IP,host和ip必须至少有一个。
* @param {number} port 代理端口
* @param {String} username username
* @param {String} password password
*/
setProxyInfo(host, ip, port, username, password) {
impl.setProxyInfo(host, ip, port, username, password);
}
/**
* 设置第三方推送设备token
* @param {number} pushType 推送类型,0-5 移动端已经使用了。
* @param {String} token 设备token
*/
setDeviceToken(pushType, token) {
impl.setDeviceToken(pushType, token);
}
/**
* 断开连接
* @param {boolean} disablePush 是否禁用推送,在cleanSession为true时无意义
* @param {boolean} clearSession 是否清除会话 session,清除之后,所有之前的会话信息会被删除
*/
disconnect(disablePush = false, clearSession = false) {
impl.disconnect(disablePush, clearSession);
}
setPackageName(packageName) {
impl.setPackageName(packageName);
}
/**
* 获取当前用户的id
* @returns {string} 当前用户的id
*/
getUserId() {
return impl.getUserId();
}
/**
* 服务器时间和本地时间的差值
* @returns {number} 服务器时间和本地时间的差值
*/
getServerDeltaTime() {
return impl.getServerDeltaTime();
}
/**
* 截图,
* @returns {string} 成功返回'done',同时,图片保存到了系统剪贴板
*/
screenShot() {
return impl.screenShot();
}
/**
* 是否成功登录
* @returns {boolean}
*/
isLogin() {
return impl.isLogin();
}
/**
* 获取连接状态
* @returns {number} 连接状态,参考{@link ConnectionStatus}
*/
getConnectionStatus() {
return impl.getConnectionStatus();
}
/**
* 设置网络策略,仅专业版支持
* @param {int} strategy 网络策略。0 是自动选择;1 选择主网络;2选择备用网络
*
*/
setBackupAddressStrategy(strategy) {
impl.setBackupAddressStrategy(strategy);
}
/**
* 设置备选网络信息,仅专业版支持
* @param {String} backupHost 备选网络主机地址
* @param {int} backupPort 备选网络主机端口
*/
setBackupAddress(backupHost, backupPort) {
impl.setBackupAddress(backupHost, backupPort);
}
/**
* 设置协议栈短连接UA。
*
* @param {string} userAgent 协议栈短连接使用的UA
*/
setProtoUserAgent(userAgent) {
impl.setProtoUserAgent(userAgent);
}
/**
* 添加协议栈短连接自定义Header
*
* @param {string} header 协议栈短连接使用的UA
* @param {string} value 协议栈短连接使用的UA
*/
addHttpHeader(header, value) {
impl.addHttpHeader(header, value)
}
/**
* 设备从睡眠中恢复
*/
onAppResume() {
impl.onAppResume();
}
/**
* 设备进入睡眠状态
*/
onAppSuspend() {
impl.onAppSuspend();
}
/**
* 已废弃,请使用{@link getFavGroupList}
* 获取我保存到通讯录的群组信息列表
* @returns {[GroupInfo]} 参考{@link GroupInfo}
*/
getMyGroupList() {
return impl.getMyGroupList();
}
/**
* 获取我保存到通讯录的群组信息列表
* @returns {[GroupInfo]} 参考{@link GroupInfo}
*/
getFavGroupList() {
let groupInfos = impl.getMyGroupList();
groupInfos.map(info => {
if (!info.portrait) {
info.portrait = this.defaultGroupPortrait(info);
}
return info;
})
return groupInfos;
}
/**
* 获取用户的displayName
* @param {string} userId 用户id
* @returns {string} 用户displayName
*/
getUserDisplayName(userId) {
let userInfo = this.getUserInfo(userId, false);
if (!userInfo) {
return '<' + userId + '>';
}
return userInfo.friendAlias ? userInfo.friendAlias : (userInfo.displayName ? userInfo.displayName : '<' + userId + '>');
}
/**
* 获取用户在群里面的displayName
* @param {string} groupId 群id
* @param {string} userId 用户id
* @returns {string} 用户在群里面的displayName
*/
getGroupMemberDisplayName(groupId, userId) {
let userInfo = this.getUserInfo(userId, false, groupId);
if (!userInfo) {
return '<' + userId + '>';
}
return userInfo.groupAlias ? userInfo.groupAlias : (userInfo.friendAlias ? userInfo.friendAlias : (userInfo.displayName ? userInfo.displayName : '<' + userId + '>'))
}
getUserDisplayNameEx(userInfo) {
return userInfo.friendAlias ? userInfo.friendAlias : (userInfo.displayName ? userInfo.displayName : '<' + userInfo.uid + '>');
}
getGroupMemberDisplayNameEx(userInfo) {
return userInfo.groupAlias ? userInfo.groupAlias : (userInfo.friendAlias ? userInfo.friendAlias : (userInfo.displayName ? userInfo.displayName : '<' + userInfo.uid + '>'))
}
/**
* 获取用户信息
* @param {string} userId 用户id
* @param {boolean} refresh 是否刷新用户信息,如果刷新的话,且用户信息有更新,会通过{@link eventEmitter}进行通知,事件的名字是{@link EventType.UserInfosUpdate }
* @param {string} groupId
* @returns {UserInfo}
*/
getUserInfo(userId, refresh = false, groupId = '') {
let userInfo = impl.getUserInfo(userId, refresh, groupId);
if (!userInfo.portrait) {
userInfo.portrait = this.defaultUserPortrait(userInfo);
}
return userInfo;
}
/**
* 获取用户信息
* @param {string} userId 用户ID
* @param {boolean} refresh 是否强制从服务器更新,如果本地没有或者强制,会从服务器刷新
* @param {function (UserInfo)} success 成功回调,如果本地有该用户信息,则通过回调返回本地的用户信息;如果本地没有,则从服务端拉取该用户信息,并通过回调返回
* @param {function (number)} fail 失败回调
*/
getUserInfoEx(userId, refresh, success, fail) {
impl.getUserInfoEx(userId, refresh, success, fail);
}
/**
* 批量从服务端拉取用户信息
* @param {[string]} userIds 用户ids
* @param {function ([UserInfo])} successCB 成功回调
* @param {function (Number)} failCB 失败回调
*/
getUserInfosEx(userIds, successCB, failCB) {
impl.getUserInfosEx(userIds, userInfos => {
userInfos.forEach((u) => {
if (!u.portrait) {
u.portrait = this.defaultUserPortrait(u);
}
});
successCB && successCB(userInfos);
}, err => {
failCB && failCB(err);
});
}
/**
* 批量获取用户信息
* @param {[string]} userIds 用户ids
* @param {string} groupId 群组id
* @returns {[UserInfo]}
*/
getUserInfos(userIds, groupId) {
let userInfos = impl.getUserInfos(userIds, groupId);
userInfos.forEach((u) => {
if (!u.portrait) {
u.portrait = this.defaultUserPortrait(u)
}
});
return userInfos;
}
/**
* 服务端搜索用户
* @param {string} keyword 搜索关键字
* @param {number} searchType 搜索类型,可选值参考{@link SearchType}
* @param {number} page 页数,如果searchType是0,每次搜索20个,可以指定page。如果searchType非0,只能搜索一个,page无意义
* @param {function (keyword, [UserInfo])} successCB
* @param {function (number)}failCB
* @returns {Promise<void>}
*/
async searchUser(keyword, searchType, page, successCB, failCB) {
impl.searchUser(keyword, searchType, page, (keyword, userInfos) => {
userInfos.forEach((u) => {
if (!u.portrait) {
u.portrait = this.defaultUserPortrait(u)
}
});
successCB && successCB(keyword, userInfos);
}, failCB);
}
/**
* 本地搜索好友
* @param keyword 搜索关键字
* @returns {[UserInfo]}
*/
searchFriends(keyword) {
let userInfos = impl.searchFriends(keyword);
userInfos.forEach((u) => {
if (!u.portrait) {
u.portrait = this.defaultUserPortrait(u)
}
});
return userInfos;
}
/**
* 本地搜索群组
* @param keyword 搜索关键字
* @returns {[GroupSearchResult]}
*/
searchGroups(keyword) {
let results = impl.searchGroups(keyword);
results.forEach(r => {
let info = r.groupInfo;
if (!info.portrait) {
info.portrait = this.defaultGroupPortrait(info);
}
})
return results;
}
/**
* 获取收到的好友请求
* @returns {[FriendRequest]}
*/
getIncommingFriendRequest() {
return impl.getIncommingFriendRequest();
}
/**
* 获取发送出去的好友请求
* @returns {[FriendRequest]}
*/
getOutgoingFriendRequest() {
return impl.getOutgoingFriendRequest();
}
/**
* 获取单条好友请求
* @param {string} userId 对方的用户id
* @param {boolean} incoming 是否是收到的好友请求
* @return {FriendRequest|null}
*/
getOneFriendRequest(userId, incoming = true) {
return impl.getOneFriendRequest(userId, incoming);
}
/**
* 从服务端加载好友请求,如果有更新,会通过{@link eventEmitter}通知
*/
loadFriendRequestFromRemote() {
impl.loadFriendRequestFromRemote(Long.ZERO);
}
/**
* 获取未读的好友请求数
* @returns {number}
*/
getUnreadFriendRequestCount() {
return impl.getUnreadFriendRequestCount();
}
/**
* 清除好友请求未读状态
*/
clearUnreadFriendRequestStatus() {
impl.clearUnreadFriendRequestStatus();
}
/**
* 删除好友
* @param {string} userId 好友id
* @param {function ()} successCB
* @param {function (number) }failCB
* @returns {Promise<void>}
*/
async deleteFriend(userId, successCB, failCB) {
impl.deleteFriend(userId, successCB, failCB);
}
/**
* 处理好友请求
* @param {string} userId 发送好友请求的用户的id
* @param {boolean} accept true,接受好友请求;false,拒绝好友请求
* @param {string} extra 一些额外信息,可用来实现好友来源等,推荐使用json格式
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async handleFriendRequest(userId, accept, extra, successCB, failCB) {
impl.handleFriendRequest(userId, accept, extra, successCB, failCB);
}
/**
* 判断用户是否被加入了黑名单
* @param userId
* @returns {boolean}
*/
isBlackListed(userId) {
return impl.isBlackListed(userId);
}
/**
* 获取黑名单
* @returns {[string]}
*/
getBlackList() {
return impl.getBlackList();
}
/**
* 设置黑名单
* @param {string} userId 用户id
* @param {boolean} block true,加入黑名单;false,移除黑名单
* @param {function ()} successCB
* @param {function (number)} failCB
*/
setBlackList(userId, block, successCB, failCB) {
impl.setBlackList(userId, block, successCB, failCB);
}
/**
* 获取好友列表,返回的时好友id数组
* @param {boolean} fresh 是否刷新好友信息,如果刷新,且有更新的话,会通过{@link eventEmitter}通知
* @returns {[string]}
*/
getMyFriendList(fresh = false) {
return impl.getMyFriendList(fresh);
}
/**
* 好友列表
* @returns {[Friend]}
*/
getFriendList(fresh = false) {
return impl.getFriendList(fresh);
}
/**
* 获取好友别名
* @param {string} userId
* @returns {string}
*/
getFriendAlias(userId) {
return impl.getFriendAlias(userId);
}
getFriendExtra(userId) {
return impl.getFriendExtra(userId);
}
/**
* 设置好友别名
* @param {string} userId 用户id
* @param {string} alias 别名
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async setFriendAlias(userId, alias, successCB, failCB) {
impl.setFriendAlias(userId, alias, successCB, failCB);
}
/**
* 创建群组
* @param {string | null} groupId 群组id,一般情况下,传null;如果有自己的用户系统,自己维护群信息,那么可以传群id
* @param {number} groupType 群类型,可参考 {@link GroupType }
* @param {string} name 群名称
* @param {string} portrait 群头像的链接
* @param {string} groupExtra 群组扩展信息
* @param {[string]} memberIds 群成员id列表
* @param {string} memberExtra 群组成员扩展信息
* @param {[number]} lines 会话线路,默认传[0]即可
* @param {CreateGroupNotification} notifyContent 通知信息,默认传null,服务端会生成默认通知
* @param {function (string)} successCB 回调通知群id
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async createGroup(groupId, groupType, name, portrait, groupExtra, memberIds = [], memberExtra = '', lines = [0], notifyContent, successCB, failCB) {
impl.createGroup(groupId, groupType, name, portrait == null ? "" : portrait, groupExtra, memberIds, memberExtra, lines, notifyContent, successCB, failCB);
}
/**
* 设置群管理员
* @param {string} groupId 群id
* @param {boolean} isSet true,设置;false,取消设置
* @param {[string]} memberIds 将被设置为管理或取消管理远的群成员的用户id
* @param {[number]} lines 默认传[0]即可
* @param {Object} notifyContent 默认传null即可
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async setGroupManager(groupId, isSet, memberIds, lines, notifyContent, successCB, failCB) {
impl.setGroupManager(groupId, isSet, memberIds, lines, notifyContent, successCB, failCB);
}
/**
* 获取群信息
* @param {string} groupId 群id
* @param {boolean} refresh 是否刷新,如果刷新,且有更新的话,会通过{@link eventEmitter}通知
* @returns {GroupInfo}
*/
getGroupInfo(groupId, refresh = false) {
let info = impl.getGroupInfo(groupId, refresh);
if (!info.portrait) {
info.portrait = this.defaultGroupPortrait(info);
}
return info;
}
/**
* 批量获取群信息
* @param {[string]} groupIds 群id
* @param {boolean} refresh 是否刷新,如果刷新,且有更新的话,会通过{@link eventEmitter}通知
* @returns {[GroupInfo]}
*/
getGroupInfos(groupIds, refresh = false) {
let infos = impl.getGroupInfos(groupIds, refresh);
infos.forEach(info => {
if (!info.portrait) {
info.portrait = this.defaultGroupPortrait(info);
}
})
return infos;
}
/**
* 获取群信息
* @param {string} groupId 群id
* @param {boolean} refresh 是否刷新,如果刷新,且有更新的话,会通过{@link eventEmitter}通知
* @param {function (GroupInfo)} successCB 成功回调
* @param {function (number)} failCB 失败回调
*/
getGroupInfoEx(groupId, refresh = false, successCB, failCB) {
impl.getGroupInfoEx(groupId, refresh, info => {
if (!info.portrait) {
info.portrait = this.defaultGroupPortrait(info);
}
successCB && successCB(info);
}, failCB);
}
/**
* 添加群成员
* @param {string} groupId 群组id
* @param {[string]} memberIds 新添加的群成员id
* @param {string} extra 群成员扩展信息
* @param {[number]} notifyLines
* @param {AddGroupMemberNotification} notifyMessageContent
* @param successCB
* @param failCB
*/
addGroupMembers(groupId, memberIds, extra, notifyLines, notifyMessageContent, successCB, failCB) {
impl.addGroupMembers(groupId, memberIds, extra, notifyLines, notifyMessageContent, successCB, failCB);
}
/**
* 获取群成员id列表
* @param {string} groupId 群id
* @param {boolean} fresh 是否刷新,刷新时,如果有更新,会通过{@link eventEmitter}通知
* @returns {[string]} 群成员用户id列表
*/
getGroupMemberIds(groupId, fresh = false) {
return impl.getGroupMemberIds(groupId, fresh);
}
/**
* 获取群成员信息
* @param {string} groupId 群id
* @param {boolean} fresh 是否刷新
* @returns {[GroupMember]} 群成员信息
*/
getGroupMembers(groupId, fresh = false) {
return impl.getGroupMembers(groupId, fresh);
}
/**
* 根据群成员类型获取群成员列表
* @param {string} groupId
* @param {number} memberType,可选值参考{@link GroupMemberType}
* @return {[GroupMember]} 群成员列表
*/
getGroupMembersByType(groupId, memberType) {
return impl.getGroupMembersByType(groupId, memberType);
}
/**
* 获取群成员信息
* @param {string} groupId 群id
* @param {boolean} fresh 是否强制从服务器更新,如果不刷新则从本地缓存中读取
* @param {function ([GroupMember])} successCB
* @param {function (number)} failCB
*/
getGroupMembersEx(groupId, fresh = false, successCB, failCB) {
impl.getGroupMembersEx(groupId, fresh, successCB, failCB);
}
/**
* 获取单个群成员信息
* @param {string} groupId 群id
* @param {string} memberId 群成员id
* @returns {GroupMember} 群成员信息
*/
getGroupMember(groupId, memberId) {
return impl.getGroupMember(groupId, memberId);
}
/**
* 将用户从群里移除
* @param {string} groupId 群id
* @param {[string]} memberIds 将要被移除的群成员id列表
* @param {[]} notifyLines 默认传[0]即可
* @param {KickoffGroupMemberNotification} notifyMsg 默认传null即可
* @param {function ()} successCB
* @param {function (number)} failCB
*/
kickoffGroupMembers(groupId, memberIds, notifyLines, notifyMsg, successCB, failCB) {
impl.kickoffGroupMembers(groupId, memberIds, notifyLines, notifyMsg, successCB, failCB);
}
/**
* 对群成员禁言
* @param {string} groupId 群id
* @param {boolean} isSet true,禁言;false,取消禁言
* @param {[string]} memberIds 群成员id列表
* @param {[number]} notifyLines 默认传[0]即可
* @param {MessageContent} notifyMsg 默认传null即可
* @param {function ()} successCB 成功回调
* @param {function (number)} failCB 失败回调
*/
muteGroupMembers(groupId, isSet, memberIds = [], notifyLines = [], notifyMsg, successCB, failCB) {
impl.muteOrAllowGroupMembers(groupId, isSet, false, memberIds, notifyLines, notifyMsg, successCB, failCB);
}
/**
* 群全局禁言之后,允许白名单成员发言
* @param {string} groupId 群id
* @param {boolean} isSet true,加入白名单,允许发言;false,移除白名单,禁止发言
* @param {[string]} memberIds 群成员id列表
* @param {[number]} notifyLines 默认传[0]即可
* @param {MessageContent} notifyMsg 默认传null即可
* @param {function ()} successCB 成功回调
* @param {function (number)} failCB 失败回调
*/
allowGroupMembers(groupId, isSet, memberIds = [], notifyLines = [], notifyMsg, successCB, failCB) {
impl.muteOrAllowGroupMembers(groupId, isSet, true, memberIds, notifyLines, notifyMsg, successCB, failCB);
}
/**
* 退出群组
* @param groupId 群id
* @param {[]} lines 默认传[0]即可
* @param {KickoffGroupMemberNotification} notifyMessageContent 默认传null即可
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async quitGroup(groupId, lines, notifyMessageContent, successCB, failCB) {
impl.quitGroup(groupId, lines, notifyMessageContent, successCB, failCB);
}
/**
* 退出群组
* @param groupId 群id
* @param keepMessage 是否保留消息
* @param {[]} lines 默认传[0]即可
* @param {KickoffGroupMemberNotification} notifyMessageContent 默认传null即可
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async quitGroupEx(groupId, keepMessage, lines, notifyMessageContent, successCB, failCB) {
impl.quitGroupEx(groupId, keepMessage, lines, notifyMessageContent, successCB, failCB);
}
/**
* 解散群组
* @param {string} groupId 群组id
* @param {[]} lines 默认传[0]即可
* @param {KickoffGroupMemberNotification} notifyMessageContent 默认传null即可
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async dismissGroup(groupId, lines, notifyMessageContent, successCB, failCB) {
impl.dismissGroup(groupId, lines, notifyMessageContent, successCB, failCB);
}
/**
* 修改群信息
* @param {string} groupId 群id
* @param {number} type 修改信息所属类型,可选值参考{@link ModifyGroupInfoType}
* @param {string} newValue 准备修改成什么
* @param {[number]} lines
* @param {GroupNotificationContent} notifyMessageContent
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async modifyGroupInfo(groupId, type, newValue, lines, notifyMessageContent, successCB, failCB) {
impl.modifyGroupInfo(groupId, type, newValue, lines, notifyMessageContent, successCB, failCB);
}
/**
* 修改我在群组的别名
* @param {string} groupId 群id
* @param {string} alias 别名
* @param lines
* @param notifyMessageContent
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async modifyGroupAlias(groupId, alias, lines, notifyMessageContent, successCB, failCB) {
impl.modifyGroupAlias(groupId, alias, lines, notifyMessageContent, successCB, failCB);
}
/**
* 修改群成员在群组的别名
* @param {string} groupId 群id
* @param {string} memberId 群成员id
* @param {string} alias 别名
* @param lines
* @param notifyMessageContent
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async modifyGroupMemberAlias(groupId, memberId, alias, lines, notifyMessageContent, successCB, failCB) {
impl.modifyGroupMemberAlias(groupId, memberId, alias, lines, notifyMessageContent, successCB, failCB);
}
/**
* 修改群成员在群组的附加信息
* @param {string} groupId 群id
* @param {string} memberId 群成员id
* @param {string} extra 群成员附加信息
* @param lines
* @param notifyMessageContent
* @param successCB
* @param failCB
* @returns {Promise<void>}
*/
async modifyGroupMemberExtra(groupId, memberId, extra, lines, notifyMessageContent, successCB, failCB) {
impl.modifyGroupMemberExtra(groupId, memberId, extra, lines, notifyMessageContent, successCB, failCB);
}
/**
* 转移群主
* @param {string} groupId 群id
* @param {string} newOwner 新群主的id
* @param lines
* @param notifyMessageContent
* @param successCB
* @param failCB
*/
transferGroup(groupId, newOwner, lines, notifyMessageContent, successCB, failCB) {
impl.transferGroup(groupId, newOwner, lines, notifyMessageContent, successCB, failCB);
}
/**
* 获取保存到通讯录的群id列表
* @returns {[string]}
*/
getFavGroups() {
return impl.getFavGroups();
}
/**
* 判断群是否保存到了通讯录
* @param {string} groupId
* @returns {boolean}
*/
isFavGroup(groupId) {
return impl.isFavGroup(groupId);
}
/**
* 将群保存到通讯录或移除通讯录
* @param {string} groupId 群id
* @param {boolean} fav true,保存到通讯录;false,从通讯录移除
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async setFavGroup(groupId, fav, successCB, failCB) {
impl.setFavGroup(groupId, fav, successCB, failCB);
}
/**
* 获取用户设置,保存格式可以理解为:scope + key => value
* @param {number} scope 命名空间,可选值参考{@link UserSettingScope}
* @param {string} key key
* @returns {string} 设置的key对应的value
*/
getUserSetting(scope, key) {
return impl.getUserSetting(scope, key);
}
/**
* 获取某个命名空间下的所有设置
* @param scope 命名空间,可选值参考{@link UserSettingScope}
* @returns {Map} key-value
*/
getUserSettings(scope) {
return impl.getUserSettings(scope);
}
/**
* 设置或更新用户设置
* @param {number} scope 命名空间
* @param {string} key 设置的key
* @param {string} value 设置的value
* @param {function ()} successCB 成功回调
* @param {function (number)} failCB 失败回调
* @returns {Promise<void>}
*/
async setUserSetting(scope, key, value, successCB, failCB) {
impl.setUserSetting(scope, key, value, successCB, failCB);
}
/**
* 修改个人信息
* @param {[ModifyMyInfoEntry]} modifyMyInfoEntries 需要修改的信息列表,pc端,一次只允许修改一个项。
* @param successCB
* @param failCB
*/
modifyMyInfo(modifyMyInfoEntries, successCB, failCB) {
impl.modifyMyInfo(modifyMyInfoEntries, successCB, failCB);
}
/**
* 是否全局免打扰
* @returns {boolean}
*/
isGlobalSlient() {
return impl.isGlobalSlient();
}
/**
* 设置全局免打扰
* @param {boolean} silent
* @param {function ()} successCB
* @param failCB
*/
setGlobalSlient(silent, successCB, failCB) {
impl.setGlobalSlient(silent, successCB, failCB);
}
/**
* 是否隐藏通知详情
* @returns {boolean}
*/
isHiddenNotificationDetail() {
return impl.isHiddenNotificationDetail();
}
/**
* 设置或取消设置隐藏通知详情
* @param {boolean} hide 是否隐藏通知详情
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async setHiddenNotificationDetail(hide, successCB, failCB) {
impl.setHiddenNotificationDetail(hide, successCB, failCB);
}
/**
* 是否隐藏群成员昵称
* @param {string} groupId 群id
* @returns {boolean}
*/
isHiddenGroupMemberName(groupId) {
return impl.isHiddenGroupMemberName(groupId);
}
/**
* 设置或取消设置隐藏群成员昵称
* @param {string} groupId 群id
* @param {boolean} hide 是否隐藏
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async setHiddenGroupMemberName(groupId, hide, successCB, failCB) {
impl.setHiddenGroupMemberName(groupId, hide, successCB, failCB);
}
/**
* 加入聊天室
* @param {string} chatroomId 聊天室id
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async joinChatroom(chatroomId, successCB, failCB) {
impl.joinChatroom(chatroomId, successCB, failCB);
}
/**
* 退出聊天室
* @param {string} chatroomId 聊天室id
* @param {function ()} successCB
* @param {function (number)} failCB
* @returns {Promise<void>}
*/
async quitChatroom(chatroomId, successCB, failCB) {
impl.quitChatroom(chatroomId, successCB, failCB);
}
/**
* 获取聊天室信息
* @param {string} chatroomId 聊天是id
* @param {number} updateDt 传当前时间对应的毫秒数
* @param {function (ChatRoomInfo)} successCB
* @param failCB
* @returns {Promise<void>}
*/
async getChatroomInfo(chatroomId, updateDt, successCB, failCB) {
return impl.getChatroomInfo(chatroomId, updateDt, successCB, failCB);
}
/**
* 获取聊天室成员信息
* @param {string} chatroomId 聊天室id
* @param {number} maxCount 最多获取多少个聊天室成员信息
* @param {function (ChatRoomMemberInfo)} successCB
* @param {function (number)} failCB