1
0

emojis.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package main
  2. import (
  3. "encoding/json"
  4. "io/ioutil"
  5. "net/http"
  6. "net/url"
  7. )
  8. type Emojisp struct {
  9. Emojis Emojis `json:"emojis"`
  10. }
  11. type Emojis []Emoji
  12. type Emoji struct {
  13. Shortcode string `json:"shortcode"`
  14. Name string `json:"name"`
  15. Url string `json:"url"`
  16. // StaticUrl string `json:"static_url"`
  17. // VisibleInPicker bool `json:"visible_in_picker"`
  18. Category string `json:"category"`
  19. }
  20. func NewEmojiList(domain string) (Emojis, error) {
  21. emojis := Emojisp{}
  22. bytes, err := fetchCustomEmojis(domain)
  23. if err != nil {
  24. return emojis.Emojis, err
  25. }
  26. // fmt.Printf("%s\n", bytes)
  27. if err := json.Unmarshal(bytes, &emojis.Emojis); err != nil {
  28. if err = json.Unmarshal(bytes, &emojis); err != nil {
  29. return emojis.Emojis, err
  30. }
  31. }
  32. return emojis.Emojis, nil
  33. }
  34. func fetchCustomEmojis(domain string) ([]byte, error) {
  35. u, err := url.Parse("https://example.com/api/v1/custom_emojis")
  36. if err != nil {
  37. return nil, err
  38. }
  39. u.Host = domain
  40. resp, err := http.Get(u.String())
  41. if resp.StatusCode != http.StatusOK {
  42. // Try Misskey API Endpoint
  43. u.Path = "/api/emojis"
  44. resp, err = http.Get(u.String())
  45. }
  46. if err != nil {
  47. return nil, err
  48. }
  49. defer resp.Body.Close()
  50. return ioutil.ReadAll(resp.Body)
  51. }