Web

超大群管理

更新时间: 2024/03/14 19:21:10

网易云信 NIM SDK 提供超大群功能,支持用户加入、退出、转让、修改、查询超大群。

超大群无法在客户端侧创建和解散,只能通过服务端 API 处理,具体请参见创建超大群解散超大群

技术原理

网易云信 IM Web Elite SDK 的 SuperTeamServiceInterface 提供管理超大群的相关方法,帮助您快速实现和使用超大群的管理功能。

在进行超大群管理的过程中,往往会收到相关的系统通知,主要通过触发 IMEventInterfacesysMsg 事件来实现。

超大群相关 API 都挂载在 superTeam 模块中,使用 nim.superTeam 进行访问,具体请参见 SuperTeamServiceInterface

超大群相关事件监听

在进行超大群操作前,您可以提前注册监听超大群相关事件。监听后,在进行超大群管理相关操作时,会收到对应的通知。

超大群可能会触发以下事件,具体事件类型请参见IMEventInterface

  • superTeams:初始化同步超大群
  • mySuperTeamMembers:初始化同步自己在所有超大群中的用户信息;在线或多端登录时修改自己在超大群中的用户信息,也会收到该事件通知
  • updateSuperTeamMember 更新超大群成员的多端同步
  • updateSuperTeam 超大群更新
  • addSuperTeamMembers 超大群成员添加
  • updateSuperTeamManagers 超大群管理员更新
  • transferSuperTeam 转让超大群
  • removeSuperTeamMembers 移除超大群成员
  • dismissSuperTeam 超大群解散
  • updateSuperTeamMembersMute 超大群成员禁言

示例代码如下:

// 事件声明
  const eventList = [
  'superTeams',// 初始化同步超大群
  'mySuperTeamMembers',//初始化同步自己在所有超大群的用户信息
  'updateSuperTeamMember',  // 更新超大群成员的多端同步
  'updateSuperTeam', 'addSuperTeamMembers', 'updateSuperTeamManagers', 'transferSuperTeam', 'removeSuperTeamMembers', 'dismissSuperTeam', 'updateSuperTeamMembersMute',
  ]
// 注册监听
  eventList.forEach((key: any) => {
  nim.on(key, (res) => {
    console.log(`收到 ${key} 事件:`, res ? JSON.parse(JSON.stringify(res)) : res);
  });
})

实现流程

本章节通过群主、管理员、普通成员之间的交互为例,介绍超大群管理的实现流程。

uml diagram

超大群的创建和解散需要用户调用服务端 API 实现:

加入超大群

加入超大群可以通过以下两种方式:

  • 用户接受邀请入群。
  • 用户主动申请入群。

邀请入群

邀请入群的权限可以通过 inviteMode 来定义,设为 manager,那么仅限群主和管理员可以邀请人进群;设为 all ,那么超大群内的所有人都可以邀请人进群。

通过调用 addSuperTeamMembers 方法邀请其他用户进入超大群。

  • 若超大群的被邀请模式 beInviteModenoVerify,那么无需验证,其他用户可直接加入超大群。
  • 若超大群的被邀请模式 beInviteModeneedVerify,那么需要被邀请用户同意才能加入超大群。

接口原型

jsaddSuperTeamMembers(options: AddSuperTeamMembersOptions): Promise<void>

AddSuperTeamMembersOptions 参数说明

参数 类型 说明
teamId String 群ID
accounts Array 邀请入群的用户
ext String 第三方扩展字段, 开发者可以自行扩展, 建议封装成 JSON 格式字符串
ps String 附言,长度不得大于 5000,开发者可以使用 JSON 格式字符串填充
  • 发起邀请后,被邀请用户会收到系统通知,其通知类型为 superTeamInvite
  • 被邀请用户可以调用 acceptSuperTeamInvite 方法接受入群邀请。接受后,该群的所有群成员会收到超大群通知消息 addSuperTeamMembers
  • 也可以调用 rejectSuperTeamInvite 方法拒绝入群邀请。拒绝后,邀请者会收到系统通知,其通知类型为 rejectSuperTeamInvite

示例代码:

jsawait nim.superTeam.addSuperTeamMembers({
  accounts: ['cs1', 'cs2'],
  teamId:  '{{TARGET_SUPERTEAM_ID}}',
  ps: '我邀请了xx 加入',
  ext: '附加字段,推荐使用 JSON 格式字符串',
});

申请入群

通过调用 applySuperTeam 方法申请加入超大群。

  • 若超大群的加入模式 joinModenoVerify,那么无需验证,其他用户可直接加入超大群。
  • 若超大群的加入模式 joinModeneedVerify,那么需要群主或者群管理员同意才能加入超大群。

接口原型:

jsapplySuperTeam(options: ApplySuperTeamOptions): Promise<SuperTeam>

ApplySuperTeamOptions 参数说明

参数 类型 说明
teamId String 群ID
ps String 附言,长度不得大于 5000,开发者可以使用 JSON 格式字符串填充
  • 当用户发起入群申请后,该群群主和管理员会收到系统通知,其通知类型为 applySuperTeam
  • 群主和群管理员可以调用 passSuperTeamApply 方法接受入群申请。接受后,该群的所有群成员会收到超大群通知消息,其类型为 addSuperTeamMembers
  • 也可以调用 rejectSuperTeamApply 方法拒绝入群申请。拒绝后,申请者会收到系统通知,其通知类型为 rejectSuperTeamApply

