diff --git a/README.md b/README.md index 03e2353..07d8591 100644 --- a/README.md +++ b/README.md @@ -13,12 +13,12 @@ Go is more portable than Node.js ## TODO - [x] Send mode -- [x] Commands +- [ ] Commands - [x] Quit (q) - [ ] Switch guilds (G) - [ ] Switch channels (g) - [ ] List online users in guild (w) - - [x] Emote (e) + - [ ] Emote (e) - Just sends message surrounded in `*`'s - [ ] Finger (f) - Shows presence data if available @@ -28,8 +28,8 @@ Go is more portable than Node.js - [ ] Peek (p) - [ ] Cross-guild peek (P) - [ ] List channels (l) - - [x] List guilds (L) - - [x] Clear (c) + - [ ] List guilds (L) + - [ ] Clear (c) - [ ] Surf channels forwards (>) - [ ] Surf channels backwards (<) - [ ] AFK toggle (A) diff --git a/commands/emote.go b/commands/emote.go deleted file mode 100644 index 5c151c2..0000000 --- a/commands/emote.go +++ /dev/null @@ -1,37 +0,0 @@ -package commands - -import ( - "fmt" - - "github.com/Cynosphere/comcord/lib" - "github.com/Cynosphere/comcord/state" - "github.com/bwmarrin/discordgo" -) - -func EmoteCommand(session *discordgo.Session) { - channelId := state.GetCurrentChannel() - if channelId == "" { - fmt.Print("\n\r") - return - } - - prompt := ":emote> " - lib.MakePrompt(session, prompt, true, func(session *discordgo.Session, input string, interrupt bool) { - if input == "" { - if interrupt { - fmt.Print("^C\n\r") - } else { - fmt.Print(prompt, "\n\r") - } - } else { - fmt.Print(prompt, input, "\n\r") - _, err := session.ChannelMessageSend(channelId, "*" + input + "*") - - if err != nil { - fmt.Print("\n\r") - } - - // TODO: update afk state - } - }) -} diff --git a/commands/guild.go b/commands/guild.go deleted file mode 100644 index 1ec1d17..0000000 --- a/commands/guild.go +++ /dev/null @@ -1,52 +0,0 @@ -package commands - -import ( - "fmt" - "strings" - "unicode/utf8" - - "github.com/bwmarrin/discordgo" -) - -type GuildListing struct { - Name string - Members int - Online int -} - -func ListGuildsCommand(session *discordgo.Session) { - longest := 0 - guilds := make([]GuildListing, 0) - - for _, guild := range session.State.Guilds { - length := utf8.RuneCountInString(guild.Name) - if length > longest { - longest = length - } - - guildWithCounts, err := session.GuildWithCounts(guild.ID) - if err != nil { - guilds = append(guilds, GuildListing{ - Name: guild.Name, - Members: guild.MemberCount, - Online: 0, - }) - return - } - - guilds = append(guilds, GuildListing{ - Name: guild.Name, - Members: guildWithCounts.ApproximateMemberCount, - Online: guildWithCounts.ApproximatePresenceCount, - }) - } - - fmt.Print("\n\r") - fmt.Printf(" %*s online total\n\r", longest, "guild-name") - fmt.Print(strings.Repeat("-", 80) + "\n\r") - for _, guild := range guilds { - fmt.Printf(" %*s %6d %5d\n\r", longest, guild.Name, guild.Online, guild.Members) - } - fmt.Print(strings.Repeat("-", 80) + "\n\r") - fmt.Print("\n\r") -} diff --git a/commands/main.go b/commands/main.go index bb7e524..916ff01 100644 --- a/commands/main.go +++ b/commands/main.go @@ -26,16 +26,6 @@ func Setup() { Run: ClearCommand, Description: "clear", } - - commandMap["e"] = Command{ - Run: EmoteCommand, - Description: "emote", - } - - commandMap["L"] = Command{ - Run: ListGuildsCommand, - Description: "list guilds", - } } func GetCommand(key string) (Command, bool) { diff --git a/commands/send.go b/commands/send.go index fedc660..fba8a53 100644 --- a/commands/send.go +++ b/commands/send.go @@ -8,6 +8,7 @@ import ( "github.com/Cynosphere/comcord/lib" "github.com/Cynosphere/comcord/state" "github.com/bwmarrin/discordgo" + "github.com/ergochat/readline" "github.com/mgutz/ansi" ) @@ -18,6 +19,8 @@ func SendMode(session *discordgo.Session) { return } + state.SetInPrompt(true) + length := utf8.RuneCountInString(session.State.User.Username) + 2 curLength := state.GetNameLength() @@ -26,22 +29,32 @@ func SendMode(session *discordgo.Session) { prompt = ansi.Color(prompt, "cyan+b") } - lib.MakePrompt(session, prompt, true, func(session *discordgo.Session, input string, interrupt bool) { - if input == "" { - if interrupt { - fmt.Print("^C\n\r") - } else { - fmt.Print(prompt, "\n\r") - } - } else { - fmt.Print(prompt, input, "\n\r") - _, err := session.ChannelMessageSend(channelId, input) - - if err != nil { - fmt.Print("\n\r") - } - - // TODO: update afk state - } + input, _ := readline.NewFromConfig(&readline.Config{ + Prompt: prompt, + UniqueEditLine: true, }) + defer input.Close() + + out, err := input.Readline() + out = strings.TrimSpace(out) + input.Close() + + if out == "" { + if err == readline.ErrInterrupt { + fmt.Print("^C\n\r") + } else { + fmt.Print(prompt, "\n\r") + } + } else { + fmt.Print(prompt, out, "\n\r") + _, err := session.ChannelMessageSend(channelId, out) + + if err != nil { + fmt.Print("\n\r") + } + + // TODO: update afk state + } + state.SetInPrompt(false) + lib.ProcessQueue(session) } diff --git a/events/ready.go b/events/ready.go index 42380bb..911c8d9 100644 --- a/events/ready.go +++ b/events/ready.go @@ -4,7 +4,6 @@ import ( "fmt" "unicode/utf8" - "github.com/Cynosphere/comcord/commands" "github.com/Cynosphere/comcord/state" "github.com/bwmarrin/discordgo" "github.com/mgutz/ansi" @@ -15,8 +14,6 @@ func Ready(session *discordgo.Session, event *discordgo.Ready) { state.SetNameLength(utf8.RuneCountInString(session.State.User.Username) + 2) - commands.ListGuildsCommand(session) - defaultGuild := state.GetConfigValue("defaultGuild") defaultChannel := state.GetConfigValue("defaultChannel") if defaultGuild != "" { diff --git a/lib/prompt.go b/lib/prompt.go deleted file mode 100644 index a85709f..0000000 --- a/lib/prompt.go +++ /dev/null @@ -1,33 +0,0 @@ -package lib - -import ( - "strings" - - "github.com/Cynosphere/comcord/state" - "github.com/bwmarrin/discordgo" - "github.com/ergochat/readline" -) - -func MakePrompt(session *discordgo.Session, prompt string, uniqueLine bool, callback func(session *discordgo.Session, input string, interrupt bool)) { - state.SetInPrompt(true) - state.SetPromptText(prompt) - - rl, _ := readline.NewFromConfig(&readline.Config{ - Prompt: prompt, - UniqueEditLine: uniqueLine, - }) - defer rl.Close() - - input, err := rl.Readline() - input = strings.TrimSpace(input) - rl.Close() - - interrupt := err == readline.ErrInterrupt - - callback(session, input, interrupt) - - state.SetInPrompt(false) - state.SetPromptText("") - - ProcessQueue(session) -} diff --git a/state/main.go b/state/main.go index cd63ec8..4499601 100644 --- a/state/main.go +++ b/state/main.go @@ -15,7 +15,6 @@ type ComcordState struct { CurrentChannel string NameLength int InPrompt bool - PromptText string AFK bool MessageQueue []*discordgo.Message LastChannel map[string]string @@ -35,7 +34,6 @@ func Setup(config map[string]string) { state.CurrentChannel = "" state.NameLength = 2 state.InPrompt = false - state.PromptText = "" state.AFK = false state.MessageQueue = make([]*discordgo.Message, 0) state.LastChannel = make(map[string]string) @@ -95,14 +93,6 @@ func SetInPrompt(value bool) { state.InPrompt = value } -func GetPromptText() string { - return state.PromptText -} - -func SetPromptText(value string) { - state.PromptText = value -} - func IsAFK() bool { return state.AFK }