emoji.go 1.3 KB

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