goirc/README.md

71 lines
2.2 KiB
Markdown
Raw Normal View History

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:
2011-10-06 20:33:02 +00:00
import irc "github.com/fluffle/goirc/client"
func main() {
c := irc.New("nick", "ident", "real name")
// Optionally, turn on debugging
c.Debug = true
// Optionally, enable SSL
c.SSL = true
2011-07-22 00:26:41 +00:00
// Add handlers to do things here!
// e.g. join a channel on connect.
c.AddHandler("connected",
func(conn *irc.Conn, line *irc.Line) { conn.Join("#channel") })
2011-10-06 20:33:02 +00:00
// And a signal on disconnect
quit := make(chan bool)
c.AddHandler("disconnected),
func(conn *irc.Conn, line *irc.Line) { quit <- true }
2011-07-22 00:26:41 +00:00
// Tell client to connect
if err := c.Connect("irc.freenode.net"); err != nil {
2011-10-06 20:33:02 +00:00
fmt.Printf("Connection error: %s\n", err.String())
}
// Wait for disconnect
<-quit
}
2009-12-17 21:47:33 +00:00
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
`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.
[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.
2011-07-22 00:26:41 +00:00
This code is (c) 2009-11 Alex Bramley, and released under the same licence terms
2009-12-17 21:12:37 +00:00
as Go itself.