https://github.com/darkliquid/goirc
Event-based stateful IRC client framework for Go.
https://github.com/darkliquid/goirc
Last synced: 6 months ago
JSON representation
Event-based stateful IRC client framework for Go.
- Host: GitHub
- URL: https://github.com/darkliquid/goirc
- Owner: darkliquid
- Fork: true (fluffle/goirc)
- Created: 2014-01-26T09:57:01.000Z (over 12 years ago)
- Default Branch: go1
- Last Pushed: 2014-02-01T23:47:27.000Z (over 12 years ago)
- Last Synced: 2024-06-20T12:51:01.035Z (about 2 years ago)
- Language: Go
- Homepage: http://www.pl0rt.org/code/goirc/
- Size: 777 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
GoIRC Client Framework
======================
### Acquiring and Building
Pretty simple, really:
go get github.com/darkliquid/goirc/client
There is some example code that demonstrates usage of the library in `client.go`. This will connect to freenode and join `#go-nuts` by default, so be careful ;-)
Please note: this branch has been feature-frozen for a while. Check out master
for some interesting (but not backwards-compatible) changes that will become
the new go1 branch when they're stable. See `fix/goirc.go` and the README there
for a quick way to migrate.
### Using the framework
Synopsis:
import "flag"
import irc "github.com/darkliquid/goirc/client"
func main() {
flag.Parse() // parses the logging flags.
c := irc.SimpleClient("nick")
// Optionally, enable SSL
c.SSL = true
// Add handlers to do things here!
// e.g. join a channel on connect.
c.AddHandler(irc.CONNECTED,
func(conn *irc.Conn, line *irc.Line) { conn.Join("#channel") })
// And a signal on disconnect
quit := make(chan bool)
c.AddHandler(irc.DISCONNECTED,
func(conn *irc.Conn, line *irc.Line) { quit <- true })
// Tell client to connect
if err := c.Connect("irc.freenode.net"); err != nil {
fmt.Printf("Connection error: %s\n", err.String())
}
// Wait for disconnect
<-quit
}
The test client provides a good (if basic) example of how to use the framework.
Reading `client/handlers.go` gives a more in-depth look at how handlers can be
written. Commands to be sent to the server (e.g. PRIVMSG) are methods of the
main `*Conn` struct, and can be found in `client/commands.go` (not all of the
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.
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. These
handers are in `client/state_handlers.go`. State tracking is optional, disabled
by default, and can be enabled and disabled by calling `EnableStateTracking()`
and `DisableStateTracking()` respectively. Doing this while connected to an IRC
server will probably result in an inconsistent state and a lot of warnings to
STDERR ;-)
### 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.
This code is (c) 2009-11 Alex Bramley, and released under the same licence terms
as Go itself.