JMSGGroup.h 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902
  1. /*
  2. * | | | | \ \ / / | | | | / _______|
  3. * | |____| | \ \/ / | |____| | / /
  4. * | |____| | \ / | |____| | | | _____
  5. * | | | | / \ | | | | | | |____ |
  6. * | | | | / /\ \ | | | | \ \______| |
  7. * | | | | /_/ \_\ | | | | \_________|
  8. *
  9. * Copyright (c) 2011 ~ 2015 Shenzhen HXHG. All rights reserved.
  10. */
  11. #import <Foundation/Foundation.h>
  12. #import <JMessage/JMSGConstants.h>
  13. @class JMSGUser,JMSGApplyJoinGroupEvent;
  14. /*!
  15. * 群成员信息类
  16. *
  17. * #### 可通过 [JMSGGroup memberInfoList:]和 [JMSGGroup memberInfoWithUsername:appkey:] 两个接口获取群成员信息
  18. */
  19. @interface JMSGGroupMemberInfo : NSObject
  20. /// 成员用户信息
  21. @property(nonatomic, strong, readonly) JMSGUser *JMSG_NULLABLE user;
  22. /// 入群时间
  23. @property(nonatomic, assign, readonly) UInt64 ctime;
  24. /// 群昵称
  25. @property(nonatomic, strong, readonly) NSString *JMSG_NULLABLE groupNickname;
  26. /// 群组成员的身份
  27. @property(nonatomic, assign, readonly) JMSGGroupMemberType memberType;
  28. /*!
  29. * @abstract 获取群成员的展示名
  30. *
  31. * @discussion 展示优先级:群昵称 > 好友备注(user.noteName) > 用户昵称(user.nickname) > 用户名(user.username)
  32. *
  33. * #### 同接口 [JMSGGroup memberDisplayName:] 相同效果
  34. */
  35. - (NSString *JMSG_NULLABLE)displayName;
  36. @end
  37. /*!
  38. * 成员禁言信息类
  39. *
  40. * @discussion 如果是群组成员禁言,则可通过 [JMSGGroup getGroupMemberSilenceList:]和 [JMSGGroup getGroupMemberSilence:appKey:handler:] 两个接口获取禁言信息;如果是聊天室成员禁言,则可通过 [JMSGChatRoom getChatRoomSilencesWithStart:count:handler:] 和 [JMSGChatRoom getChatRoomMemberSilenceWithUsername:appKey:handler:] 两个接口获取禁言信息
  41. */
  42. @interface JMSGMemberSilenceInfo : NSObject
  43. /// 成员用户信息
  44. @property(nonatomic, strong, readonly) JMSGUser *JMSG_NULLABLE user;
  45. /// 群成员禁言开始时间
  46. @property(nonatomic, assign, readonly) UInt64 silenceStartTime;
  47. /// 群成员禁言结束时间
  48. @property(nonatomic, assign, readonly) UInt64 silenceEndTime;
  49. @end
  50. /*!
  51. * 群公告类
  52. */
  53. @interface JMSGGroupAnnouncement : NSObject
  54. /// 公告 id
  55. @property(nonatomic, assign, readonly) UInt32 announcementId;
  56. /// 群组 id
  57. @property(nonatomic, strong, readonly) NSString *JMSG_NONNULL gid;
  58. /// 公告内容
  59. @property(nonatomic, strong, readonly) NSString *JMSG_NULLABLE text;
  60. /// 发布者
  61. @property(nonatomic, strong, readonly) JMSGUser *JMSG_NULLABLE publisher;
  62. /// 发布时间
  63. @property(nonatomic, assign, readonly) UInt64 publishTime;
  64. /// 是否置顶
  65. @property(nonatomic, assign, readonly) BOOL isTop;
  66. /// 置顶时间
  67. @property(nonatomic, assign, readonly) UInt64 topTime;
  68. /*!
  69. * @abstract 公告对象转换为 JSON 字符串的表示。
  70. */
  71. - (NSString *JMSG_NULLABLE)toJsonString;
  72. /*!
  73. * @abstract JSON 字符串 转换为 公告对象。
  74. *
  75. * @discussion 失败时返回 nil
  76. */
  77. + (JMSGGroupAnnouncement *JMSG_NULLABLE)fromJson:(NSString *JMSG_NONNULL)json;
  78. @end
  79. /*!
  80. * 群信息类(此类仅用于修改群信息、创建群、群信息展示)
  81. *
  82. * #### 注意:
  83. *
  84. * 如果想要获取群的相关属性值、调用相关接口,需要通过 gid 获取到 JMSGGroup 对象再使用;
  85. *
  86. * 本类中可读可写属性表示可以用于群信息修改、创建群传值,只读属性说明是不允许客户端修改的,只做展示;
  87. */
  88. @interface JMSGGroupInfo : NSObject
  89. /** 群 id */
  90. @property(nonatomic, strong, readonly) NSString *JMSG_NONNULL gid;
  91. /** 群名称 */
  92. @property(nonatomic, strong, readwrite) NSString *JMSG_NONNULL name;
  93. /** 群描述 */
  94. @property(nonatomic, strong, readwrite) NSString *JMSG_NONNULL desc;
  95. /** 群头像数据,此属性只用户修改群信息,切勿从此类拿来此属性来展示 */
  96. @property(nonatomic, strong, readwrite) NSData *JMSG_NONNULL avatarData;
  97. /** 群头像的媒体文件ID */
  98. @property(nonatomic, strong, readonly) NSString *JMSG_NONNULL avatar;
  99. /** 群组类型,私有、公开,注意:仅限于创建群组时设置,创建成功之后不允许修改群类型*/
  100. @property(nonatomic, assign, readwrite) JMSGGroupType groupType;
  101. /** 群组人数上限,注意:仅限于创建群组时可以设置,必须大于 2 */
  102. @property(nonatomic, strong, readwrite) NSString *JMSG_NONNULL maxMemberCount;
  103. /** 群组创建时间*/
  104. @property(nonatomic, assign, readonly) SInt64 ctime;
  105. @end
  106. /*!
  107. * 群组
  108. *
  109. * 群组表示一组用户, 是群组聊天的聊天对象.
  110. *
  111. * 主要包含两类 API: 群组信息维护, 群组成员变更.
  112. */
  113. @interface JMSGGroup : NSObject
  114. JMSG_ASSUME_NONNULL_BEGIN
  115. ///----------------------------------------------------
  116. /// @name Group Info Maintenance 群组信息维护
  117. ///----------------------------------------------------
  118. /*!
  119. * @abstract 创建群组(只能创建私有群)
  120. *
  121. * @param groupName 群组名称
  122. * @param groupDesc 群组描述信息
  123. * @param usernameArray 初始成员列表。NSArray 里的类型是 NSString
  124. * @param handler 结果回调。正常返回 resultObject 的类型是 JMSGGroup。
  125. *
  126. * @discussion 向服务器端提交创建群组请求,返回生成后的群组对象.
  127. * 返回群组对象, 群组ID是App 需要关注的, 是后续各种群组维护的基础.
  128. */
  129. + (void)createGroupWithName:(NSString * JMSG_NULLABLE )groupName
  130. desc:(NSString *JMSG_NULLABLE)groupDesc
  131. memberArray:(NSArray JMSG_GENERIC(__kindof NSString *) *JMSG_NULLABLE)usernameArray
  132. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  133. /*!
  134. * @abstract 创建群组(可创建私有群、公开群)
  135. *
  136. * @param groupInfo 群信息类,如:群名、群类型等,详细请查看 JMSGGroupInfo 类
  137. * @param usernameArray 初始成员列表。NSArray 里的类型是 NSString
  138. * @param handler 结果回调。正常返回 resultObject 的类型是 JMSGGroup。
  139. *
  140. * @discussion 向服务器端提交创建群组请求,返回生成后的群组对象.
  141. * 返回群组对象, 群组ID是App 需要关注的, 是后续各种群组维护的基础.
  142. */
  143. + (void)createGroupWithGroupInfo:(JMSGGroupInfo *)groupInfo
  144. memberArray:(NSArray JMSG_GENERIC(__kindof NSString *) *JMSG_NULLABLE)usernameArray
  145. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  146. /*!
  147. * @abstract 更新群组信息
  148. *
  149. * @param groupId 待更新的群组ID
  150. * @param groupName 新名称
  151. * @param groupDesc 新描述
  152. * @param handler 结果回调. 正常返回时, resultObject 为 nil.
  153. *
  154. * @discussion 注意:name 和 desc 不允许传空字符串
  155. */
  156. + (void)updateGroupInfoWithGroupId:(NSString *)groupId
  157. name:(NSString *JMSG_NULLABLE)groupName
  158. desc:(NSString *JMSG_NULLABLE)groupDesc
  159. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  160. /*!
  161. * @abstract 更新群信息(统一字段上传)
  162. *
  163. * @param gid 群组 id
  164. * @param groupInfo 群信息类,详细请查看 JMSGGroupInfo 类
  165. * @param handler 结果回调. 正常返回时, resultObject 为 nil.
  166. *
  167. * @discussion 注意:修改群名称和群描述时参数不允许传空字符串,群类型不允许修改
  168. */
  169. + (void)updateGroupInfoWithGid:(NSString *)gid
  170. groupInfo:(JMSGGroupInfo *)groupInfo
  171. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  172. /*!
  173. * @abstract 更新群头像(支持传图片格式)
  174. *
  175. * @param groupId 待更新的群组ID
  176. * @param avatarData 头像数据
  177. * @param avatarFormat 头像格式,可以为空,不包括"."
  178. * @param handler 回调
  179. *
  180. * @discussion 头像格式参数直接填格式名称,不要带点。正确:@"png",错误:@".png"
  181. */
  182. + (void)updateGroupAvatarWithGroupId:(NSString *JMSG_NONNULL)groupId
  183. avatarData:(NSData *JMSG_NONNULL)avatarData
  184. avatarFormat:(NSString *JMSG_NULLABLE)avatarFormat
  185. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  186. /*!
  187. * @abstract 获取群组信息
  188. *
  189. * @param groupId 待获取详情的群组ID
  190. * @param handler 结果回调. 正常返回时 resultObject 类型是 JMSGGroup.
  191. *
  192. * @discussion 如果考虑性能损耗, 在群聊时获取群组信息, 可以获取 JMSGConversation -> target 属性.
  193. */
  194. + (void)groupInfoWithGroupId:(NSString *)groupId
  195. completionHandler:(JMSGCompletionHandler)handler;
  196. /*!
  197. * @abstract 获取我的群组列表
  198. *
  199. * @param handler 结果回调。正常返回时 resultObject 的类型是 NSArray(NSNumber),数组里的成员类型是JMSGGroup的gid
  200. *
  201. * @discussion 该接口总是向服务器端发起请求。
  202. */
  203. + (void)myGroupArray:(JMSGCompletionHandler)handler;
  204. /*!
  205. * @abstract 获取所有设置群消息屏蔽的群组
  206. *
  207. * @param handler 结果回调。回调参数:
  208. *
  209. * - resultObject 类型为 NSArray,数组里成员的类型为 JMSGGroup
  210. * - error 错误信息
  211. *
  212. * 如果 error 为 nil, 表示设置成功
  213. * 如果 error 不为 nil,表示设置失败
  214. *
  215. * @discussion 从服务器获取,返回所有设置群消息屏蔽的群组。
  216. */
  217. + (void)shieldList:(JMSGCompletionHandler)handler;
  218. /*!
  219. * @abstract 分页获取 appkey 下所有公开群信息
  220. *
  221. * @param appkey 群组所在的 AppKey,不填则默认为当前应用 AppKey
  222. * @param start 分页获取的下标,第一页从 index = 0 开始
  223. * @param count 每一页的数量,最大值为500
  224. * @param handler 结果回调,NSArray<JMSGGroupInfo>
  225. *
  226. * #### 注意:
  227. *
  228. * 返回数据中不是 JMSGGroup 类型,而是 JMSGGroupInfo 类型,只能用于展示信息,如果想要调用相关群组 API 接口则需要通过 gid 获取到 JMSGGroup 对象才可以调用
  229. */
  230. + (void)getPublicGroupInfoWithAppKey:(NSString *JMSG_NULLABLE)appkey
  231. start:(NSInteger)start
  232. count:(NSInteger)count
  233. completionHandler:(JMSGCompletionHandler)handler;
  234. /*!
  235. * @abstract 申请加入群组
  236. *
  237. * @param gid 群组 gid
  238. * @param reason 申请原因
  239. * @param handler 结果回调
  240. *
  241. * @discussion 只有公开群需要申请才能加入,私有群不需要申请。
  242. */
  243. + (void)applyJoinGroupWithGid:(NSString *JMSG_NONNULL)gid
  244. reason:(NSString *JMSG_NULLABLE)reason
  245. completionHandler:(JMSGCompletionHandler)handler;
  246. /*!
  247. * @abstract 管理员审批入群申请
  248. *
  249. * @patam eventId 入取申请事件的 id,详情请查看 JMSGApplyJoinGroupEvent 类
  250. * @param gid 群组 gid
  251. * @param joinUser 入群的用户
  252. * @param applyUser 发起申请的的用户,如果是主动申请入群则和 member 是相同的
  253. * @param isAgree 是否同意申请,YES : 同意, NO: 不同意
  254. * @param reason 拒绝申请的理由,选填
  255. * @param handler 结果回调
  256. *
  257. * @discussion 只有管理员才有权限审批入群申请,SDK 不会保存申请入群事件(JMSGApplyJoinGroupEvent),上层可以自己封装再保存,或则归档直接保存,以便此接口取值调用。
  258. */
  259. + (void)processApplyJoinGroupEventID:(NSString *JMSG_NONNULL)eventId
  260. gid:(NSString *JMSG_NONNULL)gid
  261. joinUser:(JMSGUser *JMSG_NONNULL)joinUser
  262. applyUser:(JMSGUser *JMSG_NONNULL)applyUser
  263. isAgree:(BOOL)isAgree
  264. reason:(NSString *JMSG_NULLABLE)reason
  265. handler:(JMSGCompletionHandler)handler;
  266. /*!
  267. * @abstract 管理员审批入群申请(批量接口)
  268. *
  269. * @patam events 入取申请事件的 eventId 数组,详情请查看 JMSGApplyJoinGroupEvent 类
  270. * @param isAgree 是否同意申请,YES : 同意, NO: 不同意
  271. * @param reason 拒绝申请的理由,选填
  272. * @param isSendInviter 是否将结果通知给邀请方,默认是 NO
  273. * @param handler 结果回调
  274. *
  275. * @discussion 批量处理接口,event 下包含的所有被邀请者会被一起审批处理。只有管理员才有权限审批入群申请。
  276. */
  277. + (void)processApplyJoinGroupEvents:(NSArray <__kindof NSString *>*)events
  278. isAgree:(BOOL)isAgree
  279. reason:(NSString *JMSG_NULLABLE)reason
  280. sendInviter:(BOOL)isSendInviter
  281. handler:(JMSGCompletionHandler)handler;
  282. /*!
  283. * @abstract 解散群组
  284. *
  285. * @patam gid 需要解散的群组 id
  286. * @param handler 结果回调,error = nil 表示操作成功
  287. *
  288. * @discussion 只有群主才有权限解散群。
  289. */
  290. + (void)dissolveGroupWithGid:(NSString *)gid handler:(JMSGCompletionHandler)handler;
  291. ///----------------------------------------------------
  292. /// @name Group basic fields 群组基本属性
  293. ///----------------------------------------------------
  294. /*!
  295. * @abstract 群组ID
  296. *
  297. * @discussion 该ID由服务器端生成,全局唯一。可以用于服务器端 API。
  298. */
  299. @property(nonatomic, strong, readonly) NSString *gid;
  300. /*!
  301. * @abstract 群组名称
  302. *
  303. * @discussion 可用于群组聊天的展示名称
  304. */
  305. @property(nonatomic, copy, readonly) NSString * JMSG_NULLABLE name;
  306. /*!
  307. * @abstract 群组描述信息
  308. */
  309. @property(nonatomic, copy, readonly) NSString * JMSG_NULLABLE desc;
  310. /*!
  311. * @abstract 群组等级
  312. *
  313. * @discussion 不同等级的群组,人数上限不同。当前默认等级 4,人数上限 200。客户端不可更改。
  314. */
  315. @property(nonatomic, strong, readonly) NSNumber *level;
  316. /*!
  317. * @abstract 群组头像(媒体文件ID)
  318. *
  319. * @discussion 此文件ID仅用于内部更新,不支持外部URL。
  320. */
  321. @property(nonatomic, strong, readonly) NSString * JMSG_NULLABLE avatar;
  322. /*!
  323. * @abstract 群组设置标志位
  324. *
  325. * @discussion 这是一个内部状态标志,对外展示仅用于调试目的。客户端不可更改。
  326. */
  327. @property(nonatomic, strong, readonly) NSNumber *flag;
  328. /*!
  329. * @abstract 群组类型
  330. *
  331. * @discussion 目前群组类型有:公开群、私有群。公开群是有权限设置,入群需要群主审核同意方可入群。
  332. */
  333. @property(nonatomic, assign, readonly) JMSGGroupType groupType;
  334. /*!
  335. * @abstract 群主(用户的 username)
  336. *
  337. * @discussion 有一套确认群主的策略。简单地说,群创建人是群主;如果群主退出,则是第二个加入的人,以此类似。客户端不可更改。
  338. */
  339. @property(nonatomic, copy, readonly) NSString *owner;
  340. /*!
  341. * @abstract 群主的appKey
  342. *
  343. * @discussion 当有跨应用群成员与群主同名(username相同)时,可结合用这个ownerAppKey来判断群主。
  344. */
  345. @property(nonatomic, copy, readonly) NSString *ownerAppKey;
  346. /*!
  347. * @abstract 群组人数上限,
  348. *
  349. * @discussion 表示当前群组人数上限,客户端不可更改。。
  350. */
  351. @property(nonatomic, strong, readonly) NSString *maxMemberCount;
  352. /*!
  353. * @abstract 该群是否已被设置为免打扰
  354. *
  355. * @discussion YES:是 , NO: 否
  356. */
  357. @property(nonatomic, assign, readonly) BOOL isNoDisturb;
  358. /*!
  359. * @abstract 该群是否已被设置为消息屏蔽
  360. *
  361. * @discussion YES:是 , NO: 否
  362. */
  363. @property(nonatomic, assign, readonly) BOOL isShieldMessage;
  364. ///----------------------------------------------------
  365. /// @name Group members maintenance 群组成员维护
  366. ///----------------------------------------------------
  367. /*!
  368. * @abstract 获取群组成员列表(同步接口,建议使用异步接口)
  369. *
  370. * @return 成员列表. NSArray 里成员类型是 JMSGUser.
  371. *
  372. * @discussion 一般在群组详情界面调用此接口,展示群组的所有成员列表。
  373. * 本接口只是在本地请求成员列表,不会发起服务器端请求。
  374. */
  375. - (NSArray JMSG_GENERIC(__kindof JMSGUser *)*)memberArray __attribute__((deprecated("Use - memberInfoList:")));
  376. /*!
  377. * @abstract 获取群组成员列表(建议使用 [JMSGGroup memberInfoList:] 接口)
  378. *
  379. * @handler 成员列表. NSArray 里成员类型是 JMSGUser.
  380. *
  381. * @discussion 一般在群组详情界面调用此接口,展示群组的所有成员列表。
  382. * 本接口只是在本地请求成员列表,不会发起服务器端请求。
  383. */
  384. - (void)memberArrayWithCompletionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  385. /*!
  386. * @abstract 获取所有群成员信息列表
  387. *
  388. * @handler 成员列表. 类型为 NSArray,里面元素为 JMSGGroupMemberInfo.
  389. *
  390. * @discussion 返回数据中的 JMSGGroupMemberInfo 包含了成员 user 信息、入群时间、群昵称等
  391. */
  392. - (void)memberInfoList:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  393. /*!
  394. * @abstract 获取单个群成员信息
  395. *
  396. * @param username 目标用户 username
  397. * @param appkey 目标用户 appkey,不传则默认本应用 appkey
  398. * @return 群成员信息对象
  399. *
  400. * @discussion JMSGGroupMemberInfo 包含了成员 user 信息、入群时间、群昵称等
  401. */
  402. - (JMSGGroupMemberInfo *JMSG_NULLABLE)memberInfoWithUsername:(NSString *JMSG_NONNULL)username
  403. appkey:(NSString *JMSG_NULLABLE)appkey;
  404. /*!
  405. * @abstract 修改群组类型
  406. *
  407. * @param type 群类型,公开群、私有群
  408. * @param handler 结果回调。error = nil 表示成功
  409. *
  410. * @discussion 对于已经创建的群组,可以通过此接口来修改群组的类型
  411. */
  412. - (void)changeGroupType:(JMSGGroupType)type handler:(JMSGCompletionHandler)handler;
  413. /*!
  414. * @abstract 设置群组消息免打扰(支持跨应用设置)
  415. *
  416. * @param isNoDisturb 是否免打扰 YES:是 NO: 否
  417. * @param handler 结果回调。回调参数:
  418. *
  419. * - resultObject 相应对象
  420. * - error 错误信息
  421. *
  422. * 如果 error 为 nil, 表示设置成功
  423. * 如果 error 不为 nil,表示设置失败
  424. *
  425. * @discussion 针对单个群组设置免打扰
  426. * 这个接口支持跨应用设置免打扰
  427. */
  428. - (void)setIsNoDisturb:(BOOL)isNoDisturb handler:(JMSGCompletionHandler)handler;
  429. /*!
  430. * @abstract 设置群组消息屏蔽
  431. *
  432. * @param isShield 是否群消息屏蔽 YES:是 NO: 否
  433. * @param handler 结果回调。回调参数: error 为 nil, 表示设置成功
  434. *
  435. * @discussion 针对单个群组设置群消息屏蔽
  436. */
  437. - (void)setIsShield:(BOOL)isShield handler:(JMSGCompletionHandler)handler;
  438. /*!
  439. * @abstract 设置成员群昵称
  440. *
  441. * @param nickname 群昵称
  442. * @param username 目标用户的 username
  443. * @param appKey 目标用户的 appKey,若传入空则默认使用本应用appKey
  444. */
  445. - (void)setGroupNickname:(NSString *JMSG_NULLABLE)nickname
  446. username:(NSString *JMSG_NONNULL)username
  447. appKey:(NSString *JMSG_NULLABLE)appKey
  448. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  449. /*!
  450. * @abstract 获取成员的群昵称
  451. *
  452. * @param username 群成员 username
  453. * @patam appKey 群成员 appKey,不传则默认是本应用 appkey
  454. * @return 群昵称
  455. *
  456. * @discussion 还可以通过获取群成员信息 JMSGGroupMemberInfo 来获取群昵称
  457. */
  458. - (NSString *JMSG_NULLABLE)groupNicknameWithUsername:(NSString *)username
  459. appKey:(NSString *JMSG_NULLABLE)appKey;
  460. /*!
  461. * @abstract 群成员禁言设置(接口已过期)
  462. *
  463. * @param isSilence 是否禁言, YES:是 NO: 否
  464. * @param username 待设置的用户的 username
  465. * @param appKey 带待设置的用户的 appKey,若传入空则默认使用本应用appKey
  466. * @param handler 结果回调,error=nil,则表示成功
  467. *
  468. * @discussion 接口已过期,请使用 [JMSGGroup addGroupSilenceWithTime:usernames:appKey:handler] 接口。新老接口请不要混用。
  469. */
  470. - (void)setGroupMemberSilence:(BOOL)isSilence
  471. username:(NSString *JMSG_NONNULL)username
  472. appKey:(NSString *JMSG_NULLABLE)appKey
  473. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler __attribute__((deprecated("Use - addGroupSilenceWithTime:")));
  474. /*!
  475. * @abstract 设置群成员禁言(可设置禁言时间)
  476. *
  477. * @param silenceTime 禁言时间戳,单位:毫秒,必须不小于5分钟,不大于1年
  478. * @param usernames 用户的 username 数组,一次最多500人
  479. * @param appkey 用户的 appkey,若传入空则默认使用本应用appKey,同一次设置的 usernames 必须在同一个 AppKey 下
  480. * @param handler 结果回调,error = nil 时,表示成功
  481. *
  482. * @discussion 只有群主和管理员可设置;设置成功的话上层会收到相应下发事件。
  483. *
  484. * @since 3.8.1
  485. */
  486. - (void)addGroupSilenceWithTime:(SInt64)silenceTime
  487. usernames:(NSArray *JMSG_NONNULL)usernames
  488. appKey:(NSString *JMSG_NULLABLE)appkey
  489. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  490. /*!
  491. * @abstract 取消群成员禁言
  492. *
  493. * @param usernames 用户的 username 数组,一次最多500人
  494. * @param appkey 用户的 appkey,若传入空则默认使用本应用appKey,同一次设置的 usernames 必须在同一个 AppKey 下
  495. * @param handler 结果回调,error = nil 时,表示成功
  496. *
  497. * @discussion 只有群主和管理员可设置;取消成功的话上层会收到相应下发事件。
  498. *
  499. * @since 3.8.1
  500. */
  501. - (void)deleteGroupSilenceWithUsernames:(NSArray *JMSG_NONNULL)usernames
  502. appKey:(NSString *JMSG_NULLABLE)appkey
  503. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  504. /*!
  505. * @abstract 判断用户在该群内是否被禁言(已过期,请使用 [JMSGGroup getGroupMemberSilenceWithUsername:] 方法)
  506. *
  507. * @param username 待判断用户的用户名
  508. * @param appKey 待判断用户的appKey,若传入空则默认使用本应用appKey
  509. */
  510. - (BOOL)isSilenceMemberWithUsername:(NSString *JMSG_NONNULL)username
  511. appKey:(NSString *JMSG_NULLABLE)appKey __attribute__((deprecated("已过期,请使用 - getGroupMemberSilenceWithUsername:appKey:")));
  512. /*!
  513. * @abstract 获取禁言状态
  514. *
  515. * @param username 用户名
  516. * @param appKey 用户所在应用 AppKey,不填这默认本应用
  517. * @param handler 结果回调,resultObject 是 JMSGMemberSilenceInfo 类型;
  518. * 若 error == nil && resultObject != nil,该成员已被禁言;
  519. * 若 error == nil && resultObject == nil,该成员未被禁言;
  520. * 若 error != nil ,请求失败。
  521. *
  522. * @discussion 返回的 JMSGMemberSilenceInfo 对象有 user 信息,通过 [JMSGGroup memberInfoWithUsername:appkey:] 可再次获取到 JMSGGroupMemberInfo 信息
  523. *
  524. * @since 3.8.1
  525. */
  526. - (void)getGroupMemberSilenceWithUsername:(NSString *JMSG_NONNULL)username
  527. appKey:(NSString *JMSG_NULLABLE)appKey
  528. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  529. /*!
  530. * @abstract 禁言列表(已过期,请使用 [JMSGGroup getGroupSilenceList:] 方法)
  531. *
  532. * @return 禁言的成员列表. NSArray 里成员类型是 JMSGGroupMemberInfo
  533. *
  534. * @discussion 返回的是 JMSGUser 对象,无法直接查看禁言时间
  535. */
  536. - (NSArray JMSG_GENERIC(__kindof JMSGUser *)*)groupSilenceMembers __attribute__((deprecated("已过期,请使用 - getGroupMemberSilenceList:")));
  537. /*!
  538. * @abstract 禁言列表
  539. *
  540. * @param handler 结果回调,resultObject 是 NSArray 类型,元素是 JMSGMemberSilenceInfo
  541. *
  542. * @discussion 返回的 JMSGMemberSilenceInfo 对象有 user 信息,通过 [JMSGGroup memberInfoWithUsername:appkey:] 可再次获取到 JMSGGroupMemberInfo 信息
  543. *
  544. * @since 3.8.1
  545. */
  546. - (void)getGroupMemberSilenceList:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  547. /*!
  548. * @abstract 获取群公告列表
  549. *
  550. * @param handler 结果回调。resultObject 是 NSArray 类型,元素是 JMSGGroupAnnouncement
  551. *
  552. * @since 3.8.0
  553. */
  554. - (void)groupAnnouncementList:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  555. /*!
  556. * @abstract 发布群公告
  557. *
  558. * @param announcement 公告内容,大小必须在 1KB 以内
  559. * @param sendMessage 发布成功后是否需要发一条消息通知群成员,默认:YES
  560. * @param handler 结果回调。resultObject 为 JMSGGroupAnnouncement对象, error 为 nil 表示成功.
  561. *
  562. * @discussion
  563. * #### 注意:
  564. *
  565. * 如果 sendMessage = NO,则 SDK 不会自动发送消息,上层可以在回调或者收到事件后,自己发送消息;
  566. * 如果 sendMessage = YES,则在发布公告成功后 SDK 会自动在群里发布一条文本消息,文本内容就是公告内容,另外消息的 extras 里会附带公告的相关数据,上层可根据此数据将 message 对应到相应的公告, extras 里的 key-value 如下,
  567. *
  568. * ```
  569. * key(String) = "jmessage_group_announcement"
  570. * value(JsonString) = {
  571. * "id" : 公告 id,
  572. * "text" : 公告内容 text,
  573. * "publisher_uid" : 发布者 uid,
  574. * "ctime" : 公告发布时间,
  575. * "isTop" : 是否置顶,
  576. * "topTime" : 置顶时间,
  577. * "gid" : 群 gid
  578. * }
  579. * ```
  580. * 群公告最多100条,发布公告后会有对应事件下发,上层通过 [JMSGGroupDelegate onReceiveGroupAnnouncementEvents:] 监听
  581. *
  582. * @since 3.8.0
  583. */
  584. - (void)publishGroupAnnouncement:(NSString *JMSG_NONNULL)announcement
  585. sendMessage:(BOOL)sendMessage
  586. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  587. /*!
  588. * @abstract 删除群公告
  589. *
  590. * @param announcementID 公告id
  591. * @param handler 结果回调。error 为 nil 表示成功.
  592. *
  593. * @discussion 删除公告后会有对应事件下发,上层通过 [JMSGGroupDelegate onReceiveGroupAnnouncementEvents:] 监听
  594. * @since 3.8.0
  595. */
  596. - (void)deleteGroupAnnouncement:(NSString *JMSG_NONNULL)announcementID
  597. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  598. /*!
  599. * @abstract 置顶/取消置顶 群公告
  600. *
  601. * @param isTop 置顶参数,YES:置顶,NO:取消置顶
  602. * @param ID 公告 id
  603. * @param handler 结果回调。error 为 nil 表示成功.
  604. *
  605. * @discussion 置顶公告后会有对应事件下发,上层通过 [JMSGGroupDelegate onReceiveGroupAnnouncementEvents:] 监听
  606. * @since 3.8.0
  607. */
  608. - (void)setGroupAnnouncementTop:(BOOL)isTop
  609. announcementID:(NSString *JMSG_NONNULL)ID
  610. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  611. /*!
  612. * @abstract 群黑名单列表
  613. *
  614. * @handler 结果回调. resultObject 是 NSArray 类型,元素是 JMSGUser
  615. *
  616. * @since 3.8.0
  617. */
  618. - (void)groupBlacklistHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  619. /*!
  620. * @abstract 添加群黑名单
  621. *
  622. * @param usernames 用户名列表
  623. * @param appKey 用户 appKey,usernames 中的所有用户必须在同一个 AppKey 下,不填则默认为本应用 appKey
  624. * @param handler 结果回调。error 为 nil 表示成功.
  625. *
  626. * @discussion 黑名单上限100个,超出将无法设置成功,被拉入黑名单用户会被主动踢出群组,且无法再次加入.
  627. * @since 3.8.0
  628. */
  629. - (void)addGroupBlacklistWithUsernames:(NSArray <__kindof NSString *>*)usernames
  630. appKey:(NSString *JMSG_NULLABLE)appKey
  631. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  632. /*!
  633. * @abstract 删除群黑名单
  634. *
  635. * @param usernames 用户名列表
  636. * @param appKey 用户 appKey,usernames 中的所有用户必须在同一个 AppKey 下,不填则默认为本应用 appKey
  637. * @param handler 结果回调。error 为 nil 表示成功.
  638. *
  639. * @since 3.8.0
  640. */
  641. - (void)deleteGroupBlacklistWithUsernames:(NSArray <__kindof NSString *>*)usernames
  642. appKey:(NSString *JMSG_NULLABLE)appKey
  643. handler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  644. /*!
  645. * @abstract 管理员列表
  646. *
  647. * @return 管理员列表. NSArray 里成员类型是 JMSGUser
  648. *
  649. * @discussion 注意:返回列表中不包含群主;仅在获取群成员成功后此接口才有效
  650. */
  651. - (NSArray JMSG_GENERIC(__kindof JMSGUser *)*)groupAdminMembers;
  652. /*!
  653. * @abstract 判断用户是否是管理员
  654. *
  655. * @param username 待判断用户的用户名
  656. * @param appKey 待判断用户的appKey,若传入空则默认使用本应用appKey
  657. */
  658. - (BOOL)isAdminMemberWithUsername:(NSString *JMSG_NONNULL)username
  659. appKey:(NSString *JMSG_NULLABLE)appKey;
  660. /*!
  661. * @abstract 添加管理员
  662. *
  663. * @param username 用户名
  664. * @param appkey 用户 AppKey,不填则默认为本应用 AppKey
  665. * @param handler 结果回调。error 为 nil 表示成功.
  666. *
  667. * @discussion 注意:非 VIP 应用最多设置 15 个管理员,不包括群主本身
  668. */
  669. - (void)addGroupAdminWithUsername:(NSString *JMSG_NONNULL)username
  670. appKey:(NSString *JMSG_NULLABLE)appkey
  671. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  672. /** @abstract 批量添加管理员*/
  673. - (void)addGroupAdminWithUsernames:(NSArray <__kindof NSString *>*)usernames
  674. appKey:(NSString *JMSG_NULLABLE)appkey
  675. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  676. /*!
  677. * @abstract 删除管理员
  678. *
  679. * @param username 用户名
  680. * @param appkey 用户 AppKey,不填则默认为本应用 AppKey
  681. * @param handler 结果回调。error 为 nil 表示成功.
  682. */
  683. - (void)deleteGroupAdminWithUsername:(NSString *)username
  684. appKey:(NSString *JMSG_NULLABLE)appkey
  685. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  686. /** @abstract 批量删除管理员*/
  687. - (void)deleteGroupAdminWithUsernames:(NSArray <__kindof NSString *>*)usernames
  688. appKey:(NSString *JMSG_NULLABLE)appkey
  689. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  690. /*!
  691. * @abstract 添加群组成员
  692. *
  693. * @param usernameArray 用户名数组。数组里的成员类型是 NSString
  694. * @param handler 结果回调。正常返回时 resultObject 为 nil.
  695. */
  696. - (void)addMembersWithUsernameArray:(NSArray JMSG_GENERIC(__kindof NSString *) *)usernameArray
  697. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  698. /*!
  699. * @abstract 添加群组跨应用成员
  700. *
  701. * @param usernameArray 用户名数组。数组里的成员类型是 NSString
  702. * @param userAppKey 用户的 AppKey,这批添加的成员必须在同一个 AppKey 下的用户
  703. *
  704. * @param handler 结果回调。正常返回时 resultObject 为 nil.
  705. */
  706. - (void)addMembersWithUsernameArray:(NSArray JMSG_GENERIC(__kindof NSString *) *)usernameArray
  707. appKey:(NSString *)userAppKey
  708. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  709. /*!
  710. * @abstract 添加群组成员
  711. *
  712. * @param usernameArray 用户名数组。数组里的成员类型是 NSString
  713. * @param userAppKey 用户的 AppKey,这批添加的成员必须在同一个 AppKey 下的用户
  714. * @param reason 邀请原因,可选
  715. *
  716. * @param handler 结果回调。正常返回时 resultObject 为 nil.
  717. */
  718. - (void)addMembersWithUsernameArray:(NSArray JMSG_GENERIC(__kindof NSString *) *)usernameArray
  719. appKey:(NSString *JMSG_NULLABLE)userAppKey
  720. reason:(NSString *JMSG_NULLABLE)reason
  721. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  722. /*!
  723. * @abstract 删除群组成员
  724. *
  725. * @param usernameArray 用户名数据. 数组里的成员类型是 NSString
  726. * @param handler 结果回调。正常返回时 resultObject 为 nil.
  727. */
  728. - (void)removeMembersWithUsernameArray:(NSArray JMSG_GENERIC(__kindof NSString *) *)usernameArray
  729. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  730. /*!
  731. * @abstract 删除群组跨应用成员
  732. *
  733. * @param usernameArray 用户名数据. 数组里的成员类型是 NSString
  734. * @param handler 结果回调。正常返回时 resultObject 为 nil.
  735. */
  736. - (void)removeMembersWithUsernameArray:(NSArray JMSG_GENERIC(__kindof NSString *) *)usernameArray
  737. appKey:(NSString *)userAppKey
  738. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  739. /*!
  740. * @abstract 移交群主
  741. *
  742. * @param username 新群主用户名
  743. * @param appkey 新群主用户 AppKey,不填则默认为本应用 AppKey
  744. * @param handler 结果回调。error 为 nil 表示成功.
  745. */
  746. - (void)transferGroupOwnerWithUsername:(NSString *JMSG_NONNULL)username
  747. appKey:(NSString *JMSG_NULLABLE)appkey
  748. completionHandler:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  749. /*!
  750. * @abstract 退出当前群组(当前用户)
  751. *
  752. * @param handler 结果回调。正常返回时 resultObject 为 nil。
  753. */
  754. - (void)exit:(JMSGCompletionHandler JMSG_NULLABLE)handler;
  755. /*!
  756. * @abstract 获取头像缩略图文件数据
  757. *
  758. * @param handler 结果回调。回调参数:
  759. *
  760. * - data 头像数据;
  761. * - objectId 群组 gid;
  762. * - error 不为nil表示出错;
  763. *
  764. * 如果 error 为 nil, data 也为 nil, 表示没有头像数据.
  765. *
  766. * @discussion 需要展示缩略图时使用。
  767. * 如果本地已经有文件,则会返回本地,否则会从服务器上下载。
  768. */
  769. - (void)thumbAvatarData:(JMSGAsyncDataHandler)handler;
  770. /*!
  771. * @abstract 获取头像缩略文件的本地路径
  772. *
  773. * @return 返回本地路,返回值只有在下载完成之后才有意义
  774. */
  775. - (NSString *JMSG_NULLABLE)thumbAvatarLocalPath;
  776. /*!
  777. * @abstract 获取头像大图文件数据
  778. *
  779. * @param handler 结果回调。回调参数:
  780. *
  781. * - data 头像数据;
  782. * - objectId 群组 gid;
  783. * - error 不为nil表示出错;
  784. *
  785. * 如果 error 为 nil, data 也为 nil, 表示没有头像数据.
  786. *
  787. * @discussion 需要展示大图图时使用
  788. * 如果本地已经有文件,则会返回本地,否则会从服务器上下载。
  789. */
  790. - (void)largeAvatarData:(JMSGAsyncDataHandler)handler;
  791. /*!
  792. * @abstract 获取头像大图文件的本地路径
  793. *
  794. * @return 返回本地路,返回值只有在下载完成之后才有意义
  795. */
  796. - (NSString *JMSG_NULLABLE)largeAvatarLocalPath;
  797. /*!
  798. * @abstract 获取群成员的展示名
  799. *
  800. * @param memberUid 群成员的 uid(即:[JMSGUser uid])
  801. *
  802. * @discussion 展示优先级:群昵称 > 好友备注(user.noteName) > 用户昵称(user.nickname) > 用户名(user.username)
  803. */
  804. - (NSString *)memberDisplayName:(UInt64)memberUid;
  805. /*!
  806. * @abstract 获取群组的展示名
  807. *
  808. * @discussion 如果 group.name 为空, 则此接口会拼接群组前 5 个成员的展示名返回.
  809. */
  810. - (NSString *)displayName;
  811. - (BOOL)isMyselfGroupMember;
  812. - (BOOL)isEqualToGroup:(JMSGGroup * JMSG_NULLABLE)group;
  813. JMSG_ASSUME_NONNULL_END
  814. @end