Event based IRC client library in Go (golang)
e39cceace6
Due to some "golangish" code this library have possibility to run into data race when application is working with callbacks. This commit adds eventsMutex (which is a sync.Mutex), removed all "golangish" ifs-map reads, and wrap events map read with sync.Mutex to avoid data races. |
||
---|---|---|
examples/simple | ||
irc_callback.go | ||
irc_sasl_test.go | ||
irc_sasl.go | ||
irc_struct.go | ||
irc_test_fuzz.go | ||
irc_test.go | ||
irc.go | ||
LICENSE | ||
README.markdown |
Description
Event based irc client library.
Features
- Event based. Register Callbacks for the events you need to handle.
- Handles basic irc demands for you
- Standard CTCP
- Reconnections on errors
- Detect stoned servers
Install
$ go get github.com/thoj/go-ircevent
Example
See examples/simple/simple.go and irc_test.go
Events for callbacks
- 001 Welcome
- PING
- CTCP Unknown CTCP
- CTCP_VERSION Version request (Handled internaly)
- CTCP_USERINFO
- CTCP_CLIENTINFO
- CTCP_TIME
- CTCP_PING
- CTCP_ACTION (/me)
- PRIVMSG
- MODE
- JOIN
+Many more
AddCallback Example
ircobj.AddCallback("PRIVMSG", func(event *irc.Event) {
//event.Message() contains the message
//event.Nick Contains the sender
//event.Arguments[0] Contains the channel
});
Please note: Callbacks are run in the main thread. If a callback needs a long time to execute please run it in a new thread.
Example:
ircobj.AddCallback("PRIVMSG", func(event *irc.Event) {
go func(event *irc.Event) {
//event.Message() contains the message
//event.Nick Contains the sender
//event.Arguments[0] Contains the channel
}(event)
});
Commands
ircobj := irc.IRC("<nick>", "<user>") //Create new ircobj
//Set options
ircobj.UseTLS = true //default is false
//ircobj.TLSOptions //set ssl options
ircobj.Password = "[server password]"
//Commands
ircobj.Connect("irc.someserver.com:6667") //Connect to server
ircobj.SendRaw("<string>") //sends string to server. Adds \r\n
ircobj.SendRawf("<formatstring>", ...) //sends formatted string to server.n
ircobj.Join("<#channel> [password]")
ircobj.Nick("newnick")
ircobj.Privmsg("<nickname | #channel>", "msg") // sends a message to either a certain nick or a channel
ircobj.Privmsgf(<nickname | #channel>, "<formatstring>", ...)
ircobj.Notice("<nickname | #channel>", "msg")
ircobj.Noticef("<nickname | #channel>", "<formatstring>", ...)