当前页

社群禁言

2026-05-22
说明

当前社群禁言功能仅支持对社群内的频道进行禁言操作,暂不支持社群级别的全局禁言。

用户登录 ZIM SDK 后,可通过 muteCommunityChannels 设置社群频道禁言状态,支持对多个频道批量设置。

前提条件

  • 请参考 实现基本消息收发 完成 ZIM SDK 获取、初始化和用户登录。
  • 请参考 使用 Token 鉴权 实现用户鉴权登录。
  • 社群功能需要 ZIM SDK 3.0.0 及以上版本。
  • 社群功能为旗舰版功能,使用前请联系 ZEGO 技术支持开通。
  • 社群功能的 Token 生成方式与其他 ZIM 功能一致,无需额外权限声明。

功能说明

  • 支持批量设置多个频道禁言状态,禁言配置通过 ZIMCommunityChannelMuteConfig 指定。
  • config.mode 可以决定禁言范围:NONE(不禁言,用于解除禁言)、NORMAL(禁言普通成员)、ALL(禁言包括管理员和群主在内的所有人)、CUSTOM(自定义角色范围,此时由 config.roles 控制)。
  • config 内填写 duration 指定禁言时长,单位秒,取值范围 1-2592001(约 30 天),或 -1 表示永久禁言。

设置成功后,可通过 ZIMCommunityChannelsMutedCallback 获取结果。

配置字段说明
mode禁言范围:NONE(0) 不禁言任何角色(用于解除禁言,isMute=true 且 mode=NONE 等价于取消禁言)、NORMAL(1) 禁言普通成员、ALL(2) 全员禁言、CUSTOM(3) 自定义角色范围
rolesmodeCustom 时生效,指定被禁言的角色列表
duration禁言时长(秒),1-2592001 或 -1 表示永久禁言

channelIDscommunityID 是接口方法的直接参数,非 config 配置字段。

禁言机制说明

社群支持两种禁言维度,二者可叠加生效:

维度接口作用范围说明
频道禁言muteCommunityChannels频道级别对指定频道设置禁言,通过 config.mode 控制禁言角色范围
成员禁言muteCommunityMembers成员级别对指定成员在指定频道(留空则对所有频道生效)设置禁言
  • 当成员所在频道被设为禁言,且该成员也未被单独设为禁言时,以频道禁言配置为准。
  • 当成员被单独设为禁言后,无论频道是否禁言,该成员都无法发送消息。
  • 成员禁言的详细说明请参见 社群成员管理 - 设置成员禁言

示例代码

std::vector<std::string> channelIDs = {"channel_1", "channel_2"};

zim::ZIMCommunityChannelMuteConfig config;
config.duration = 3600;
config.mode = ZIM_COMMUNITY_CHANNEL_MUTE_MODE_NORMAL; // "1: Normal" | "2: All" | "3: Custom"

zim_->muteCommunityChannels(true, channelIDs, communityID, config,
	[=](const std::string &communityID,
		bool isMute,
		const std::vector<std::string> &mutedChannelIDs,
		const zim::ZIMError &errorInfo) {
		if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
			// 禁言设置成功
		}
	});
错误码说明处理建议
6001004社群不存在确认 communityID 是否正确
6001062频道不存在确认 channelID 是否正确
6001065无法解散默认频道默认频道不支持解散操作
6001007社群权限错误确认当前用户是否为管理员或所有者

查询频道禁言状态

调用 queryCommunityChannelsInfo 接口,批量查询指定频道的完整信息,可获取频道的当前禁言状态。

  • channelInfos 返回 ZIMCommunityChannelFullInfo 列表,其中 muteInfo 包含频道禁言信息。
  • errorChannelIDs 返回查询失败的频道 ID 列表。
结果字段说明
baseInfo频道基本信息
createTime频道创建时间
creatorUserID频道创建者用户 ID
channelNotice频道公告
channelAttributes频道属性字典
currentMemberCount当前频道成员数
muteInfo频道禁言信息,包含 modeexpiredTimeroles

muteInfo 字段说明

字段类型说明
modeZIMCommunityChannelMuteMode当前禁言模式:NONE(0)、NORMAL(1)、ALL(2)、CUSTOM(3)
expiredTimelong禁言失效时间(毫秒),到期后自动解除禁言
rolesArrayList<Integer>当前被禁言的角色列表,仅当 mode 为 CUSTOM 时有值
std::vector<std::string> channelIDs = {"channel_1", "channel_2"};

zim_->queryCommunityChannelsInfo(channelIDs, communityID,
    [=](const std::string &communityID,
        const std::vector<zim::ZIMCommunityChannelFullInfo> &channelInfos,
        const std::vector<std::string> &errorChannelIDs,
        const zim::ZIMError &errorInfo) {
        if (errorInfo.code == zim::ZIM_ERROR_CODE_SUCCESS) {
            for (const auto &channelInfo : channelInfos) {
                const zim::ZIMCommunityChannelMuteInfo &muteInfo = channelInfo.muteInfo;
                // muteInfo.mode : 当前频道禁言模式
                // muteInfo.expiredTime : 禁言失效时间(毫秒)
                // muteInfo.roles : 当前被禁言的角色列表
            }
        }
    });

监听频道禁言变化事件

当频道资料(名称、头像、公告、属性、禁言状态等)发生变化时,SDK 会触发频道信息更新回调。可通过该回调获取 updateInfoList 中的 channelInfo.muteInfo,判断频道当前的禁言模式与禁言角色。

  • communityID:触发更新的社群 ID。
  • updateInfoList:变更后的频道完整信息列表。
  • channelInfo.muteInfo:包含 modeexpiredTimeroles 等禁言状态信息。

由于社群规模较大,SDK 可能只向活跃用户推送频道信息变化通知。若未收到推送,可通过 queryCommunityChannelsInfo 主动拉取最新频道信息。

void onCommunityChannelInfoUpdated(zim::ZIM *zim,
    const zim::ZIMCommunityChannelInfoUpdatedEventResult &result) override {
    std::string communityID = result.communityID;
    for (const auto &updateInfo : result.updateInfoList) {
        // updateInfo 包含更新后的频道完整信息,可通过 updateInfo.channelInfo 获取。
        // channelInfo.muteInfo 包含当前频道的禁言状态。
    }
}

相关参考

上一篇

频道会话管理

下一篇

缓存管理

当前页

返回到顶部