character_banned - 角色封禁记录表
基于 AzerothCore Characters 数据库 · 被封禁角色的记录和历史管理表
📋 表概述
character_banned 表记录所有被封禁角色的封禁详情和历史。当GM使用 .ban character 命令封禁角色时,封禁信息会写入此表,包括封禁时间、解封时间、操作GM和封禁原因等。支持临时封禁和永久封禁。
- 角色封禁管理
- 封禁历史追踪
- 自动/手动解封
- 封禁原因记录
联合主键 (guid, bandate),同一角色可有多条封禁记录(历史封禁)。active 标记当前是否处于封禁状态。属于 Ban List 系统模块。
📊 表结构
| 字段名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| guid | int UNSIGNED | 0 | 被封禁角色GUID(联合主键1) |
| bandate | int UNSIGNED | 0 | 封禁时间(Unix时间戳,联合主键2) |
| unbandate | int UNSIGNED | 0 | 解封时间(Unix时间戳) |
| bannedby | varchar(50) | NOT NULL | 封禁操作者名称 |
| banreason | varchar(255) | NOT NULL | 封禁原因 |
| active | tinyint UNSIGNED | 1 | 是否处于激活封禁状态(1=封禁中,0=已解封) |
🔍 重要字段详解
⏰ bandate / unbandate - 封禁/解封时间
详细说明:两个Unix时间戳,定义封禁的时间区间。
- bandate - 封禁开始时间(封禁命令执行的时间)
- unbandate - 解封时间(自动解封的时间点)
- unbandate=0 → 永久封禁(永不过期)
- 当前时间 >= unbandate + bandate → 封禁自动解除
💡 封禁30天:
bandate = UNIX_TIMESTAMP(), unbandate = UNIX_TIMESTAMP() + 2592000👤 bannedby - 操作者
详细说明:VARCHAR(50),记录执行封禁操作的GM名称。
- 用于追责和审计
- 可能是GM角色名称或管理控制台标识(如'Console')
- 玩家申诉时可用于核实操作来源
📝 banreason - 封禁原因
详细说明:VARCHAR(255),记录GM填写的封禁原因。
- 最大255字符,可详细说明违规行为
- 常见原因:使用外挂、广告刷屏、利用BUG、言语辱骂等
- 玩家申诉时的重要参考依据
🔒 active - 激活状态
详细说明:TINYINT类型,标识封禁是否生效。
- 1 = 封禁中(角色无法登录)
- 0 = 已解封(手动或自动解封后设为0)
- 同一角色可能同时存在 active=1(当前封禁)和 active=0(历史封禁)记录
💡 SQL示例
示例1:查询所有当前被封禁的角色
SELECT
cb.guid, c.name,
FROM_UNIXTIME(cb.bandate) AS ban_date,
FROM_UNIXTIME(cb.unbandate) AS unban_date,
cb.bannedby, cb.banreason
FROM character_banned cb
JOIN characters c ON c.guid = cb.guid
WHERE cb.active = 1
ORDER BY cb.bandate DESC;示例2:手动解封角色
UPDATE character_banned
SET active = 0
WHERE guid = 100 AND active = 1;示例3:查看某角色的封禁历史
SELECT
FROM_UNIXTIME(bandate) AS ban_date,
FROM_UNIXTIME(unbandate) AS unban_date,
bannedby, banreason, active
FROM character_banned
WHERE guid = 100
ORDER BY bandate DESC;❓ 常见问题
Q1: 角色被封禁后会提示什么信息?
角色登录时会提示"此角色已被封禁"并显示 banreason 中的原因、操作者和解封时间。如果 unbandate=0 则显示为"永久封禁"。
Q2: 如何永久封禁一个角色?
将 unbandate 设为 0 即为永久封禁:
INSERT INTO character_banned (guid, bandate, unbandate, bannedby, banreason, active) VALUES (100, UNIX_TIMESTAMP(), 0, 'GM名', '原因', 1);