2009-12-17 21:12:37 +00:00
|
|
|
GoIRC Client Framework
|
|
|
|
======================
|
|
|
|
|
|
|
|
### Acquiring and Building
|
|
|
|
|
|
|
|
Pretty simple, really:
|
|
|
|
|
2010-11-21 19:59:57 +00:00
|
|
|
goinstall github.com/fluffle/goirc
|
2009-12-17 21:12:37 +00:00
|
|
|
|
|
|
|
You can build the test client also with:
|
|
|
|
|
|
|
|
make
|
|
|
|
./gobot
|
|
|
|
|
2009-12-17 21:47:33 +00:00
|
|
|
This will connect to freenode and join `#go-nuts` by default, so be careful ;-)
|
2009-12-17 21:12:37 +00:00
|
|
|
|
|
|
|
### Using the framework
|
|
|
|
|
2009-12-17 21:47:33 +00:00
|
|
|
Synopsis:
|
|
|
|
|
2010-11-21 19:59:57 +00:00
|
|
|
import irc "github.com/fluffle/goirc/client"
|
2009-12-17 21:47:33 +00:00
|
|
|
func main() {
|
|
|
|
c := irc.New("nick", "ident", "real name")
|
2010-11-04 00:02:26 +00:00
|
|
|
// Optionally, turn on debugging
|
|
|
|
c.Debug = true
|
|
|
|
// Optionally, enable SSL
|
|
|
|
c.SSL = true
|
2009-12-17 21:47:33 +00:00
|
|
|
// add handlers to do things here!
|
2010-11-04 00:02:26 +00:00
|
|
|
if err := c.Connect("irc.freenode.net"); err != nil {
|
2009-12-17 21:47:33 +00:00
|
|
|
fmt.Printf("Connection error: %s\n", err.String())
|
|
|
|
}
|
|
|
|
for {
|
|
|
|
if closed(c.Err) {
|
|
|
|
break
|
|
|
|
}
|
|
|
|
if err := <-c.Err; err != nil {
|
|
|
|
fmt.Printf("goirc error: %s", err.String())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-12-17 21:12:37 +00:00
|
|
|
The test client provides a good (if basic) example of how to use the framework.
|
2010-11-21 19:59:57 +00:00
|
|
|
Reading `client/handlers.go` gives a more in-depth look at how handlers can be
|
2009-12-17 21:12:37 +00:00
|
|
|
written. Commands to be sent to the server (e.g. PRIVMSG) are methods of the
|
2010-11-21 19:59:57 +00:00
|
|
|
main `*Conn` struct, and can be found in `client/commands.go` (not all of the
|
2009-12-17 21:12:37 +00:00
|
|
|
possible IRC commands are implemented yet). Events are produced directly from
|
|
|
|
the messages from the IRC server, so you have to handle e.g. "332" for
|
2009-12-17 21:30:18 +00:00
|
|
|
`RPL_TOPIC` to get the topic for a channel.
|
2009-12-17 21:12:37 +00:00
|
|
|
|
2009-12-17 21:47:33 +00:00
|
|
|
The vast majority of handlers implemented within the framework deal with state
|
|
|
|
tracking of all nicks in any channels that the client is also present in. It's
|
2009-12-17 21:12:37 +00:00
|
|
|
likely that this state tracking will become optional in the near future.
|
|
|
|
|
|
|
|
### Misc.
|
|
|
|
|
|
|
|
Sorry the documentation is crap. Use the source, Luke.
|
|
|
|
|
2009-12-18 22:39:22 +00:00
|
|
|
[Feedback](mailto:a.bramley@gmail.com) on design decisions is welcome. I am
|
|
|
|
indebted to Matt Gruen for his work on
|
|
|
|
[go-bot](http://code.google.com/p/go-bot/source/browse/irc.go) which inspired
|
|
|
|
the re-organisation and channel-based communication structure of `*Conn.send()`
|
|
|
|
and `*Conn.recv()`. I'm sure things could be more asynchronous, still.
|
|
|
|
|
2010-11-04 00:02:26 +00:00
|
|
|
This code is (c) 2009-10 Alex Bramley, and released under the same licence terms
|
2009-12-17 21:12:37 +00:00
|
|
|
as Go itself.
|