Event based IRC client library in Go (golang)
Go to file
Russ Garrett 6e51f3a4d0
Fix issue with SASL auth on some servers
On some servers SASL auth would fail because we didn't fully comply with
the spec. Multiple caps can be returned in a `CAP ACK`, and sometimes
servers add a trailing space. Parse these responses more correctly.
2019-03-01 10:20:59 +00:00
examples/simple fix import statement to correct repo name 2016-11-07 20:19:02 -06:00
irc_callback.go Merge pull request #104 from sadbox/parallel 2018-08-16 06:31:03 +02:00
irc_parse_test.go Run all callbacks in parallel 2018-05-18 15:19:14 -07:00
irc_sasl_test.go Run all callbacks in parallel 2018-05-18 15:19:14 -07:00
irc_sasl.go Fix issue with SASL auth on some servers 2019-03-01 10:20:59 +00:00
irc_struct.go Merge pull request #103 from sadbox/master 2018-08-16 06:30:43 +02:00
irc_test_fuzz.go Move fuzzing code to seperate file 2015-07-31 21:33:36 +02:00
irc_test.go Run all callbacks in parallel 2018-05-18 15:19:14 -07:00
irc.go Don’t send NICK and USER while negotiating caps 2019-02-21 22:31:06 +00:00
LICENSE LICENSE, Same as go itself. 2009-11-18 16:03:14 +01:00
README.markdown Link to example in README 2016-11-05 19:17:13 +01:00

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>", ...)