聊天室成员管理
更新时间: 2024/03/14 19:21:10
本文介绍聊天室成员管理的技术原理、前提条件和实现方法。
技术原理
网易云信 IM SDK 的 CHATROOM_BROWSER_SDK
下的 types
模块提供 ChatroomMember
结构定义聊天室成员。该结构包含的参数具体见下表。
参数 | 类型 | 说明 |
---|---|---|
account |
string | 成员账号 ID |
nick |
string | 成员昵称 |
avatar |
string | 成员头像 |
type |
string | 成员类型 |
guest |
boolean | 是否是游客 |
blacked |
boolean | 是否被拉黑 |
muted |
boolean | 是否被禁言 |
level |
number | 级别 |
online |
boolean | 是否在线,只有固定成员才能离线, 对游客而言只能是在线 |
enterTime |
number | 进入聊天室的时间, 如果离线, 无该字段 |
tempMuted |
number | 是否被临时禁言 |
tempMuteDuration |
number | 临时禁言剩余时长 |
通过 ChatroomMemberServiceInterface 接口下 queryMembers
方法的调用,可返回 ChatroomMember
结构获取成员信息。也可调用该接口下的其他方法,可进一步实现踢人、设置管理员、禁言等聊天室成员管理操作。
前提条件
在实现聊天室成员管理前,请确保您已:
实现方法
查询成员列表
调用 queryMembers 方法,调用时传入 QueryMembersOptions 下的参数,可返回 ChatroomMember
属性数组,从而获取聊天室当前所有成员的信息。
示例代码如下:
jsawait chatroom.chatroomMember.queryMembers({
"type": "regular",
"limit": 100
})
根据账号查询成员信息
调用 queryMembersByAccounts 方法,调用时传入queryMembersByAccountsOptions 下的参数,可返回传入成员账号对应的 ChatroomMember
属性数组。
示例代码如下:
jsconst chatroomMembers = await chatroom.chatroomMember.queryMembersByAccounts({
"accounts": ["YOUR_TARGET_ACCOUNT_ID"]
})
console.log(chatroomMembers)
// [
// {
// "account": "YOUR_TARGET_ACCOUNT_ID",
// "nick": "new123213Nick",
// "avatar": "",
// "ext": "",
// "online": true,
// "enterTime": 1650350197268,
// "tempMuted": false,
// "tempMuteDuration": 0,
// "type": "guest"
// }
// ]
根据标签查询聊天室成员信息
调用 queryMembersByTag
方法,调用时传入QueryMembersByTagOptions
下的参数,可返回传入标签对应的 ChatroomMember
属性数组。
示例代码如下:
jsconst members = await chatroom.chatroomMember.queryMembersByTag({
"tag": "tag1",
"limit": 100
})
console.log(members) // [{...}, {...}] 聊天室成员列表
根据标签查询聊天室在线成员数量
调用 queryMembersCountByTag
方法,调用时传入QueryMembersCountByTagOptions
下的参数,可返回传入标签对应的在线成员数量。
示例代码如下:
js// 获取带有某标签的在线的聊天室成员数量
let number = await chatroom.chatroomMember.queryMembersCountByTag({
"tag": "tag1"
})
console.log(number) // 5 (仅示例)
更新自己的账号信息
调用 updateMyRoomRole 方法可更新自己的账号信息,包括扩展字段、头像和昵称等。
如您的账号为聊天室固定成员账号,可保存修改的昵称、头像和扩展字段信息。
示例代码如下:
jsawait chatroom.chatroomMember.updateMyRoomRole({
"member": {
"nick": "Panda!"
},
"needNotify": true
})
设置管理员
只有聊天室所有者(即创建者)才能设置管理员。执行以下操作前,请确保您使用聊天室所有者账号登录,否则会返回 403 错误码。
调用 setMemberManager 方法,调用时传入的 account
参数需设置为待设置为管理员成员的账号 ID。
管理员可以设置聊天室普通成员、黑名单和禁言名单,且可将普通成员踢出聊天室。
示例代码如下:
js// set manager
await chatroom.chatroomMember.setMemberManager({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": true
})
// unset manager
await chatroom.chatroomMember.setMemberManager({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": false
})
设置黑名单
只有聊天室所有者和管理员才能将普通成员加入黑名单。执行以下操作前,请确保您使用管理员或所有者账号登录,否则会返回 403 错误码。
调用 setMemberBlacklist,调用时传入的 account
参数需设置为需加入黑名单成员的账号 ID。
被加入黑名单的人将不能进入此聊天室。
示例代码如下:
js// Add someone to black list
await chatroom.chatroomMember.setMemberBlacklist({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": true
})
// Remove someone from black list
await chatroom.chatroomMember.setMemberBlacklist({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": false
})
设置禁言
只有聊天室所有者和管理员才能设置禁言。执行以下操作前,请确保您使用所有者或管理员账号登录,否则会返回 403 错误码。
调用 setMemberMute 方法将特定成员设置为禁言。调用时传入的 account
参数需设置为需加入禁言名单的成员的账号 ID。
被加入禁言名单的人将不能在该聊天室发送消息。
示例代码如下:
js// mute
await chatroom.chatroomMember.setMemberMute({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": true
})
// unmute
await chatroom.chatroomMember.setMemberMute({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": false
})
设置临时禁言
只有聊天室所有者和管理员才能设置禁言。执行以下操作前,请确保您使用所有者或管理员账号登录,否则会返回 403 错误码。
调用 setMemberTempMute 将特定成员设置为临时禁言。调用时传入的 account
参数设置为需临时禁言的成员的账号 ID。
调用时传入的禁言时长 duration
结束后,被临时禁言的成员重新获取在聊天室发送消息的权限。
示例代码如下:
js// add to temp mute
await chatroom.chatroomMember.setMemberTempMute({
"account": "YOUR_TARGET_ACCOUNT_ID",
// The unit is seconds
"duration": 3600,
// If notify other chatroom member
"needNotify": true
})
// remove from temp mute
await chatroom.chatroomMember.setMemberTempMute({
"account": "YOUR_TARGET_ACCOUNT_ID",
"duration": 0,
})
根据标签设置对应成员临时禁言
只有聊天室所有者和管理员才能设置禁言。执行以下操作前,请确保您使用所有者或管理员账号登录,否则会返回 403 错误码。
调用 setMembersTempMuteByTag
将根据标签将对应成员设置为临时禁言。
- 调用时传入的禁言时长
duration
结束后,被临时禁言的成员重新获取在聊天室发送消息的权限。 - 当有成员被设置聊天室临时禁言时,所有聊天室成员会收到类型为
addTempMuteTag
或removeTempMuteTag
的聊天室通知消息。
参数说明:
参数 | 类型 | 说明 |
---|---|---|
duration | number | 禁言时长,单位秒,传 0 表示解除禁言 |
needNotify | boolean | 是否需要下发对应的通知消息 |
ext | string | 对应的通知消息的扩展字段 |
notifyTargetTags | string | 通知消息广播的目标标签,默认是options.tag |
tag | string | 需要禁言的标签 |
示例代码如下:
jsawait chatroom.chatroomMember.setMembersTempMuteByTag({
"tag": "tag1",
"duration": 60,
"needNotify": true
})
设置普通成员
只有聊天室所有者和管理员才能设置普通成员。执行以下操作前,请确保您使用所有者或管理员账号登录,否则会返回 403 错误码。
调用 setMemberNormal 方法将特定成员设置为聊天室的普通成员。调用时传入的 account
参数设置为需设置为普通成员的账号 ID。
示例代码如下:
js// add
await chatroom.chatroomMember.setMemberNormal({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": true,
// set level
"level": 1
})
// remove
await chatroom.chatroomMember.setMemberNormal({
"account": "YOUR_TARGET_ACCOUNT_ID",
"isAdd": false
})
踢出成员
只有聊天室所有者和管理员才能踢出成员。执行以下操作前,请确保您使用所有者或管理员账号登录,否则将会返回 403 错误码。
调用 kickMember 方法将特定成员踢出聊天室。调用时传入的account
参数设置为待踢出成员的账号 ID。
示例代码如下:
jsawait chatroom.chatroomMember.kickMember({
"account": "YOUR_TARGET_ACCOUNT_ID",
})