服务器管理
更新时间: 2024/03/14 19:21:14
NIM SDK 的QChatServerServiceInterface类提供了管理服务器成员的方法,包括加入服务器、离开服务器和将成员踢出服务器等。
服务器成员定义
SDK 的MemberInfo类定义了服务器成员。该类的成员参数如下:
单击展开查看 MemberInfo 的成员参数
| 参数 | 类型 | 说明 |
|---|---|---|
accid |
string | 成员的云信 IM 账号 |
avatar |
string | 成员在服务器内展示的头像 |
createTime |
number | 服务器创建时间 |
ext |
string | 成员的自定义扩展字段 |
inviter |
string | 邀请当前成员加入服务器的用户 |
joinTime |
number | 成员加入服务器的时间 |
nick |
string | 成员昵称 |
serverId |
string | 服务器 ID |
type |
0|1 |
成员类型:
|
updateTime |
number | 更新时间 |
validFlag |
0|1 |
有效标志:0-无效,1-有效 |
前提条件
在开始调用相关方法前,请确保:
-
已注册
systemNotification回调函数,监听圈组系统通知的接收。更多圈组系统通知相关说明,请参见圈组系统通知相关。与服务器成员管理相关的内置系统通知类型如下:
枚举值 说明 serverMemberInvite(有权限者)邀请服务器成员 serverMemberInviteReject拒绝邀请 serverMemberApply申请加入服务器 serverMemberApplyReject拒绝申请 serverMemberInviteDone用户已被邀请 serverMemberInviteAccept接受邀请 serverMemberApplyDone已申请加入服务器 serverMemberApplyAccept申请被接受 serverMemberKick踢除服务器成员 serverMemberLeave主动退出服务器 serverMemberUpdate服务器成员的信息更新 serverMemberJoinByInviteCode用户通过邀请码加入服务器 serverEnterLeave服务器成员加入或退出服务器 myMemberInfoUpdated修改 IM 用户资料触发的对服务器成员信息的联动变更
使用限制
服务器存在如下与其成员数量相关的限制:
- 单个用户的服务器的数量上限(包括自己创建的和加入的)默认为 100 个。
- 单个服务器可容纳人数上限默认为 500000。
若需要扩展上限,可在控制台配置圈组子功能项(单个用户 server 数 和 单 server 容纳人数),具体请参考开通和配置圈组功能。
实现方法
加入服务器
邀请用户加入
拥有“邀请他人加入服务器的权限”(QChatRoleAuth.inviteServer)的用户,可邀请其他用户加入服务器。
如果没有该权限,无法成功发起邀请。服务器所有者默认拥有全部权限。权限通过身份组进行配置和管理,具体请参见身份组概述及其他身份组相关文档。
根据服务器的不同邀请模式(inviteMode),被邀者成功加入服务器的流程略有不同。服务器的邀请模式,在创建服务器时配置,创建后也可修改。
如果服务器的邀请模式被设置为“邀请需要同意”,那么被邀方需要接受邀请才能加入服务器。
API 调用时序
以下时序图可能因为网络问题显示异常。如显示异常,一般刷新当前页面即可正常显示。
流程说明
-
用户A 调用
inviteServerMembers方法邀请多位用户加入服务器。- 发起邀请后,被邀方将收到邀请服务器成员的系统通知。
- 如邀请失败,可通过该方法的回调
InviteServerMembersResult获取邀请失败的成员列表,如因被封禁而无法邀请的成员列表。
示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.inviteServerMembers({ "serverId": '123456', "accids":["123"] }) -
被邀方接受或拒绝邀请。
-
调用
acceptServerInvite方法接受邀请加入服务器。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.acceptServerInvite({ "serverId": '123456', "accid":"123", "recordInfo":{ "requestId":'123456' } }) -
调用
rejectInviteServer方法拒绝邀请。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.rejectInviteServer({ "serverId": "123456", "accid":"123", "ps":"", "recordInfo":{ "requestId":"123456" } })
-
如果服务器的邀请模式被设置为“邀请不需要同意”,那么邀请方调用inviteServerMembers方法方法发起邀请后,被邀请方自动加入服务器。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.inviteServerMembers({
"serverId": '123456',
"accids":["123"]
})
申请加入
用户也可以主动申请加入某个服务器。根据服务器的不同申请模式,申请方成功加入服务器的流程略有不同。
API 调用时序
流程说明
-
申请方调用
applyServerJoin方法主动申请加入某个服务器。发起申请后,该服务器内拥有“处理加入服务器申请的权限”(QChatRoleAuth.manageInviteApply)的用户将收到申请通知。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.applyServerJoin({ "serverId": "123456", "ps":"" }) -
收到申请通知的用户接受或拒绝申请。申请被同意,申请方才能加入服务器。
接受或拒绝申请,需要拥有“处理加入服务器申请的权限”(
QChatRoleAuth.manageInviteApply)。权限通过身份组进行配置和管理,具体请参见身份组概述及其他身份组相关文档。-
调用
acceptServerApply方法接受申请。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.acceptServerApply({ "serverId": "123456", "accid":"123", "recordInfo":{ "requestId":"123456" } }) -
调用
rejectServerApply方法拒绝申请。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.rejectServerApply({ "serverId": "123456", "accid":"123", "ps":"", "recordInfo":{ "requestId":"123456" } })
-
如果服务器的申请模式被设置为“申请不需要同意”,那么申请方调用applyServerJoin方法发起申请后,将自动加入服务器。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.applyServerJoin({
"serverId": "123456",
"ps":""
})
通过邀请码加入
用户可通过服务器成员分享的邀请码(通过第三方应用分享,如微信)加入服务器。
-
用户A 调用
generateInviteCode方法生成邀请码。拥有“邀请他人加入服务器的权限”(
QChatRoleAuth.inviteServer)的服务器成员才能生成邀请码。权限通过身份组进行配置和管理,具体请参见身份组概述及其他身份组相关文档。
示例代码如下:
const qchat = new QChat(options); const {serverId,requestId,inviteCode,expireTime} = await qchat.qchatServer.generateInviteCode({serverId:"123456",ttl:24 * 60 * 60 * 1000}) -
用户B 调用
joinByInviteCode方法,通过邀请码加入服务器。示例代码如下:
const qchat = new QChat(options); await qchat.qchatServer.joinByInviteCode({ "serverId": "123456", "inviteCode":"123456", "ps":"" })
退出服务器
用户既可以主动退出服务器,也可以被动退出,即被其他用户踢出服务器。
主动退出服务器
加入服务器后如不想继续待在此服务器中,用户可以调用leaveServer方法主动离开。离开后将不再接收该服务器下的消息和通知。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.leaveServer({
"serverId": "123456",
})
踢除服务器成员
调用kickServerMembers方法将其他成员踢出服务器。
调用该接口需拥有“踢出他人权限”(QChatRoleAuth.kickServer)。权限通过身份组进行配置和管理,具体请参见身份组概述及其他身份组相关文档。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.kickServerMembers({
"serverId": "123456",
"accids":["123"]
})
修改成员信息
修改自己的成员信息
调用updateMyMemberInfo方法可修改自己在当前服务器的成员信息。调用时,可配置是否对修改的成员资料信息进行内容审核。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.updateMyMemberInfo({
"serverId": "123456",
...
})
修改他人的服务器成员信息
调用updateServerMemberInfo方法可修改其他成员的信息。调用时需传入对应的服务器 ID (serverId)、待修改成员的账号(accid)以及相应的修改项,可配置是否对修改的成员资料信息进行内容审核。
调用该方法需要拥有修改他人成员信息的权限(QChatRoleAuth.accountInfoOther)。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.updateMyMemberInfo({
"serverId": "123456",
...
})
成员封禁管理
封禁服务器成员
拥有封禁他人权限(QChatRoleAuth.banServerMember)的用户可调用banServerMember方法封禁某位服务器成员。调用时需传入服务器 ID(serverId)和待封禁成员的账号(accid)。
执行封禁操作,必须拥有封禁他人的权限。
被封禁的成员将直接被踢出服务器,且不能再申请加入服务器或被邀请加入服务器。某成员被封禁后,所有该服务器成员都会收到该封禁成员被踢的系统通知(serverMemberKick)。
示例代码如下:
const qchat = new QChat (options);
await qchat.qchatServer.banServerMember({
"serverId": "2049548",
"accid": "ctt1",
"ext": ""
})
分页查询封禁成员列表
调用getBannedMembersByPage方法可分页查询某服务器下被封禁的成员列表。
该方法的入参包括服务器 ID (serverId)、查询时间戳(timeTag)和查询数量限制(limit),timetag传 0 表示当前时间,limit 默认 100。
该方法的回参结构GetBannedMembersByPageResult返回被封禁成员 ServerMemberBanInfo列表。
ServerMemberBanInfo参数说明如下:
| 参数 | 类型 | 说明 |
|---|---|---|
serverId |
string | 服务器ID |
accid |
string | 用户的云信 IM 账号 |
ext |
string | 自定义扩展 |
banTime |
string | 封禁时间 |
validFlag |
boolean | 有效标志:true-有效,false-无效 |
createTime |
number | 创建时间 |
updateTime |
number | 更新时间 |
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.getBannedMembersByPage({
"limit": 100,
"serverId": "55769876",
"timetag": 0
})
解封服务器成员
调用unbanServerMember方法可将已封禁用户解封。调用时需要传入服务器ID(serverId)和待解封成员账号(accid)。待解封的成员账号,可通过调用getBannedMembersByPage方法获取。
被解封的用户可正常申请加入服务器或被邀请加入服务器。
调用该方法需要拥有封禁他人权限(QChatRoleAuth.banServerMember)。
示例代码如下:
const qchat = new QChat (options);
await qchat.qchatServer.unbanServerMember({
"serverId": "2049548",
"accid": "ctt1",
"ext": ""
})
查询服务器成员
分页查询服务器成员
用户登录圈组且进入服务器后,如需要获取当前服务器的成员,可调用getServerMembersByPage方法,按成员加入服务器的时间倒序(由近及远)分页查询服务器成员列表。
当前时间往前最多可查 100 条成员信息。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.getServerMembersByPage({
"serverId": "934978",
"timetag": 0,
"limit": 10
})
根据账号 ID 查询服务器成员
用户登录圈组且进入服务器后,如果需要检索当前服务器内的成员,可调用getServerMembers方法来了解相应的成员信息。调用时需传入由成员的 accid和服务器 ID 组成的列表。
调用该方法时最多可传入 200 个 accid。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.getServerMembers({
"accids": [
{
"accid": "",
"serverId": ""
}
]
})
申请与邀请记录查询
查询服务器记录
调用getInviteApplyRecordOfServer方法可查询服务器下的申请与邀请记录。调用时需要传入服务器 ID, 其他参数值可为空。
调用该方法需要拥有申请邀请历史查看权限(QChatRoleAuth.manageInviteApplyHistory)。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.getInviteApplyRecordOfServer({
"serverId": "123456",
"fromTime": 0,
"toTime": 100000
})
查询自己的记录
用户如果需要查询自己的申请或邀请记录,可调用getInviteApplyRecordOfSelf方法进行查询。
调用该方法需要拥有申请邀请记录的查看权限(QChatRoleAuth.manageInviteApplyHistory )。
示例代码如下:
const qchat = new QChat(options);
await qchat.qchatServer.getInviteApplyRecordOfSelf({
"fromTime": 0,
"toTime": 100000
})
成员资料内容审核
调用修改成员信息的方法时,如果通过 AntispamTag 配置了 antiSpamBusinessId, 那么云信将会对频道资料进行安全通内容审核。antiSpamBusinessId 代表安全通默认内容审核业务以外的自定义内容审核的业务 ID;如需新增自定义内容审核,请联系商务经理进行相关配置,然后前往云信控制台的安全通配置界面获取该业务 ID。
更多圈组内容审核相关说明,参见圈组内容审核。






