package main import ( "encoding/json" "io/ioutil" "net/http" "net/url" ) type Emojisp struct { Emojis Emojis `json:"emojis"` } type Emojis []Emoji type Emoji struct { Shortcode string `json:"shortcode"` Name string `json:"name"` Url string `json:"url"` // StaticUrl string `json:"static_url"` // VisibleInPicker bool `json:"visible_in_picker"` Category string `json:"category"` } func NewEmojiList(domain string) (Emojis, error) { emojis := Emojisp{} bytes, err := fetchCustomEmojis(domain) if err != nil { return emojis.Emojis, err } // fmt.Printf("%s\n", bytes) if err := json.Unmarshal(bytes, &emojis.Emojis); err != nil { if err = json.Unmarshal(bytes, &emojis); err != nil { return emojis.Emojis, err } } return emojis.Emojis, nil } func fetchCustomEmojis(domain string) ([]byte, error) { u, err := url.Parse("https://example.com/api/v1/custom_emojis") if err != nil { return nil, err } u.Host = domain resp, err := http.Get(u.String()) if resp.StatusCode != http.StatusOK { // Try Misskey API Endpoint u.Path = "/api/emojis" resp, err = http.Get(u.String()) } if err != nil { return nil, err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) }