emoji.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package database
  2. import (
  3. "database/sql"
  4. "errors"
  5. log "maunium.net/go/maulogger/v2"
  6. "maunium.net/go/mautrix/id"
  7. "maunium.net/go/mautrix/util/dbutil"
  8. )
  9. type Emoji struct {
  10. db *Database
  11. log log.Logger
  12. DiscordID string
  13. DiscordName string
  14. MatrixURL id.ContentURI
  15. }
  16. func (e *Emoji) Scan(row dbutil.Scannable) *Emoji {
  17. var matrixURL sql.NullString
  18. err := row.Scan(&e.DiscordID, &e.DiscordName, &matrixURL)
  19. if err != nil {
  20. if !errors.Is(err, sql.ErrNoRows) {
  21. e.log.Errorln("Database scan failed:", err)
  22. }
  23. return nil
  24. }
  25. e.MatrixURL, _ = id.ParseContentURI(matrixURL.String)
  26. return e
  27. }
  28. func (e *Emoji) Insert() {
  29. query := "INSERT INTO emoji" +
  30. " (discord_id, discord_name, matrix_url)" +
  31. " VALUES ($1, $2, $3);"
  32. _, err := e.db.Exec(query, e.DiscordID, e.DiscordName, e.MatrixURL.String())
  33. if err != nil {
  34. e.log.Warnfln("Failed to insert emoji %s: %v", e.DiscordID, err)
  35. }
  36. }
  37. func (e *Emoji) Delete() {
  38. query := "DELETE FROM emoji WHERE discord_id=$1"
  39. _, err := e.db.Exec(query, e.DiscordID)
  40. if err != nil {
  41. e.log.Warnfln("Failed to delete emoji %s: %v", e.DiscordID, err)
  42. }
  43. }
  44. func (e *Emoji) APIName() string {
  45. if e.DiscordID != "" && e.DiscordName != "" {
  46. return e.DiscordName + ":" + e.DiscordID
  47. }
  48. if e.DiscordName != "" {
  49. return e.DiscordName
  50. }
  51. return e.DiscordID
  52. }