summaryrefslogtreecommitdiff
path: root/vendor/github.com/fluffle/goirc/client.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/fluffle/goirc/client.go')
-rw-r--r--vendor/github.com/fluffle/goirc/client.go104
1 files changed, 104 insertions, 0 deletions
diff --git a/vendor/github.com/fluffle/goirc/client.go b/vendor/github.com/fluffle/goirc/client.go
new file mode 100644
index 0000000..b71d706
--- /dev/null
+++ b/vendor/github.com/fluffle/goirc/client.go
@@ -0,0 +1,104 @@
+package main
+
+import (
+ "bufio"
+ "flag"
+ "fmt"
+ "os"
+ "strings"
+
+ irc "github.com/fluffle/goirc/client"
+ "github.com/fluffle/goirc/logging/glog"
+)
+
+var host *string = flag.String("host", "irc.freenode.net", "IRC server")
+var channel *string = flag.String("channel", "#go-nuts", "IRC channel")
+
+func main() {
+ flag.Parse()
+ glog.Init()
+
+ // create new IRC connection
+ c := irc.SimpleClient("GoTest", "gotest")
+ c.EnableStateTracking()
+ c.HandleFunc("connected",
+ func(conn *irc.Conn, line *irc.Line) { conn.Join(*channel) })
+
+ // Set up a handler to notify of disconnect events.
+ quit := make(chan bool)
+ c.HandleFunc("disconnected",
+ func(conn *irc.Conn, line *irc.Line) { quit <- true })
+
+ // set up a goroutine to read commands from stdin
+ in := make(chan string, 4)
+ reallyquit := false
+ go func() {
+ con := bufio.NewReader(os.Stdin)
+ for {
+ s, err := con.ReadString('\n')
+ if err != nil {
+ // wha?, maybe ctrl-D...
+ close(in)
+ break
+ }
+ // no point in sending empty lines down the channel
+ if len(s) > 2 {
+ in <- s[0 : len(s)-1]
+ }
+ }
+ }()
+
+ // set up a goroutine to do parsey things with the stuff from stdin
+ go func() {
+ for cmd := range in {
+ if cmd[0] == ':' {
+ switch idx := strings.Index(cmd, " "); {
+ case cmd[1] == 'd':
+ fmt.Printf(c.String())
+ case cmd[1] == 'n':
+ parts := strings.Split(cmd, " ")
+ username := strings.TrimSpace(parts[1])
+ channelname := strings.TrimSpace(parts[2])
+ _, userIsOn := c.StateTracker().IsOn(channelname, username)
+ fmt.Printf("Checking if %s is in %s Online: %t\n", username, channelname, userIsOn)
+ case cmd[1] == 'f':
+ if len(cmd) > 2 && cmd[2] == 'e' {
+ // enable flooding
+ c.Config().Flood = true
+ } else if len(cmd) > 2 && cmd[2] == 'd' {
+ // disable flooding
+ c.Config().Flood = false
+ }
+ for i := 0; i < 20; i++ {
+ c.Privmsg("#", "flood test!")
+ }
+ case idx == -1:
+ continue
+ case cmd[1] == 'q':
+ reallyquit = true
+ c.Quit(cmd[idx+1 : len(cmd)])
+ case cmd[1] == 's':
+ reallyquit = true
+ c.Close()
+ case cmd[1] == 'j':
+ c.Join(cmd[idx+1 : len(cmd)])
+ case cmd[1] == 'p':
+ c.Part(cmd[idx+1 : len(cmd)])
+ }
+ } else {
+ c.Raw(cmd)
+ }
+ }
+ }()
+
+ for !reallyquit {
+ // connect to server
+ if err := c.ConnectTo(*host); err != nil {
+ fmt.Printf("Connection error: %s\n", err)
+ return
+ }
+
+ // wait on quit channel
+ <-quit
+ }
+}