package settingsrepo import ( "context" "database/sql" ) type Repo struct { db *sql.DB } func NewRepo(db *sql.DB) *Repo { return &Repo{db: db} } func (r *Repo) SetLevelSystemEnabled(ctx context.Context, guildID int64, enabled bool) error { const q = ` INSERT INTO levelsettings (guild_id, levelsys) VALUES ($1, $2) ON CONFLICT (guild_id) DO UPDATE SET levelsys = EXCLUDED.levelsys ` _, err := r.db.ExecContext(ctx, q, guildID, enabled) return err } func (r *Repo) IsLevelSystemEnabled(ctx context.Context, guildID int64) (bool, error) { const q = ` SELECT levelsys FROM levelsettings WHERE guild_id = $1 ` row := r.db.QueryRowContext(ctx, q, guildID) var enabled bool switch err := row.Scan(&enabled); err { case nil: return enabled, nil case sql.ErrNoRows: return false, nil default: return false, err } } func (r *Repo) GetLevelupChannelID(ctx context.Context, guildID int64) (int64, bool, error) { const q = ` SELECT levelup_channel_id FROM levelup WHERE guild_id = $1 ` row := r.db.QueryRowContext(ctx, q, guildID) var channelID sql.NullInt64 switch err := row.Scan(&channelID); err { case nil: if !channelID.Valid { return 0, false, nil } return channelID.Int64, true, nil case sql.ErrNoRows: return 0, false, nil default: return 0, false, err } } func (r *Repo) GetRoleRewardForLevel(ctx context.Context, guildID int64, level int) (roleID int64, ok bool, err error) { const q = ` SELECT role FROM levelrewards WHERE guild_id = $1 AND levelreq = $2 ` row := r.db.QueryRowContext(ctx, q, guildID, level) var role sql.NullInt64 switch err := row.Scan(&role); err { case nil: if !role.Valid { return 0, false, nil } return role.Int64, true, nil case sql.ErrNoRows: return 0, false, nil default: return 0, false, err } } func (r *Repo) SetRoleRewardForLevel(ctx context.Context, guildID int64, level int, roleID int64) error { const q = ` INSERT INTO levelrewards (guild_id, levelreq, role) VALUES ($1, $2, $3) ON CONFLICT (guild_id, levelreq) DO UPDATE SET role = EXCLUDED.role ` _, err := r.db.ExecContext(ctx, q, guildID, level, roleID) return err } func (r *Repo) SetLevelUpChannel(ctx context.Context, guildID int64, channelID int64) error { const q = ` INSERT INTO levelup (guild_id, levelup_channel_id) VALUES ($1, $2) ON CONFLICT (guild_id) DO UPDATE SET levelup_channel_id = EXCLUDED.levelup_channel_id ` _, err := r.db.ExecContext(ctx, q, guildID, channelID) return err } func (r *Repo) SetLevelUpMessage(ctx context.Context, guildID int64, message string) error { const q = ` UPDATE levelsettings SET message = $1 WHERE guild_id = $2 ` _, err := r.db.ExecContext(ctx, q, message, guildID) return err } func (r *Repo) GetLevelUpMessage(ctx context.Context, guildID int64) (string, error) { const q = ` SELECT message FROM levelsettings WHERE guild_id = $1 ` row := r.db.QueryRowContext(ctx, q, guildID) var message sql.NullString switch err := row.Scan(&message); err { case nil: if !message.Valid { return "GG {user}, you reached level {level}!", nil } return message.String, nil case sql.ErrNoRows: return "GG {user}, you reached level {level}!", nil default: return "", err } }