diff options
| author | uakci <uakci@uakci.pl> | 2022-08-12 22:46:52 +0200 |
|---|---|---|
| committer | uakci <uakci@uakci.pl> | 2022-08-13 00:08:13 +0200 |
| commit | b12a53e327b8c85d1ada2ad9a299f03773d82d0b (patch) | |
| tree | 93d44eb6890ae07bebd4f7a68cd909180e0f0941 | |
| parent | pin go to an older version to prevent internal compiler error in the large ma... (diff) | |
| download | nuogai-b12a53e327b8c85d1ada2ad9a299f03773d82d0b.tar.gz nuogai-b12a53e327b8c85d1ada2ad9a299f03773d82d0b.zip | |
add zugai commands; refactor somewhat
| -rw-r--r-- | bot.go | 203 | ||||
| -rw-r--r-- | go.mod | 15 | ||||
| -rw-r--r-- | go.sum | 54 | ||||
| -rw-r--r-- | gomod2nix.toml | 41 |
4 files changed, 204 insertions, 109 deletions
@@ -25,9 +25,8 @@ import ( const ( lozenge = '▯' - myself = "490175530537058314" HELP = "\u2003**commands:**" + - "\n`%` — Toadūa lookup (3 results at a time)" + + "\n`%` — Toadua lookup (3 results at a time)" + "\n\u2003(`%37` — show 37 results at a time)" + "\n\u2003(`%!` — show one result, with extra info)" + "\n\u2003(`%!37` — show 37 results, with extra info)" + @@ -35,19 +34,14 @@ const ( "\n`%serial` — fagri's serial predicate engine" + "\n`%nui` — uakci's serial predicate engine" + "\n\u2003(`%serial` and `%nui` do not accept tone marks)" + - "\n`%hoe` — Hoelāı renderer (font version: v0.341)" + + "\n`%hoe` — Hoelaı renderer (font version: v0.341)" + "\n\u2003(`%hoe!` — same as above; raw input)" + "\n`%miu` — jelca's semantic parser" - UNKNOWN = "unknown command — see `%help` for help" ) -var ( - header = regexp.MustCompile(`^\*\*.*?\*\*: `) - whitespace = regexp.MustCompile(`[ ]+`) - toaPort string - spePort string - nuiPort string -) +var ports struct { + toa, spe, nui string +} func mustGetenv(name string) (env string) { env, ok := os.LookupEnv(name) @@ -58,9 +52,9 @@ func mustGetenv(name string) (env string) { } func init() { - spePort = mustGetenv("SPE_PORT") - nuiPort = mustGetenv("NUI_PORT") - toaPort = mustGetenv("TOA_PORT") + ports.spe = mustGetenv("SPE_PORT") + ports.nui = mustGetenv("NUI_PORT") + ports.toa = mustGetenv("TOA_PORT") } func min(a, b int) int { @@ -94,42 +88,66 @@ func post(uri string, ct string, body io.Reader) ([]byte, error) { return cont, nil } +type Response struct { + Text string + Image []byte +} + func Respond(dg *discordgo.Session, ms *discordgo.MessageCreate) { log.Printf("\n* %s", strings.Join(strings.Split(ms.Message.Content, "\n"), "\n ")) respond(ms.Message.Content, - func(i interface{}) { - switch t := i.(type) { - case string: - dg.ChannelMessageSend(ms.Message.ChannelID, t) - case []byte: - dg.ChannelMessageSendComplex(ms.Message.ChannelID, - &discordgo.MessageSend{ - "", nil, false, []*discordgo.File{ - &discordgo.File{ - "toaq.png", - "image/png", - bytes.NewReader(t), - }, - }, nil, nil, nil, - }) + func(r Response) { + files := make([]*discordgo.File, 0, 1) + if len(r.Image) > 0 { + files = append(files, &discordgo.File{ + Name: "toaq.png", + ContentType: "image/png", + Reader: bytes.NewReader(r.Image), + }) } + dg.ChannelMessageSendComplex(ms.Message.ChannelID, &discordgo.MessageSend{ + Content: r.Text, + Files: files, + }) }) } -func respond(message string, callback func(interface{})) { +func respond(message string, callback func(Response)) { + returnText := func(content string) { + callback(Response{ + Text: content, + }) + } + returnFromRequest := func(res []byte, err error) { + if err != nil { + log.Println(err) + returnText(err.Error()) + } else { + // silly check; probably gonna have to fix this upstream + if len(res) >= 8 && bytes.Equal(res[:8], []byte{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a}) { + callback(Response{ + Image: res, + }) + } else { + callback(Response{ + Text: string(res), + }) + } + } + } defer func() { if r := recover(); r != nil { fmt.Printf("%v", r) - callback("lủı sa hủı tủoı") + returnText("lủı sa hủı tủoı") } }() - message = strings.Trim( - header.ReplaceAllLiteralString(message, ""), - " \n") - parts := whitespace.Split(message, -1) + + message = strings.TrimSpace(message) + parts := strings.Fields(message) cmd, args, rest := parts[0], parts[1:], strings.Join(parts[1:], " ") + restQuery := url.QueryEscape(rest) if strings.HasPrefix(cmd, "?%") { - callback(cmd[1:] + " " + vietoaq.From(rest)) + returnText(cmd[1:] + " " + vietoaq.From(rest)) return } if strings.HasPrefix(cmd, "%") { @@ -154,52 +172,40 @@ func respond(message string, callback func(interface{})) { } if err == nil { if n >= 0 { - Toadua(args, callback, n, showNotes) + Toadua(args, returnText, n, showNotes) } else { - callback("less than zero, that's quite many") + returnText("less than zero, that's quite many") } return } } switch cmd { case "?": - if strings.HasPrefix(strings.Trim(rest, " \n"), "?") { + if strings.HasPrefix(strings.TrimSpace(rest), "?") { return } - callback(vietoaq.From(rest)) + returnText(vietoaq.From(rest)) case "%serial": if len(rest) == 0 { - callback("please supply input") - return - } - resp, err := get(fmt.Sprintf("http://localhost:%s/query?%s", spePort, rest)) - if err != nil { - log.Print(err) - callback("connectivity error") + returnText("please supply input") return } - callback(string(resp)) + returnFromRequest(get(fmt.Sprintf("http://localhost:%s/query?%s", ports.spe, restQuery))) case "%nui": if len(rest) == 0 { - callback("please supply input") - return - } - u, err := url.Parse(fmt.Sprintf("http://localhost:%s", nuiPort)) - resp, err := post(u.String(), "application/octet-stream", - bytes.NewBufferString(rest)) - if err != nil { - log.Print(err) - callback("connectivity error") + returnText("please supply input") return } - callback(string(resp)) + u, _ := url.Parse(fmt.Sprintf("http://localhost:%s", ports.nui)) + returnFromRequest(post(u.String(), "application/octet-stream", + bytes.NewBufferString(rest))) case "%help": - callback(HELP) + returnText(HELP) case "%)": - callback("(%") + returnText("(%") case "%hoe", "%hoe!": if len(rest) == 0 { - callback("please supply input") + returnText("please supply input") return } rest = strings.ReplaceAll(rest, "\t", "\\t") @@ -234,20 +240,22 @@ func respond(message string, callback func(interface{})) { "png:-").Output() if err != nil { log.Print(err) - callback("lủı sa tủoı") + returnText("lủı sa tủoı") return } - callback(out) + callback(Response{ + Image: out, + }) case "%miu": if len(rest) == 0 { - callback("please supply input") + returnText("please supply input") return } input := strings.TrimSpace(rest) p := ast.NewParser(input) text, err := p.Text() if err != nil { - callback("syntax error " + err.Error()) + returnText("syntax error " + err.Error()) return } parse := ast.BracesString(text) @@ -261,17 +269,48 @@ func respond(message string, callback func(interface{})) { } else { math = logic.PrettyString(stmt) } - callback(parse + math) - // default: - // if strings.HasPrefix(cmd, "%") { - // callback(UNKNOWN) - // } + returnText(parse + math) + case "%english", "%logic", "%structure": + returnFromRequest(get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", cmd[1:], restQuery))) + case "%tree": + file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery)) + if err != nil { + log.Println(err) + returnText(fmt.Sprintf("diagram not available: %s", err.Error())) + return + } + callback(Response{ + Image: file, + }) + case "%all": + sb := &strings.Builder{} + for i, name := range []string{"english", "structure", "logic"} { + res, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=%s&text=%s", name, restQuery)) + if err != nil { + log.Println(err) + returnText(err.Error()) + return + } + if i != 0 { + sb.WriteRune('\n') + } + sb.WriteString(strings.TrimSpace(string(res))) + } + file, err := get(fmt.Sprintf("https://zugai.toaq.me/zugai?to=xbar-png&text=%s", restQuery)) + if err != nil { + log.Println(err) + fmt.Fprintf(sb, "diagram not available: %v", err.Error()) + } + callback(Response{ + Text: sb.String(), + Image: file, + }) } } -func Toadua(args []string, callback func(interface{}), howMany int, showNotes bool) { +func Toadua(args []string, returnText func(string), howMany int, showNotes bool) { if len(args) == 0 { - callback("please supply a query") + returnText("please supply a query") return } page, err := strconv.Atoi(args[0]) @@ -290,14 +329,14 @@ func Toadua(args []string, callback func(interface{}), howMany int, showNotes bo }) if err != nil { log.Print(err) - callback("error") + returnText("error") return } - raw, err := http.Post(fmt.Sprintf(`http://localhost:%s/api`, toaPort), + raw, err := http.Post(fmt.Sprintf(`http://localhost:%s/api`, ports.toa), "application/json", bytes.NewReader(mars)) if err != nil { log.Print(err) - callback("connectivity error") + returnText(err.Error()) return } var resp struct { @@ -318,27 +357,27 @@ func Toadua(args []string, callback func(interface{}), howMany int, showNotes bo body, err := ioutil.ReadAll(raw.Body) if err != nil { log.Print(err) - callback("connectivity error") + returnText(err.Error()) return } err = json.Unmarshal(body, &resp) if err != nil { log.Print(err) - callback("parse error") + returnText("parse error") return } if !resp.Success { log.Print(resp.Error) - callback("search failed: " + resp.Error) + returnText("search failed: " + resp.Error) return } if len(resp.Entries) == 0 { - callback("results empty") + returnText("results empty") return } first := (page - 1) * howMany if len(resp.Entries) <= first { - callback(fmt.Sprintf("invalid page number (%d results)", len(resp.Entries))) + returnText(fmt.Sprintf("invalid page number (%d results)", len(resp.Entries))) return } last := min(first+howMany, len(resp.Entries)) @@ -377,12 +416,12 @@ func Toadua(args []string, callback func(interface{}), howMany int, showNotes bo old := soFar soFar = b.String() if len(soFar) > 2000 { - callback(old) + returnText(old) b.Reset() b.WriteString(soFar[len(old):]) } } - callback(b.String()) + returnText(b.String()) } func ToaduaQuery(s string) interface{} { @@ -1,9 +1,20 @@ module git.uakci.pl/toaq/nuogai -go 1.13 +go 1.17 require ( - github.com/bwmarrin/discordgo v0.23.2 + github.com/JohannesKaufmann/html-to-markdown v1.3.5 + github.com/bwmarrin/discordgo v0.25.0 github.com/eaburns/toaq v0.0.0-20210614121731-80ccb209650b golang.org/x/text v0.3.7 ) + +require ( + github.com/PuerkitoBio/goquery v1.5.1 // indirect + github.com/andybalholm/cascadia v1.1.0 // indirect + github.com/eaburns/peggy v1.0.0 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect + golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 // indirect + golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect +) @@ -1,5 +1,13 @@ -github.com/bwmarrin/discordgo v0.23.2 h1:BzrtTktixGHIu9Tt7dEE6diysEF9HWnXeHuoJEt2fH4= -github.com/bwmarrin/discordgo v0.23.2/go.mod h1:c1WtWUGN6nREDmzIpyTp/iD3VYt4Fpx+bVyfBG7JE+M= +github.com/JohannesKaufmann/html-to-markdown v1.3.5 h1:FrP3D5IqpxkNOk97TvbFduSo0JQKs/ZpgjuxpmAEFRA= +github.com/JohannesKaufmann/html-to-markdown v1.3.5/go.mod h1:JNSClIRYICFDiFhw6RBhBeWGnMSSKVZ6sPQA+TK4tyM= +github.com/PuerkitoBio/goquery v1.5.1 h1:PSPBGne8NIUWw+/7vFBV+kG2J/5MOjbzc7154OaKCSE= +github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= +github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo= +github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y= +github.com/bwmarrin/discordgo v0.25.0 h1:NXhdfHRNxtwso6FPdzW2i3uBvvU7UIQTghmV2T4nqAs= +github.com/bwmarrin/discordgo v0.25.0/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/eaburns/peggy v1.0.0 h1:cvZIO5GGq2Qy1l1Va0Mte6LFVTY6GtAGbzSvouFcjUk= github.com/eaburns/peggy v1.0.0/go.mod h1:X2pbl0EV5erfnK8kSGwo0lBCgMGokvR1E6KerAoDKXg= github.com/eaburns/pretty v1.0.0 h1:00W1wrrtMXUSqLPN0txS8j7g9qFXy6nA5vZVqVQOo6w= @@ -8,12 +16,46 @@ github.com/eaburns/toaq v0.0.0-20210614121731-80ccb209650b h1:2mu0jEGoRhKMpkHMIn github.com/eaburns/toaq v0.0.0-20210614121731-80ccb209650b/go.mod h1:FKayyKQuuBv0TnmWcuGr0MNMLeqpWLskPHeRWIEihoM= github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sebdah/goldie/v2 v2.5.1 h1:hh70HvG4n3T3MNRJN2z/baxPR8xutxo7JVxyi2svl+s= +github.com/sebdah/goldie/v2 v2.5.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/velour/chat v0.0.0-20180713122344-fd1d1606cb89/go.mod h1:ejwOYCjnDMyO5LXFXRARQJGBZ6xQJZ3rgAHE5drSuMM= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16 h1:y6ce7gCWtnH+m3dCjzQ1PCuwl28DDIc3VNnvY29DlIA= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +github.com/yuin/goldmark v1.2.0 h1:WOOcyaJPlzb8fZ8TloxFe8QZkhOOJx87leDa9MIT9dc= +github.com/yuin/goldmark v1.2.0/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg= +golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200320220750-118fecf932d8/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= +gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/gomod2nix.toml b/gomod2nix.toml index 057fd50..f024818 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -1,33 +1,36 @@ -schema = 1 +schema = 3 [mod] + [mod."github.com/JohannesKaufmann/html-to-markdown"] + version = "v1.3.5" + hash = "sha256-4iVI80RTN8ZysUkCYa9vEq2M2kEMCG6OCwKG8Og/Xmg=" + [mod."github.com/PuerkitoBio/goquery"] + version = "v1.5.1" + hash = "sha256-GqxIdhuN1L3enT8pNlWm+rmkdN5uMfF8TfpxhAHhEDQ=" + [mod."github.com/andybalholm/cascadia"] + version = "v1.1.0" + hash = "sha256-mL40/Q9iXBzzMHwMomqTOpp9rnI/MRsufb5cIU1MMPg=" [mod."github.com/bwmarrin/discordgo"] - version = "v0.23.2" - hash = "sha256-yb+pC0SfqTZEgkYcBbpIhEjgAjr2pf9slve8mWtn47s=" + version = "v0.25.0" + hash = "sha256-GKaTov5xrWZwdOyfGAtzJ84+Fbmd5bBHli/nMazTkjs=" [mod."github.com/eaburns/peggy"] version = "v1.0.0" hash = "sha256-L12jxdzIUNojdi2zhJbharGckTrsogifdTxsQuflLkQ=" - [mod."github.com/eaburns/pretty"] - version = "v1.0.0" - hash = "sha256-FpEhv4LBEs4gWnPWuodLfI09ePVsFpLG6C+aWVZeuDU=" [mod."github.com/eaburns/toaq"] version = "v0.0.0-20210614121731-80ccb209650b" hash = "sha256-OTfouK200vqAwXE5mz7Yxec5qhjkxnGOU+xr1IAkdUc=" - [mod."github.com/google/go-cmp"] - version = "v0.3.1" - hash = "sha256-oUPl5ojctSzSgOSdWB3HeQ5NOcTFtXly7HLSC2IiXLE=" [mod."github.com/gorilla/websocket"] - version = "v1.4.1" - hash = "sha256-+yo/0+zSqf2/dPZyp/9so21r7cfMx1yhxmmOzy2wwQ4=" - [mod."github.com/velour/chat"] - version = "v0.0.0-20180713122344-fd1d1606cb89" - hash = "sha256-pr0+BC/SNcajsJm57GjMDoc59GRX+yHD+9FmaGQLsqs=" + version = "v1.4.2" + hash = "sha256-GhBLM/XTm2lFCyDvJbnCLAI2OyYXQV6W+jRPOQ1PdVY=" [mod."golang.org/x/crypto"] - version = "v0.0.0-20181030102418-4d3f4d9ffa16" - hash = "sha256-SIDwR1LoOc67PhvZFazkZSph9rUvuKy1MEFhbqp8emk=" + version = "v0.0.0-20210421170649-83a5a9bb288b" + hash = "sha256-/yDFKCgawG9Othmh5y0O3Vx79JH2t4N7ecp1Nr+Li3o=" + [mod."golang.org/x/net"] + version = "v0.0.0-20210226172049-e18ecbb05110" + hash = "sha256-4u7XpPV+Ersntau6zUiLuNsZQZCIIZs3RouHYl/I02o=" + [mod."golang.org/x/sys"] + version = "v0.0.0-20201119102817-f84b799fce68" + hash = "sha256-EH5wVq9wsiELXlF4f/22eOyOtHrU3XZfTxyXHvCfeVM=" [mod."golang.org/x/text"] version = "v0.3.7" hash = "sha256-XH2pUzzQx95O0rak00grQvfACfL+EmZiV7ZzJBkX+XY=" - [mod."golang.org/x/tools"] - version = "v0.0.0-20180917221912-90fa682c2a6e" - hash = "sha256-NPoE7uVvwjV2PRIxI3DpegOZc8IuUs4XUJuH3ubKHJg=" |