示例代码:

jsawait nim.superTeam.applySuperTeam({
  teamId:  '{{TARGET_SUPERTEAM_ID}}',
  ps: '我申请加入 xx 超大群',
});

转让超大群

只有超大群群主才有转让超大群的权限。

通过调用 transferSuperTeam 方法将超大群转让给其他成员。

  • 转让群后, 群主身份转移,所有群成员会收到超大群通知消息,其类型为 transferSuperTeam
  • 如果转让群的同时离开群, 那么相当于同时调用 leaveSuperTeam 主动退群,所有群成员会再收到超大群通知消息,其类型为 removeSuperTeamMembers

接口原型:

jstransferSuperTeam(options: TransferSuperTeamOptions): Promise<void>

示例代码:

jsawait nim.superTeam.transferSuperTeam({
  account: 'cs1'
  teamId:  '{{TARGET_SUPERTEAM_ID}}',
  leave: 'false',
});

退出超大群

退出超大群可以通过以下两种方式:

  • 群主或管理员将用户踢出超大群。
  • 用户主动退群。

踢人出群

  • 只有超大群群主和管理员才能将成员踢出超大群。
  • 管理员不能踢群主和其他管理员。

通过调用 removeSuperTeamMembers 方法将成员移出超大群。

移除成员后,所有群成员会收到超大群通知消息,其类型为 removeSuperTeamMembers

接口原型:

jsremoveSuperTeamMembers(options: RemoveSuperTeamMembersOptions): Promise<void>

示例代码:

jsawait nim.superTeam.removeSuperTeamMembers({
  accounts: ['cs1', 'cs2'],
  teamId:  '{{TARGET_SUPERTEAM_ID}}',
});

主动退群

通过调用 leaveSuperTeam 方法主动退出超大群。

除群主(需先转让群主)外,其他用户均可以直接主动退群。主动退群后,,所有群成员会收到超大群通知消息,其类型为 removeSuperTeamMembers

接口原型:

jsleaveSuperTeam(options: { teamId: string }): Promise<void>

示例代码:

jsawait nim.superTeam.leaveSuperTeam({
  teamId:  '{{TARGET_SUPERTEAM_ID}}',
});

修改超大群信息

修改超大群信息需要权限。若超大群的群信息修改权限 TeamUpdateTeamModemanager,那么只有群主和管理员才能修超大群信息;若为 all,则超大群内的所有人都可以修改超大群信息。若没有该权限,可以联系超大群群主或管理员修改群信息修改权限 TeamUpdateTeamMode

通过调用 updateSuperTeamInfo 方法修改并更新超大群信息。

主要更新以下信息:

  • 群加入方式 TeamJoinMode
  • 群被邀请模式 TeamBeInviteMode
  • 群邀请模式 TeamInviteMode
  • 群信息修改权限 TeamUpdateTeamMode
  • 群信息自定义字段修改权限 TeamUpdateExtMode

当用户更新超大群信息后,所有群成员会收到超大群通知消息,其类型为 updateSuperTeam

接口原型:

jsupdateSuperTeamInfo(options: UpdateSuperTeamInfoOptions): Promise<SuperTeam>

其中,UpdateSuperTeamInfoOptions是更新超大群信息的入参。UpdateSuperTeamInfoOptions中的参数可参考超大群对象

示例代码:

jsawait nim.superTeam.updateSuperTeamInfo({
  teamId: '{{TARGET_SUPERTEAM_ID}}',
  name: '超大群',
  avatar: 'avatar',
  intro: '群简介',
  announcement: '群公告',
  joinMode: 'needVerify',
  beInviteMode: 'nodVerify',
  inviteMode: 'all',
  updateTeamMode: 'all',
  updateCustomMode: 'all',
  ext: '群扩展字段, 建议封装成 JSON 格式字符串',
});

查询超大群信息

  • SDK 通过调用 getSuperTeamInfo 方法根据群 ID 查询单个超大群的详细信息。

接口原型:

jsgetSuperTeamInfo(options: { teamId: string }): Promise<SuperTeam>
  • SDK 通过分页获取超大群列表,参见 getSuperTeams

接口原型:

jsgetSuperTeams(): Promise<SuperTeam[]>

示例代码:

jsconst SuperTeam = await nim.superTeam.getSuperTeamInfo({
  teamId: '{{TARGET_SUPERTEAM_ID}}'
});

const SuperTeams = await nim.superTeam.getSuperTeams();

API 参考

API
说明
addSuperTeamMembers 将某人加入超大群
acceptSuperTeamInvite 接受入群邀请
rejectSuperTeamInvite 拒绝入群邀请
applySuperTeam 申请加入超大群
passSuperTeamApply 接受入群申请
rejectSuperTeamApply 拒绝入群申请
removeSuperTeamMembers 将某人移出超大群
leaveSuperTeam 主动退出超大群
transferSuperTeam 转让超大群
updateSuperTeamInfo 修改并更新超大群信息
getSuperTeamInfo 查询超大群信息
getSuperTeams 查询超大群列表
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 超大群相关事件监听
  • 实现流程
  • 加入超大群
  • 邀请入群
  • 申请入群
  • 转让超大群
  • 退出超大群
  • 踢人出群
  • 主动退群
  • 修改超大群信息
  • 查询超大群信息
  • API 参考