- Introduced a new default role service and repository for managing default roles assigned to new members. - Added command to set the default role through the bot's configuration. - Implemented event handling to assign the default role to new guild members upon joining. - Updated main application to include the new default role service in the bot's services.
48 lines
962 B
Go
48 lines
962 B
Go
package defaultrolerepo
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
type Repo struct {
|
|
db *sql.DB
|
|
}
|
|
|
|
func NewRepo(db *sql.DB) *Repo {
|
|
return &Repo{db: db}
|
|
}
|
|
|
|
// GetRole returns the configured default role ID for a guild, or 0 if none.
|
|
func (r *Repo) GetRole(ctx context.Context, guildID int64) (int64, error) {
|
|
const q = `
|
|
SELECT role_id
|
|
FROM defaultrole
|
|
WHERE guild_id = $1
|
|
`
|
|
var roleID sql.NullInt64
|
|
if err := r.db.QueryRowContext(ctx, q, guildID).Scan(&roleID); err != nil {
|
|
if err == sql.ErrNoRows {
|
|
return 0, nil
|
|
}
|
|
return 0, err
|
|
}
|
|
if !roleID.Valid {
|
|
return 0, nil
|
|
}
|
|
return roleID.Int64, nil
|
|
}
|
|
|
|
// SetRole upserts the default role for a guild.
|
|
func (r *Repo) SetRole(ctx context.Context, guildID, roleID int64) error {
|
|
const q = `
|
|
INSERT INTO defaultrole (guild_id, role_id)
|
|
VALUES ($1, $2)
|
|
ON CONFLICT (guild_id)
|
|
DO UPDATE SET role_id = EXCLUDED.role_id
|
|
`
|
|
_, err := r.db.ExecContext(ctx, q, guildID, roleID)
|
|
return err
|
|
}
|
|
|