Web

聊天室成员管理

更新时间: 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 结束后,被临时禁言的成员重新获取在聊天室发送消息的权限。
  • 当有成员被设置聊天室临时禁言时,所有聊天室成员会收到类型为 addTempMuteTagremoveTempMuteTag 的聊天室通知消息。

参数说明:

参数 类型 说明
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",
})
此文档是否对你有帮助?
有帮助
去反馈
  • 技术原理
  • 前提条件
  • 实现方法
  • 查询成员列表
  • 根据账号查询成员信息
  • 根据标签查询聊天室成员信息
  • 根据标签查询聊天室在线成员数量
  • 更新自己的账号信息
  • 设置管理员
  • 设置黑名单
  • 设置禁言
  • 设置临时禁言
  • 根据标签设置对应成员临时禁言
  • 设置普通成员
  • 踢出成员