Appearance
群禁言
概述
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
定时禁言规则:
| 字段 | 类型 | 说明 |
|---|---|---|
taskId | String | 任务 ID |
startAt | String | 开始时间(RFC3339) |
endAt | String | 结束时间(RFC3339) |
enabled | boolean | 是否启用 |
MuteRecurringRule
周期禁言规则(按星期循环):
| 字段 | 类型 | 说明 |
|---|---|---|
taskId | String | 任务 ID |
weekdays | List<Integer> | 生效星期几(1=周一,7=周日) |
startTime | String | 开始时间(HH:mm,北京时间) |
endTime | String | 结束时间(HH:mm,跨天表示到次日) |
enabled | boolean | 是否启用 |
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) 阻止禁言操作
}