Skip to content

群禁言

概述

Bngeuit 提供完整的群禁言管理能力,包括:

  • 成员禁言:对单个或多个群成员设置/解除禁言
  • 全员禁言:查询群级禁言模式(始终禁言 / 定时禁言)
  • 禁言状态查询:查看当前禁言中的成员列表

权限要求

机器人需拥有群管理员身份才能执行禁言操作。最大禁言时长为 30 天。

快速上手

禁言成员

java
import cn.org.bukkit.bngeuit.Bngeuit;

// 禁言 30 分钟(使用毫秒时间戳)
long expireAt = System.currentTimeMillis() + 30 * 60 * 1000;
Bngeuit.muteGroupMember(groupOpenid, memberOpenid, expireAt);

// 禁言 30 分钟(使用 RFC3339 格式)
Bngeuit.muteGroupMember(groupOpenid, memberOpenid, "2026-08-05T11:23:05+08:00");

// 解除禁言
Bngeuit.unmuteGroupMember(groupOpenid, memberOpenid);

批量操作

单次最多操作 10 个成员

java
import cn.org.bukkit.bngeuit.dto.message.mute.SetMemberMuteState;
import java.util.List;

// 使用 RFC3339 格式
Bngeuit.setGroupMemberMute(groupOpenid, List.of(
    SetMemberMuteState.add("member_openid_1", "2026-08-05T11:23:05+08:00"),
    SetMemberMuteState.add("member_openid_2", "2026-08-05T12:00:00+08:00"),
    SetMemberMuteState.del("member_openid_3")  // 解除禁言
));

// 使用毫秒时间戳(禁言 30 分钟)
long expireAt = System.currentTimeMillis() + 30 * 60 * 1000;
Bngeuit.setGroupMemberMute(groupOpenid, List.of(
    SetMemberMuteState.add("member_openid_1", expireAt),
    SetMemberMuteState.del("member_openid_2")
));

查询禁言状态

java
import cn.org.bukkit.bngeuit.dto.message.mute.*;

GroupMuteStateResponse state = Bngeuit.getGroupMuteState(groupOpenid);

// 检查全员禁言模式
if (state.globalRule() != null) {
    GlobalMuteRule rule = state.globalRule();
    
    if (rule.isAllMuted()) {
        System.out.println("全员禁言中");
    }
    if (rule.isScheduled()) {
        System.out.println("定时禁言模式");
        // 查看定时规则
        rule.scheduleRules().forEach(r -> 
            System.out.println(r.startAt() + " ~ " + r.endAt()));
        rule.recurringRules().forEach(r -> 
            System.out.println("每周" + r.weekdays() + " " + r.startTime() + "~" + r.endTime()));
    }
}

// 查看禁言中的成员
if (state.members() != null) {
    for (MemberMuteState m : state.members()) {
        System.out.println(m.username() + " 禁言到 " + m.muteExpireAt());
    }
}

API 参考

SetMemberMuteState

禁言设置项,通过静态工厂方法创建:

方法说明
SetMemberMuteState.add(memberOpenid, muteExpireAt)增加禁言(RFC3339 格式)
SetMemberMuteState.add(memberOpenid, muteExpireAtMs)增加禁言(毫秒时间戳)
SetMemberMuteState.update(memberOpenid, muteExpireAt)更新禁言到期时间(RFC3339 格式)
SetMemberMuteState.update(memberOpenid, muteExpireAtMs)更新禁言到期时间(毫秒时间戳)
SetMemberMuteState.del(memberOpenid)解除禁言

参数说明:

  • memberOpenid:被禁言成员的 OpenID(只能操作普通成员,不能操作群主、管理员、机器人)
  • muteExpireAt:禁言到期时间,RFC3339 格式(如 2026-08-05T11:23:05+08:00
  • muteExpireAtMs:禁言到期时间,毫秒级 Unix 时间戳
java
// 使用 RFC3339 格式
SetMemberMuteState.add("openid", "2026-08-05T11:23:05+08:00");

// 使用毫秒时间戳(禁言 30 分钟)
long expireAt = System.currentTimeMillis() + 30 * 60 * 1000;
SetMemberMuteState.add("openid", expireAt);

MuteMode

全员禁言模式枚举:

枚举JSON 值说明
NONE"none"未开启全员禁言
ALWAYS"always"始终禁言
SCHEDULE"schedule"定时禁言

GlobalMuteRule

群级禁言规则(全员禁言配置):

方法返回类型说明
mode()MuteMode禁言模式
scheduleRules()List<MuteScheduleRule>定时禁言规则列表
recurringRules()List<MuteRecurringRule>周期禁言规则列表
isAllMuted()boolean是否全员禁言
isScheduled()boolean是否定时禁言
isNone()boolean是否未开启

MuteScheduleRule

定时禁言规则:

字段类型说明
taskIdString任务 ID
startAtString开始时间(RFC3339)
endAtString结束时间(RFC3339)
enabledboolean是否启用

MuteRecurringRule

周期禁言规则(按星期循环):

字段类型说明
taskIdString任务 ID
weekdaysList<Integer>生效星期几(1=周一,7=周日)
startTimeString开始时间(HH:mm,北京时间)
endTimeString结束时间(HH:mm,跨天表示到次日)
enabledboolean是否启用

GroupMuteStateResponse

禁言状态响应:

字段类型说明
globalRule()GlobalMuteRule全员禁言配置
members()List<MemberMuteState>当前禁言中的成员列表

MemberMuteState

成员禁言状态:

字段类型说明
memberOpenid()String成员 OpenID
muteExpireAt()String禁言到期时间
username()String成员昵称
unionOpenid()String统一标识

事件

GroupMemberMuteEvent

群成员禁言状态变更时触发(发送事件,可取消):

java
@SubscribeEvent
public void onMemberMute(GroupMemberMuteEvent e) {
    // 可通过 e.setCancelled(true) 阻止禁言操作
}