send mode impl, wip default guild/channel setting
This commit is contained in:
		
							parent
							
								
									10ba1af405
								
							
						
					
					
						commit
						7a69523b09
					
				
					 6 changed files with 173 additions and 20 deletions
				
			
		
							
								
								
									
										54
									
								
								commands/send.go
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								commands/send.go
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,54 @@
 | 
				
			||||||
 | 
					package commands
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Cynosphere/comcord/state"
 | 
				
			||||||
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
 | 
						"github.com/ergochat/readline"
 | 
				
			||||||
 | 
						"github.com/mgutz/ansi"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SendMode(session *discordgo.Session) {
 | 
				
			||||||
 | 
					  channelId := state.GetCurrentChannel()
 | 
				
			||||||
 | 
					  if channelId == "" {
 | 
				
			||||||
 | 
					    fmt.Print("<not in a channel>\n\r")
 | 
				
			||||||
 | 
					    return
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  state.SetInPrompt(true)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  length := len(session.State.User.Username) + 2
 | 
				
			||||||
 | 
					  curLength := state.GetNameLength()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  prompt := fmt.Sprintf("%s[%s]%s%s", ansi.ColorCode("cyan+b"), session.State.User.Username, strings.Repeat(" ", (curLength - length) + 1), ansi.ColorCode("reset"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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<no message sent>\n\r")
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      fmt.Print(prompt, "<no message sent>\n\r")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    fmt.Print(prompt, out, "\n\r")
 | 
				
			||||||
 | 
					    _, err := session.ChannelMessageSend(channelId, out)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if err != nil {
 | 
				
			||||||
 | 
					      fmt.Print("<failed to send message: ", err, ">\n\r")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // TODO: update afk state
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  state.SetInPrompt(false)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -3,13 +3,39 @@ package events
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/Cynosphere/comcord/state"
 | 
				
			||||||
	"github.com/bwmarrin/discordgo"
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
  "github.com/fatih/color"
 | 
						"github.com/mgutz/ansi"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Ready(session *discordgo.Session, event *discordgo.Ready) {
 | 
					func Ready(session *discordgo.Session, event *discordgo.Ready) {
 | 
				
			||||||
  fmt.Print("Logged in as: ")
 | 
					  fmt.Printf("\rLogged in as: %s%s (%s)%s\n\r", ansi.ColorCode("yellow"), session.State.User.Username, session.State.User.ID, ansi.ColorCode("reset"))
 | 
				
			||||||
  color.Set(color.FgYellow)
 | 
					
 | 
				
			||||||
  fmt.Printf("%s (%s)\n", session.State.User.Username, session.State.User.ID)
 | 
					  state.SetNameLength(len(session.State.User.Username) + 2)
 | 
				
			||||||
  color.Unset()
 | 
					
 | 
				
			||||||
 | 
					  defaultGuild := state.GetConfigValue("defaultGuild")
 | 
				
			||||||
 | 
					  defaultChannel := state.GetConfigValue("defaultChannel")
 | 
				
			||||||
 | 
					  if defaultGuild != "" {
 | 
				
			||||||
 | 
					    //var guild discordgo.Guild
 | 
				
			||||||
 | 
					    hasGuild := false
 | 
				
			||||||
 | 
					    for _, g := range session.State.Guilds {
 | 
				
			||||||
 | 
					      if g.ID == defaultGuild {
 | 
				
			||||||
 | 
					        //guild = *g
 | 
				
			||||||
 | 
					        hasGuild = true
 | 
				
			||||||
 | 
					        break
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if hasGuild {
 | 
				
			||||||
 | 
					      if defaultChannel != "" {
 | 
				
			||||||
 | 
					        state.SetCurrentChannel(defaultChannel)
 | 
				
			||||||
 | 
					        state.SetLastChannel(defaultGuild, defaultChannel)
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      fmt.Println("\r% This account is not in the defined default guild.")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if defaultChannel != "" {
 | 
				
			||||||
 | 
					      fmt.Println("\r% Default channel defined without defining default guild.")
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										9
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										9
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
					@ -6,10 +6,15 @@ require (
 | 
				
			||||||
	atomicgo.dev/keyboard v0.2.9 // indirect
 | 
						atomicgo.dev/keyboard v0.2.9 // indirect
 | 
				
			||||||
	github.com/bwmarrin/discordgo v0.27.1 // indirect
 | 
						github.com/bwmarrin/discordgo v0.27.1 // indirect
 | 
				
			||||||
	github.com/containerd/console v1.0.3 // indirect
 | 
						github.com/containerd/console v1.0.3 // indirect
 | 
				
			||||||
	github.com/fatih/color v1.15.0 // indirect
 | 
						github.com/ergochat/readline v0.0.5 // indirect
 | 
				
			||||||
	github.com/gorilla/websocket v1.4.2 // indirect
 | 
						github.com/gorilla/websocket v1.4.2 // indirect
 | 
				
			||||||
	github.com/mattn/go-colorable v0.1.13 // indirect
 | 
						github.com/mattn/go-colorable v0.1.13 // indirect
 | 
				
			||||||
	github.com/mattn/go-isatty v0.0.17 // indirect
 | 
						github.com/mattn/go-isatty v0.0.17 // indirect
 | 
				
			||||||
 | 
						github.com/mattn/go-runewidth v0.0.13 // indirect
 | 
				
			||||||
 | 
						github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect
 | 
				
			||||||
 | 
						github.com/rivo/uniseg v0.2.0 // indirect
 | 
				
			||||||
	golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
 | 
						golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b // indirect
 | 
				
			||||||
	golang.org/x/sys v0.6.0 // indirect
 | 
						golang.org/x/sys v0.10.0 // indirect
 | 
				
			||||||
 | 
						golang.org/x/term v0.10.0 // indirect
 | 
				
			||||||
 | 
						golang.org/x/text v0.9.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
					@ -10,10 +10,16 @@ github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYew
 | 
				
			||||||
github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
 | 
					github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
 | 
				
			||||||
github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
 | 
					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/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
 | 
				
			||||||
 | 
					github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
 | 
				
			||||||
 | 
					github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI=
 | 
				
			||||||
 | 
					github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk=
 | 
				
			||||||
 | 
					github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
 | 
				
			||||||
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
 | 
					github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
 | 
				
			||||||
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
 | 
					github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
 | 
				
			||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
					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/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
				
			||||||
 | 
					github.com/ergochat/readline v0.0.5 h1:PlmCLW9HUTnVfhFburg65pQUDKb0LB43G8hS+ygEkp8=
 | 
				
			||||||
 | 
					github.com/ergochat/readline v0.0.5/go.mod h1:8RNv74chpO0eTm6rdD1H6WZGihL5rJ+RfSlhv4fIfjg=
 | 
				
			||||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
 | 
					github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
 | 
				
			||||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
 | 
					github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
 | 
				
			||||||
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
 | 
					github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
 | 
				
			||||||
| 
						 | 
					@ -31,7 +37,13 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk
 | 
				
			||||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 | 
					github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 | 
				
			||||||
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
 | 
					github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
 | 
				
			||||||
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 | 
					github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 | 
				
			||||||
 | 
					github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 | 
				
			||||||
 | 
					github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
 | 
				
			||||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 | 
					github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
 | 
				
			||||||
 | 
					github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI=
 | 
				
			||||||
 | 
					github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
 | 
				
			||||||
 | 
					github.com/peterh/liner v1.2.2 h1:aJ4AOodmL+JxOZZEL2u9iJf8omNRpqHc/EbrK+3mAXw=
 | 
				
			||||||
 | 
					github.com/peterh/liner v1.2.2/go.mod h1:xFwJyiKIXJZUKItq5dGHZSTBRAuG/CpeNpWLyiNRNwI=
 | 
				
			||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
					github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
 | 
				
			||||||
github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI=
 | 
					github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI=
 | 
				
			||||||
github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg=
 | 
					github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg=
 | 
				
			||||||
| 
						 | 
					@ -40,12 +52,15 @@ github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEej
 | 
				
			||||||
github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE=
 | 
					github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE=
 | 
				
			||||||
github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8=
 | 
					github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8=
 | 
				
			||||||
github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s=
 | 
					github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s=
 | 
				
			||||||
 | 
					github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
 | 
				
			||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 | 
					github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 | 
				
			||||||
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 | 
					github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
 | 
				
			||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
					github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 | 
				
			||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
					github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
 | 
				
			||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
					github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
				
			||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
					github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
 | 
				
			||||||
 | 
					github.com/wader/readline v0.0.0-20230307172220-bcb7158e7448 h1:AzpBtmgdXa3uznrb3esNeEoaLqtNEwckRmaUH0qWD6w=
 | 
				
			||||||
 | 
					github.com/wader/readline v0.0.0-20230307172220-bcb7158e7448/go.mod h1:Zgz8IJWvJoe7NK23CCPpC109XMCqJCpUhpHcnnA4XaM=
 | 
				
			||||||
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
 | 
					github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
 | 
				
			||||||
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b h1:7mWr3k41Qtv8XlltBkDkl8LoP3mpSgBW8BUoxtEdbXg=
 | 
					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/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
 | 
				
			||||||
| 
						 | 
					@ -56,15 +71,26 @@ golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7w
 | 
				
			||||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
					golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20211117180635-dee7805ff2e1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
 | 
					golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
 | 
				
			||||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
					golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA=
 | 
				
			||||||
 | 
					golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 | 
				
			||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
					golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
				
			||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
					golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 | 
				
			||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
					golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 | 
				
			||||||
 | 
					golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c=
 | 
				
			||||||
 | 
					golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o=
 | 
				
			||||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 | 
					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/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
 | 
				
			||||||
 | 
					golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
 | 
				
			||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 | 
					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 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/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								main.go
									
										
									
									
									
								
							
							
						
						
									
										31
									
								
								main.go
									
										
									
									
									
								
							| 
						 | 
					@ -2,7 +2,7 @@ package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
"os"
 | 
						"os"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"atomicgo.dev/keyboard"
 | 
						"atomicgo.dev/keyboard"
 | 
				
			||||||
| 
						 | 
					@ -12,9 +12,16 @@ import (
 | 
				
			||||||
	"github.com/Cynosphere/comcord/rcfile"
 | 
						"github.com/Cynosphere/comcord/rcfile"
 | 
				
			||||||
	"github.com/Cynosphere/comcord/state"
 | 
						"github.com/Cynosphere/comcord/state"
 | 
				
			||||||
	"github.com/bwmarrin/discordgo"
 | 
						"github.com/bwmarrin/discordgo"
 | 
				
			||||||
 | 
						"golang.org/x/term"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func main() {
 | 
					func main() {
 | 
				
			||||||
 | 
					  oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
 | 
				
			||||||
 | 
					  if err != nil {
 | 
				
			||||||
 | 
					    panic(err)
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  defer term.Restore(int(os.Stdin.Fd()), oldState)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  var config map[string]string = make(map[string]string)
 | 
					  var config map[string]string = make(map[string]string)
 | 
				
			||||||
  var token string
 | 
					  var token string
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -48,13 +55,17 @@ func main() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  state.Setup()
 | 
					  fmt.Println("\rCOMcord (c)left 2023")
 | 
				
			||||||
 | 
					  fmt.Println("\rType 'h' for Commands")
 | 
				
			||||||
 | 
					  fmt.Print("\r")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  state.Setup(config)
 | 
				
			||||||
  commands.Setup()
 | 
					  commands.Setup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // TODO: user account support
 | 
					  // TODO: user account support
 | 
				
			||||||
  client, err := discordgo.New("Bot " + token)
 | 
					  client, err := discordgo.New("Bot " + token)
 | 
				
			||||||
  if err != nil {
 | 
					  if err != nil {
 | 
				
			||||||
    fmt.Println("% Failed to create client:", err)
 | 
					    fmt.Println("\r% Failed to create client:", err)
 | 
				
			||||||
    os.Exit(1)
 | 
					    os.Exit(1)
 | 
				
			||||||
    return
 | 
					    return
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
| 
						 | 
					@ -67,14 +78,11 @@ func main() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  err = client.Open()
 | 
					  err = client.Open()
 | 
				
			||||||
  if err != nil {
 | 
					  if err != nil {
 | 
				
			||||||
    fmt.Println("% Failed to connect to Discord:", err)
 | 
					    fmt.Println("\r% Failed to connect to Discord:", err)
 | 
				
			||||||
    os.Exit(1)
 | 
					    os.Exit(1)
 | 
				
			||||||
    return
 | 
					    return
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fmt.Println("COMcord (c)left 2023")
 | 
					 | 
				
			||||||
  fmt.Println("Type 'h' for Commands")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  keyboard.Listen(func(key keys.Key) (stop bool, err error) {
 | 
					  keyboard.Listen(func(key keys.Key) (stop bool, err error) {
 | 
				
			||||||
    if !state.IsInPrompt() {
 | 
					    if !state.IsInPrompt() {
 | 
				
			||||||
      if key.Code == keys.CtrlC {
 | 
					      if key.Code == keys.CtrlC {
 | 
				
			||||||
| 
						 | 
					@ -86,12 +94,17 @@ func main() {
 | 
				
			||||||
        if has {
 | 
					        if has {
 | 
				
			||||||
          command.Run(client)
 | 
					          command.Run(client)
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
 | 
					          commands.SendMode(client)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return false, nil
 | 
					    return false, nil
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/*sc := make(chan os.Signal, 1)
 | 
				
			||||||
 | 
						signal.Notify(sc, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
 | 
				
			||||||
 | 
						<-sc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  client.Close()*/
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,12 +7,13 @@ import (
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ComcordState struct {
 | 
					type ComcordState struct {
 | 
				
			||||||
 | 
					  Config map[string]string
 | 
				
			||||||
  Connected bool
 | 
					  Connected bool
 | 
				
			||||||
  RPCConnected bool
 | 
					  RPCConnected bool
 | 
				
			||||||
  StartTime int64
 | 
					  StartTime int64
 | 
				
			||||||
  CurrentGuild string
 | 
					  CurrentGuild string
 | 
				
			||||||
  CurrentChannel string
 | 
					  CurrentChannel string
 | 
				
			||||||
  NameLength int32
 | 
					  NameLength int
 | 
				
			||||||
  InPrompt bool
 | 
					  InPrompt bool
 | 
				
			||||||
  AFK bool
 | 
					  AFK bool
 | 
				
			||||||
  MessageQueue []discordgo.Message
 | 
					  MessageQueue []discordgo.Message
 | 
				
			||||||
| 
						 | 
					@ -22,16 +23,20 @@ type ComcordState struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var state ComcordState
 | 
					var state ComcordState
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func Setup() {
 | 
					func Setup(config map[string]string) {
 | 
				
			||||||
  state = ComcordState{}
 | 
					  state = ComcordState{}
 | 
				
			||||||
 | 
					  state.Config = config
 | 
				
			||||||
  state.Connected = true
 | 
					  state.Connected = true
 | 
				
			||||||
  state.RPCConnected = false
 | 
					  state.RPCConnected = false
 | 
				
			||||||
  state.StartTime = time.Now().Unix()
 | 
					  state.StartTime = time.Now().Unix()
 | 
				
			||||||
 | 
					  state.CurrentGuild = ""
 | 
				
			||||||
 | 
					  state.CurrentChannel = ""
 | 
				
			||||||
  state.NameLength = 2
 | 
					  state.NameLength = 2
 | 
				
			||||||
  state.InPrompt = false
 | 
					  state.InPrompt = false
 | 
				
			||||||
  state.AFK = false
 | 
					  state.AFK = false
 | 
				
			||||||
  state.MessageQueue = make([]discordgo.Message, 0)
 | 
					  state.MessageQueue = make([]discordgo.Message, 0)
 | 
				
			||||||
  state.LastChannel = make(map[string]string)
 | 
					  state.LastChannel = make(map[string]string)
 | 
				
			||||||
 | 
					  state.LastDM = ""
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func IsConnected() bool {
 | 
					func IsConnected() bool {
 | 
				
			||||||
| 
						 | 
					@ -70,11 +75,11 @@ func SetCurrentChannel(value string) {
 | 
				
			||||||
  state.CurrentChannel = value
 | 
					  state.CurrentChannel = value
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetNameLength() int32 {
 | 
					func GetNameLength() int {
 | 
				
			||||||
  return state.NameLength
 | 
					  return state.NameLength
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SetNameLength(value int32) {
 | 
					func SetNameLength(value int) {
 | 
				
			||||||
  state.NameLength = value
 | 
					  state.NameLength = value
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -102,6 +107,20 @@ func AddMessageToQueue(msg discordgo.Message) {
 | 
				
			||||||
  state.MessageQueue = append(state.MessageQueue, msg)
 | 
					  state.MessageQueue = append(state.MessageQueue, msg)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func SetLastChannel(guild string, channel string) {
 | 
				
			||||||
 | 
					  state.LastChannel[guild] = channel
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetLastChannel(guild string) string {
 | 
				
			||||||
 | 
					  channel, has := state.LastChannel[guild]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if has {
 | 
				
			||||||
 | 
					    return channel
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return ""
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetLastDM() string {
 | 
					func GetLastDM() string {
 | 
				
			||||||
  return state.LastDM
 | 
					  return state.LastDM
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -109,3 +128,13 @@ func GetLastDM() string {
 | 
				
			||||||
func SetLastDM(value string) {
 | 
					func SetLastDM(value string) {
 | 
				
			||||||
  state.LastDM = value
 | 
					  state.LastDM = value
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetConfigValue(key string) string {
 | 
				
			||||||
 | 
					  value, has := state.Config[key]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if has {
 | 
				
			||||||
 | 
					    return value
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    return ""
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue