From 9c3f1ea5ffe9ad70caf306faff7a3e3948cef6ab Mon Sep 17 00:00:00 2001 From: Anhgelus Morhtuuzh Date: Mon, 9 Mar 2026 18:47:40 +0100 Subject: feat(config): preload role react --- config/role_react.go | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 config/role_react.go (limited to 'config/role_react.go') 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, + ) +} -- cgit v1.2.3