aboutsummaryrefslogtreecommitdiff
path: root/config/role_react.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/role_react.go')
-rw-r--r--config/role_react.go124
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,
+ )
+}