diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2026-03-09 18:47:40 +0100 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2026-03-09 18:47:40 +0100 |
| commit | 9c3f1ea5ffe9ad70caf306faff7a3e3948cef6ab (patch) | |
| tree | d7931c65a40a7bf22764473c0dd330f83a4bc071 /config/role_react.go | |
| parent | 6e92feaba23a4992e0ec4b529660921a6bcb492a (diff) | |
feat(config): preload role reactfeat/leave-gorm
Diffstat (limited to 'config/role_react.go')
| -rw-r--r-- | config/role_react.go | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/config/role_react.go b/config/role_react.go new file mode 100644 index 0000000..70e6cb0 --- /dev/null +++ b/config/role_react.go @@ -0,0 +1,124 @@ +package config + +import ( + "context" + "database/sql" + + "git.anhgelus.world/anhgelus/les-copaings-bot/common" +) + +type RoleReactMessage struct { + MessageID uint64 + ChannelID uint64 + GuildID uint64 + Note string + Roles []*RoleReact +} + +func (rrm *RoleReactMessage) Load(ctx context.Context, db *sql.DB, rows *sql.Rows) error { + err := rows.Scan(&rrm.MessageID, &rrm.ChannelID, &rrm.GuildID, &rrm.Note) + if err != nil { + return err + } + rrm.Roles, err = getRoleReacts(ctx, db, rrm.MessageID) + return err +} + +func (rrm *RoleReactMessage) Save(ctx context.Context, db *sql.DB) error { + _, err := db.ExecContext( + ctx, + `INSERT INTO role_react_messages (message_id, channel_id, guild_id, note) VALUES (?, ?, ?, ?)`, + rrm.MessageID, rrm.ChannelID, rrm.GuildID, rrm.Note, + ) + return err +} + +func (rrm *RoleReactMessage) Delete(ctx context.Context, db *sql.DB) error { + _, err := db.ExecContext( + ctx, + `DELETE FROM role_react_messages WHERE message_id = ?`, + rrm.MessageID, + ) + return err +} + +func getRoleReactMessages(ctx context.Context, db *sql.DB, gID uint64) ([]*RoleReactMessage, error) { + return common.GetValues[*RoleReactMessage]( + ctx, + db, + `role_react_messages`, + `message_id, channel_id, guild_id, note`, + `guild_id = ?`, gID, + ) +} + +type RoleReact struct { + ID uint + Reaction string + RoleID uint64 + MessageID uint + CounterID uint +} + +/*func (rr *RoleReact) Load(ctx context.Context, db *sql.DB) error { + row := db.QueryRowContext( + ctx, + `SELECT role, message_id, reaction FROM role_reacts WHERE id = ?`, + rr.ID, + ) + err := row.Err() + + if err == nil { + return row.Scan(&rr.RoleID, &rr.MessageID, &rr.Reaction) + } + + if !errors.Is(err, sql.ErrNoRows) { + return err + } + res, err := db.ExecContext( + ctx, + `INSERT INTO role_reacts (role, message_id, reaction) VALUES (?, ?, ?)`, + rr.RoleID, rr.MessageID, rr.Reaction, + ) + if err != nil { + return err + } + idr, err := res.LastInsertId() + if err != nil { + return err + } + rr.ID = uint(idr) + return nil +}*/ + +func (rr *RoleReact) Save(ctx context.Context, db *sql.DB) error { + _, err := db.ExecContext( + ctx, + `UPDATE role_reacts SET role = ?, reaction = ? VALUES (?, ?) WHERE id = ?`, + rr.RoleID, rr.Reaction, rr.ID, + ) + return err +} + +func (rr *RoleReact) Delete(ctx context.Context, db *sql.DB) error { + _, err := db.ExecContext( + ctx, + `DELETE FROM role_reacts WHERE id = ?`, + rr.ID, + ) + return err +} + +func (rr *RoleReact) Load(_ context.Context, _ *sql.DB, rows *sql.Rows) error { + return rows.Scan(&rr.ID, &rr.MessageID, &rr.Reaction, &rr.RoleID) +} + +func getRoleReacts(ctx context.Context, db *sql.DB, mID uint64) ([]*RoleReact, error) { + return common.GetValues[*RoleReact]( + ctx, + db, + `role_reacts`, + `id, message_id, reaction, role_id`, + `message_id = ?`, mID, + ) +} |
