From 0218676e2d8031588226ef0b207768aba42099c3 Mon Sep 17 00:00:00 2001 From: FernandoJVideira <03.pleaser-minster@icloud.com> Date: Wed, 21 Oct 2026 22:56:26 +0100 Subject: [PATCH] Start Twitch alerts and tickets off on new servers Every module that can be switched on or off now starts off. A server with no settings yet reads as off; setting the Twitch alert channel or running /tickets setup for the first time turns that module on, and existing settings are left as they are. schema.sql mirrors the API's migration 000019. Co-Authored-By: Claude Opus 5.5 --- internal/db/repos/ticketrepo/repo.go | 10 ++++++---- internal/db/repos/twitchrepo/repo.go | 14 ++++++++------ schema.sql | 4 ++-- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/internal/db/repos/ticketrepo/repo.go b/internal/db/repos/ticketrepo/repo.go index a1474ad..f440b9c 100644 --- a/internal/db/repos/ticketrepo/repo.go +++ b/internal/db/repos/ticketrepo/repo.go @@ -93,9 +93,10 @@ func (r *Repo) GetSettings(ctx context.Context, guildID int64) (*Settings, error err := r.db.QueryRowContext(ctx, q, guildID).Scan(&s.Enabled, &ch, &logCh, &panel, &s.PanelTitle, &s.PanelDescription, &s.MaxOpenPerUser) switch { case errors.Is(err, sql.ErrNoRows): + // Modules start off until the server sets them up. return &Settings{ GuildID: guildID, - Enabled: true, + Enabled: false, PanelTitle: DefaultPanelTitle, PanelDescription: DefaultPanelDescription, MaxOpenPerUser: DefaultMaxOpenPerUser, @@ -109,11 +110,12 @@ func (r *Repo) GetSettings(ctx context.Context, guildID int64) (*Settings, error } // SetChannels saves where tickets live and where transcripts go. A zero log -// channel clears it. +// channel clears it. Setting tickets up for the first time turns them on +// (they start off); after that, the on/off switch is left alone. func (r *Repo) SetChannels(ctx context.Context, guildID, channelID, logChannelID int64) error { const q = ` - INSERT INTO ticket_settings (guild_id, channel_id, log_channel_id) - VALUES ($1, $2, $3) + INSERT INTO ticket_settings (guild_id, channel_id, log_channel_id, enabled) + VALUES ($1, $2, $3, TRUE) ON CONFLICT (guild_id) DO UPDATE SET channel_id = EXCLUDED.channel_id, log_channel_id = EXCLUDED.log_channel_id` diff --git a/internal/db/repos/twitchrepo/repo.go b/internal/db/repos/twitchrepo/repo.go index 835064d..7d99f6f 100644 --- a/internal/db/repos/twitchrepo/repo.go +++ b/internal/db/repos/twitchrepo/repo.go @@ -102,10 +102,13 @@ func (r *Repo) GetNotificationChannel(ctx context.Context, guildID int64) (int64 return chID.Int64, true, nil } +// SetNotificationChannel sets where live alerts go. Setting it for the first +// time turns alerts on (they start off); after that, the on/off switch is +// left alone. func (r *Repo) SetNotificationChannel(ctx context.Context, guildID, channelID int64) error { const q = ` - INSERT INTO twitch_config (guild_id, twitch_channel_id) - VALUES ($1, $2) + INSERT INTO twitch_config (guild_id, twitch_channel_id, enabled) + VALUES ($1, $2, TRUE) ON CONFLICT (guild_id) DO UPDATE SET twitch_channel_id = EXCLUDED.twitch_channel_id ` @@ -114,15 +117,14 @@ func (r *Repo) SetNotificationChannel(ctx context.Context, guildID, channelID in } // IsEnabled reports whether Twitch notifications are enabled for guildID. -// A guild with no twitch_config row yet defaults to enabled, matching the -// column's own DEFAULT TRUE - "never configured" and "explicitly on" are -// the same state until someone actually flips it off. +// A guild with no twitch_config row yet is off: modules start off until +// the server sets them up. func (r *Repo) IsEnabled(ctx context.Context, guildID int64) (bool, error) { const q = `SELECT enabled FROM twitch_config WHERE guild_id = $1` var enabled bool err := r.db.QueryRowContext(ctx, q, guildID).Scan(&enabled) if err == sql.ErrNoRows { - return true, nil + return false, nil } if err != nil { return false, err diff --git a/schema.sql b/schema.sql index 19003c4..83e1d09 100644 --- a/schema.sql +++ b/schema.sql @@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS levelup ( CREATE TABLE IF NOT EXISTS twitch_config ( guild_id BIGINT PRIMARY KEY, twitch_channel_id BIGINT, - enabled BOOLEAN NOT NULL DEFAULT TRUE + enabled BOOLEAN NOT NULL DEFAULT FALSE ); CREATE TABLE IF NOT EXISTS rps ( @@ -180,7 +180,7 @@ CREATE TABLE IF NOT EXISTS music_commands ( -- Tickets (mirror of velox-dashboard-api migration 000016_tickets) CREATE TABLE IF NOT EXISTS ticket_settings ( guild_id BIGINT PRIMARY KEY, - enabled BOOLEAN NOT NULL DEFAULT TRUE, + enabled BOOLEAN NOT NULL DEFAULT FALSE, channel_id BIGINT, log_channel_id BIGINT, panel_message_id BIGINT, -- 2.54.0