🎉 It works

This commit is contained in:
Dan Jones 2024-05-03 11:34:39 -05:00
commit 107968803c
5 changed files with 114 additions and 0 deletions

3
go.mod Normal file
View file

@ -0,0 +1,3 @@
module codeberg.org/danjones000/slackmojidl
go 1.22.2

84
main.go Normal file
View file

@ -0,0 +1,84 @@
package main
import (
"encoding/json"
"fmt"
"io"
"net/http"
"os"
"path"
"codeberg.org/danjones000/slackmojidl/models"
)
func die(v any) {
fmt.Fprintln(os.Stderr, v)
os.Exit(1)
}
func main() {
if len(os.Args) < 2 {
die("Missing JSON file")
}
if len(os.Args) < 3 {
die("Missing directory")
}
dir := os.Args[2]
by, err := os.ReadFile(os.Args[1])
if err != nil {
die(err)
}
list := models.List{}
err = json.Unmarshal(by, &list)
if err != nil {
die(err)
}
for _, emoji := range list.Emoji {
dl(dir, emoji)
saveJson(dir, emoji)
}
}
func dl(dir string, emoji models.Emoji) {
ext := path.Ext(emoji.Url)
outPath := path.Join(dir, emoji.Name+"."+ext)
out, err := os.Create(outPath)
if err != nil {
die(err)
}
defer out.Close()
resp, err := http.Get(emoji.Url)
if err != nil {
die(err)
}
defer resp.Body.Close()
_, err = io.Copy(out, resp.Body)
if err != nil {
die(err)
}
fmt.Println("Saved", emoji.Name, "to", outPath)
}
func saveJson(dir string, emoji models.Emoji) {
outPath := path.Join(dir, emoji.Name+".json")
out, err := os.Create(outPath)
if err != nil {
die(err)
}
defer out.Close()
enc := json.NewEncoder(out)
enc.SetIndent("", " ")
enc.Encode(emoji)
fmt.Println("Saved data to ", outPath)
}

11
models/emoji.go Normal file
View file

@ -0,0 +1,11 @@
package models
type Emoji struct {
Name string `json:"name"`
IsAlias uint16 `json:"is_alias"`
AliasFor string `json:"alias_for"`
Url string `json:"url"`
IsBad bool `json:"is_bad"`
Synonyms []string `json:"synonyms"`
UserDisplayName string `json:"user_display_name"`
}

8
models/list.go Normal file
View file

@ -0,0 +1,8 @@
package models
type List struct {
Ok bool
Emoji []Emoji
DisabledEmoji []any `json:"disabled_emoji"`
Paging Paging
}

8
models/paging.go Normal file
View file

@ -0,0 +1,8 @@
package models
type Paging struct {
Count uint32
Total uint32
Page uint32
Pages uint32
}