有奖捉虫:云通信与企业服务文档专题,速来> HOT
您可以对群内某一成员或全体成员禁言并配置禁言时长,在禁言期间被禁言成员不能在当前群内发送消息,该操作只针对当前群有效。禁言期间,被禁言成员退群后重新加入该群禁言依旧有效,直至禁言时间结束或被取消禁言。 本文主要介绍 Web 和小程序端 SDK 中如何对群成员禁言/取消禁言。

使用限制

群组类型限制
好友工作群(Work 或旧版的 Private)
陌生人交友群(Public)
临时会议群(Meeting 或旧版的 ChatRoom)
直播群(AvChatRoom)
不支持
支持
支持
支持
成员角色限制
成员角色
权限
App 管理员
支持对当前 SDKAppID 下所有群内的所有成员进行禁言/取消禁言操作
群主
支持对当前群内的管理员和普通成员进行禁言/取消禁言操作
群管理员
支持对当前群内的普通成员进行禁言/取消禁言操作
普通成员
无禁言权限

操作步骤

步骤1:确认操作权限

1. 调用 getGroupProfile 接口查看所在群组类型,确认是否支持禁言/取消禁言操作。
注意
若为群组类型为 Private 或 Work(好友工作群)则不支持禁言。
2. 调用 getGroupMemberProfile 接口查看指定的 userID 在当前群的成员角色,确认是否有权限进行禁言/取消禁言操作。

步骤2:禁言/取消禁言群成员

禁言/取消禁言单个用户

App 管理员、群主或群管理员调用接口 setGroupMemberMuteTime 可禁言/取消禁言指定群组内的指定成员,单次调用仅支持禁言/取消禁言单个群成员。 请求参数如下表所示。
名称
类型
描述
groupID
String
群 ID
userID
String
群成员 ID
muteTime
Number
禁言时长,单位为秒。设置为0,表示取消禁言
请求示例如下:
let promise = tim.setGroupMemberMuteTime({
groupID: 'group1',
userID: 'user1',
muteTime: 1000
});

禁言/取消禁言全体成员

注意
使用该功能需将 SDK 升级至2.6.2及以上版本。全体禁言或取消全体禁言,暂无相关的群提示消息下发。
App 管理员或群主调用 updateGroupProfile 接口可禁言/取消禁言指定群的全体管理员和普通成员。 请求参数如下表所示。
名称
类型
描述
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 事件

禁言后,该群成员收到的被禁言 群提示消息,可通过遍历 event.data 获取相关数据并渲染到页面。
说明
在收到禁言/取消禁言的相关通知时,建议您自行实现 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: // 文本消息,更多消息类型请参考 Message
break;
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)等详细资料。