CREATE TABLE IF NOT EXISTS accounts ( id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT UNIQUE NOT NULL, pw_hash TEXT NOT NULL, is_admin INTEGER NOT NULL DEFAULT 0, created_at INTEGER NOT NULL, last_login INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS server_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL); CREATE TABLE IF NOT EXISTS channels ( id INTEGER PRIMARY KEY AUTOINCREMENT, parent_id INTEGER NOT NULL DEFAULT 0, name TEXT UNIQUE NOT NULL, topic TEXT NOT NULL DEFAULT '', password_hash TEXT NOT NULL DEFAULT '', max_users INTEGER NOT NULL DEFAULT 0, type INTEGER NOT NULL DEFAULT 0, audio_codec INTEGER NOT NULL DEFAULT 0, audio_mode INTEGER NOT NULL DEFAULT 0, audio_sample_rate INTEGER NOT NULL DEFAULT 48000, audio_bitrate_bps INTEGER NOT NULL DEFAULT 24000, audio_frame_ms INTEGER NOT NULL DEFAULT 20, audio_application INTEGER NOT NULL DEFAULT 0, audio_fec INTEGER NOT NULL DEFAULT 1, audio_expected_packet_loss INTEGER NOT NULL DEFAULT 10, audio_dtx INTEGER NOT NULL DEFAULT 1, audio_complexity INTEGER NOT NULL DEFAULT 5, audio_dred INTEGER NOT NULL DEFAULT 0, audio_packet_loss_mode INTEGER NOT NULL DEFAULT 0, sort_order INTEGER NOT NULL DEFAULT 0 ); CREATE TABLE IF NOT EXISTS bans ( id INTEGER PRIMARY KEY AUTOINCREMENT, subject_type TEXT NOT NULL, subject TEXT NOT NULL, reason TEXT NOT NULL DEFAULT '', expires_at INTEGER NOT NULL DEFAULT 0, created_at INTEGER NOT NULL ); CREATE INDEX IF NOT EXISTS idx_bans_subject ON bans(subject_type, subject);