Compare commits

...
Author SHA1 Message Date
FernandoJVideiraandClaude Opus 5.5 0218676e2d 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 <[email protected]>
2026-10-21 22:56:26 +01:00
3 changed files with 16 additions and 12 deletions

No files matched your search

+6 -4
View File
@@ -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) err := r.db.QueryRowContext(ctx, q, guildID).Scan(&s.Enabled, &ch, &logCh, &panel, &s.PanelTitle, &s.PanelDescription, &s.MaxOpenPerUser)
switch { switch {
case errors.Is(err, sql.ErrNoRows): case errors.Is(err, sql.ErrNoRows):
// Modules start off until the server sets them up.
return &Settings{ return &Settings{
GuildID: guildID, GuildID: guildID,
Enabled: true, Enabled: false,
PanelTitle: DefaultPanelTitle, PanelTitle: DefaultPanelTitle,
PanelDescription: DefaultPanelDescription, PanelDescription: DefaultPanelDescription,
MaxOpenPerUser: DefaultMaxOpenPerUser, 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 // 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 { func (r *Repo) SetChannels(ctx context.Context, guildID, channelID, logChannelID int64) error {
const q = ` const q = `
INSERT INTO ticket_settings (guild_id, channel_id, log_channel_id) INSERT INTO ticket_settings (guild_id, channel_id, log_channel_id, enabled)
VALUES ($1, $2, $3) VALUES ($1, $2, $3, TRUE)
ON CONFLICT (guild_id) DO UPDATE SET ON CONFLICT (guild_id) DO UPDATE SET
channel_id = EXCLUDED.channel_id, channel_id = EXCLUDED.channel_id,
log_channel_id = EXCLUDED.log_channel_id` log_channel_id = EXCLUDED.log_channel_id`
+8 -6
View File
@@ -102,10 +102,13 @@ func (r *Repo) GetNotificationChannel(ctx context.Context, guildID int64) (int64
return chID.Int64, true, nil 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 { func (r *Repo) SetNotificationChannel(ctx context.Context, guildID, channelID int64) error {
const q = ` const q = `
INSERT INTO twitch_config (guild_id, twitch_channel_id) INSERT INTO twitch_config (guild_id, twitch_channel_id, enabled)
VALUES ($1, $2) VALUES ($1, $2, TRUE)
ON CONFLICT (guild_id) ON CONFLICT (guild_id)
DO UPDATE SET twitch_channel_id = EXCLUDED.twitch_channel_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. // IsEnabled reports whether Twitch notifications are enabled for guildID.
// A guild with no twitch_config row yet defaults to enabled, matching the // A guild with no twitch_config row yet is off: modules start off until
// column's own DEFAULT TRUE - "never configured" and "explicitly on" are // the server sets them up.
// the same state until someone actually flips it off.
func (r *Repo) IsEnabled(ctx context.Context, guildID int64) (bool, error) { func (r *Repo) IsEnabled(ctx context.Context, guildID int64) (bool, error) {
const q = `SELECT enabled FROM twitch_config WHERE guild_id = $1` const q = `SELECT enabled FROM twitch_config WHERE guild_id = $1`
var enabled bool var enabled bool
err := r.db.QueryRowContext(ctx, q, guildID).Scan(&enabled) err := r.db.QueryRowContext(ctx, q, guildID).Scan(&enabled)
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
return true, nil return false, nil
} }
if err != nil { if err != nil {
return false, err return false, err
+2 -2
View File
@@ -46,7 +46,7 @@ CREATE TABLE IF NOT EXISTS levelup (
CREATE TABLE IF NOT EXISTS twitch_config ( CREATE TABLE IF NOT EXISTS twitch_config (
guild_id BIGINT PRIMARY KEY, guild_id BIGINT PRIMARY KEY,
twitch_channel_id BIGINT, twitch_channel_id BIGINT,
enabled BOOLEAN NOT NULL DEFAULT TRUE enabled BOOLEAN NOT NULL DEFAULT FALSE
); );
CREATE TABLE IF NOT EXISTS rps ( 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) -- Tickets (mirror of velox-dashboard-api migration 000016_tickets)
CREATE TABLE IF NOT EXISTS ticket_settings ( CREATE TABLE IF NOT EXISTS ticket_settings (
guild_id BIGINT PRIMARY KEY, guild_id BIGINT PRIMARY KEY,
enabled BOOLEAN NOT NULL DEFAULT TRUE, enabled BOOLEAN NOT NULL DEFAULT FALSE,
channel_id BIGINT, channel_id BIGINT,
log_channel_id BIGINT, log_channel_id BIGINT,
panel_message_id BIGINT, panel_message_id BIGINT,