您可以对群内某一成员或全体成员禁言并配置禁言时长,在禁言期间被禁言成员不能在当前群内发送消息,该操作只针对当前群有效。禁言期间,被禁言成员退群后重新加入该群禁言依旧有效,直至禁言时间结束或被取消禁言。n本文主要介绍 Web 和小程序端 SDK 中如何对群成员禁言/取消禁言。
使用限制
群组类型限制
好友工作群(Work 或旧版的 Private) | 陌生人交友群(Public) | 临时会议群(Meeting 或旧版的 ChatRoom) | 直播群(AvChatRoom) |
不支持 | 支持 | 支持 | 支持 |
成员角色限制
成员角色 | 权限 |
App 管理员 | 支持对当前 SDKAppID 下所有群内的所有成员进行禁言/取消禁言操作 |
群主 | 支持对当前群内的管理员和普通成员进行禁言/取消禁言操作 |
群管理员 | 支持对当前群内的普通成员进行禁言/取消禁言操作 |
普通成员 | 无禁言权限 |
操作步骤
步骤1:确认操作权限
1. 调用 getGroupProfile 接口查看所在群组类型,确认是否支持禁言/取消禁言操作。
注意
若为群组类型为 Private 或 Work(好友工作群)则不支持禁言。
2. 调用 getGroupMemberProfile 接口查看指定的 userID 在当前群的成员角色,确认是否有权限进行禁言/取消禁言操作。
步骤2:禁言/取消禁言群成员
禁言/取消禁言单个用户
名称 | 类型 | 描述 |
groupID | String | 群 ID |
userID | String | 群成员 ID |
muteTime | Number | 禁言时长,单位为秒。设置为0,表示取消禁言 |
请求示例如下:
let promise = tim.setGroupMemberMuteTime({groupID: 'group1',userID: 'user1',muteTime: 1000});
禁言/取消禁言全体成员
注意
使用该功能需将 SDK 升级至2.6.2及以上版本。全体禁言或取消全体禁言,暂无相关的群提示消息下发。
名称 | 类型 | 描述 |
groupID | String | 群 ID |
muteAllMembers | Boolean | 设置禁言,true 表示全体禁言,false 表示取消全体禁言 |
请求示例如下:
let promise = tim.updateGroupProfile({groupID: 'group1',muteAllMembers:true, // true 全体禁言,false 取消全体禁言});promise.then(function(imResponse) {console.log(imResponse.data.group) // 修改成功后的群组详细资料}).catch(function(imError) {console.warn('updateGroupProfile error:', imError); // 修改群组资料失败的相关信息});
步骤3:监听处理 TIM.EVENT.MESSAGE_RECEIVED 事件
说明
在收到禁言/取消禁言的相关通知时,建议您自行实现 disable/enable 输入框或输入区域的状态。
tim.on(TIM.EVENT.MESSAGE_RECEIVED, function(event) {// 收到推送的单聊、群聊、群提示、群系统通知的新消息,可通过遍历 event.data 获取消息列表数据并渲染到页面// event.name - TIM.EVENT.MESSAGE_RECEIVED// event.data - 存储 Message 对象的数组 - [Message]const length = event.data.length;let message;for (let i = 0; i < length; i++) {message = event.data[i];switch (message.type) {// 禁言用户 A,用户 A 会收到被禁言的群提示消息case TIM.TYPES.MSG_GRP_TIP:this._handleGroupTip(message);break;case TIM.TYPES.MSG_TEXT: // 文本消息,更多消息类型请参考 Messagebreak;default:break;}}});_handleGroupTip(message) {switch (message.payload.operationType) {case TIM.TYPES.GRP_TIP_MBR_PROFILE_UPDATED: // 群成员资料变更,例如:群成员被禁言const memberList = message.payload.memberList;for (let member of memberList) {console.log(`${member.userID} 被禁言${member.muteTime}秒`);}break;case TIM.TYPES.GRP_TIP_MBR_JOIN: // 有成员加群break;case TIM.TYPES.GRP_TIP_MBR_QUIT: // 有群成员退群break;case TIM.TYPES.GRP_TIP_MBR_KICKED_OUT: // 有群成员被踢出群break;case TIM.TYPES.GRP_TIP_GRP_PROFILE_UPDATED: // 群组资料变更break;default:break;}}
步骤4:判断禁言状态
2.6.2及以上版本 SDK,调用 getGroupMemberList 接口可以拉取群成员禁言截止时间戳(muteUntil),您根据该值即可判断群成员是否被禁言,以及禁言的剩余时间。取消禁言后,该群成员的 GroupMember.muteUntil * 1000 <= Date.now()。
// 从v2.6.2 起,getGroupMemberList 接口支持拉取群成员禁言截止时间戳。let promise = tim.getGroupMemberList({ groupID: 'group1', count: 30, offset:0 }); // 从0开始拉取30个群成员promise.then(function(imResponse) {console.log(imResponse.data.memberList); // 群成员列表for (let groupMember of imResponse.data.memberList) {if (groupMember.muteUntil * 1000 > Date.now()) {console.log(`${groupMember.userID} 禁言中`);} else {console.log(`${groupMember.userID} 未被禁言`);}}}).catch(function(imError) {console.warn('getGroupMemberProfile error:', imError);});
2.6.2以下版本 SDK, 调用 getGroupMemberProfile 接口可以查询群成员禁言截止时间戳(muteUntil)等详细资料。