From 7152ea59fadebf22ea26a9ad61703604395611ff Mon Sep 17 00:00:00 2001 From: Cynthia Foxwell Date: Wed, 31 May 2023 20:16:58 -0600 Subject: [PATCH] initial rewrite commit no functionality besides rc file loading and printing token --- README.md | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 10 ++++++++++ go.sum | 12 ++++++++++++ main.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ rcfile.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 165 insertions(+) create mode 100644 README.md create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 rcfile.go diff --git a/README.md b/README.md new file mode 100644 index 0000000..0315ce4 --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# comcord (`rewrite-go`) +A CLI-based client for Discord inspired by [SDF](https://sdf.org)'s [commode](https://sdf.org/?tutorials/comnotirc). + +## Why? +1. All CLI/TUI Discord clients are outdated/unmaintained or have flaws. +2. I've been spending more time in commode on SDF and have been accustomed to the experience. + +## Usage +TODO + +## Rewrite Design Decisions +Go is more portable than Node.js + +## TODO +- [ ] Send mode +- [ ] Commands + - [ ] Quit (q) + - [ ] Switch guilds (G) + - [ ] Switch channels (g) + - [ ] List online users in guild (w) + - [ ] Emote (e) + - Just sends message surrounded in `*`'s + - [ ] Finger (f) + - Shows presence data if available + - Creation date, join date, ID, etc + - [ ] Room history (r) + - [ ] Extended room history (R) + - [ ] List channels (l) + - [ ] List guilds (L) + - [ ] Clear (c) + - [ ] Surf channels forwards (>) + - [ ] Surf channels backwards (<) + - [ ] AFK toggle (A) + - [ ] Send DM (s) + - [ ] Answer DM (a) +- [ ] Message Receiving + - Markdown styling + - [ ] Emotes + - [ ] Timestamp parsing + - [ ] Mentions parsing + - [ ] Embeds in the style of commode's posted links + - [ ] Messages wrapped in `*`'s or `_`'s parsed as emotes + - [ ] Inline DMs to replicate commode's private messages + - [ ] Replies + - [ ] Group DMs +- [ ] Message sending + - [ ] Puts incoming messages into queue whilst in send mode +- [ ] Configuration + - [ ] Write token from argv into rc file if rc file doesn't exist + - [ ] Default guild/channel +- [ ] Threads +- [ ] External rich presence when using bot accounts diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..69184d1 --- /dev/null +++ b/go.mod @@ -0,0 +1,10 @@ +module github.com/Cynosphere/comcord + +go 1.20 + +require ( + github.com/bwmarrin/discordgo v0.27.1 // indirect + github.com/gorilla/websocket v1.4.2 // indirect + golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect + golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..05dcc79 --- /dev/null +++ b/go.sum @@ -0,0 +1,12 @@ +github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY= +github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= +github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= +github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +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-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +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.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/main.go b/main.go new file mode 100644 index 0000000..eee1261 --- /dev/null +++ b/main.go @@ -0,0 +1,44 @@ +package main + +import ( + "fmt" + "os" + "strings" + + "github.com/bwmarrin/discordgo" +) + +func main() { + var config map[string]string = make(map[string]string) + var token string + + homeDir, homeErr := os.UserHomeDir() + if homeErr != nil { + panic(homeErr) + } + RCPATH := GetRCPath() + + _, rcErr := os.Stat(RCPATH) + if !os.IsNotExist(rcErr) { + fmt.Printf("%% Reading %s ...\n", strings.Replace(RCPATH, homeDir, "~", 1)) + config = LoadRCFile() + } + + if len(os.Args) > 1 { + token = os.Args[1] + if os.IsNotExist(rcErr) { + fmt.Println("% Writing token to ~/.comcordrc") + config["token"] = token + SaveRCFile(config) + } + } else { + configToken, tokenInConfig := config["token"] + if tokenInConfig { + token = configToken + } else { + fmt.Println("No token provided.") + os.Exit(1) + } + } + fmt.Println(token) +} diff --git a/rcfile.go b/rcfile.go new file mode 100644 index 0000000..1106ab0 --- /dev/null +++ b/rcfile.go @@ -0,0 +1,47 @@ +package main + +import ( + "os" + "path/filepath" + "strings" +) + +func GetRCPath() string { + homeDir, err := os.UserHomeDir() + if err != nil { + panic(err) + } + + return filepath.Join(homeDir, ".comcordrc") +} + +func LoadRCFile() map[string]string { + config := make(map[string]string) + file, err := os.ReadFile(GetRCPath()) + if err != nil { + panic(err) + } + + lines := strings.Split(string(file), "\n") + for _, line := range lines { + kvs := strings.Split(line, "=") + if len(kvs) == 2 { + config[kvs[0]] = kvs[1] + } + } + + return config +} + +func SaveRCFile(config map[string]string) { + out := "" + + for key, value := range config { + out = out + key + "=" + value + "\n" + } + + err := os.WriteFile(GetRCPath(), []byte(out), 0644) + if err != nil { + panic(err) + } +}