📋 表概述

channels_bans 表记录在自定义聊天频道中被频道所有者封禁的玩家。管理员可以对违规玩家进行封禁操作,封禁后该玩家将无法再加入或在此频道中发言。

联合主键 (channelId, playerGUID),确保同一玩家在同一频道中不会重复被封禁。banTime 为封禁截止时间戳。

📊 表结构

字段名类型默认值说明
channelIdint UNSIGNEDNOT NULL频道ID(联合主键1)
playerGUIDint UNSIGNEDNOT NULL被封禁玩家GUID(联合主键2)
banTimeint UNSIGNEDNOT NULL封禁截止时间(Unix时间戳)

🔍 重要字段详解

🚫 playerGUID - 被封禁玩家

详细说明:被频道所有者/管理员封禁的玩家角色GUID。
  • 关联 characters.guid
  • 一旦被封禁,该玩家无法重新加入频道
  • 删除记录即可解除封禁

⏰ banTime - 封禁截止时间

详细说明:Unix时间戳,表示封禁何时自动解除。
  • 当前时间 < banTime → 处于封禁状态
  • 当前时间 >= banTime → 封禁自动解除(服务器检查并清理记录)
  • banTime可以设为很大的值实现"永久封禁"
💡 解除封禁:DELETE FROM channels_bans WHERE channelId = X AND playerGUID = Y;

💡 SQL示例

示例1:查询某频道的所有封禁

SELECT cb.playerGUID, c.name AS player_name, ch.name AS channel_name, FROM_UNIXTIME(cb.banTime) AS ban_until FROM channels_bans cb JOIN channels ch ON ch.channelId = cb.channelId JOIN characters c ON c.guid = cb.playerGUID WHERE cb.channelId = 3;

示例2:清理已过期的封禁

DELETE FROM channels_bans WHERE banTime < UNIX_TIMESTAMP();

❓ 常见问题

Q1: 玩家被频道封禁后还能在其它频道发言吗?
能。channels_bans 只影响被指定的频道,玩家可以正常使用其他频道。
Q2: 封禁会自动解除吗?
服务器会定期检查 banTime,到达截止时间后自动清理该记录,玩家即可重新加入频道。