-- import "github.com/Elemental-IRCd/irc"
Package irc implements a basic IRC client for Go programs, following RFC 1459.
This does not keep track of channel state.
Usage example:
package main
import (
"github.com/Elemental-IRCd/irc"
)
func main() {
bot := irc.New("MyBot", "foosmith")
bot.UseTLS = true
bot.AddCallback("001", func(*irc.Event) {
bot.Join("#irc")
})
err := bot.Connect("irc.ponychat.net:6697")
if err != nil {
panic(err)
}
bot.Loop()
}
const (
VERSION = "Elemental-IRCd irc package 0.1"
)
The CTCP-VERSION reply that clients using this package will return.
var ErrDisconnected = errors.New("Disconnect Called")
This is thrown when another goroutine calls Disconnect.
type Connection struct {
sync.WaitGroup
Debug bool
Error chan error
Password string
UseTLS bool
TLSConfig *tls.Config
Version string
Timeout time.Duration
PingFreq time.Duration
KeepAlive time.Duration
Server string
VerboseCallbackHandler bool
Log *log.Logger
}
Connection is a single IRC connection to a remote server.
func New(nick, user string) *Connection
New creates a connection with the (publicly visible) nickname and username. The nickname is later used to address the user. Returns nil if nick or user are empty.
func (irc *Connection) Action(target, message string)
Action sends a CTCP-ACTION (/me) message to a target (channel or nickname). No clear RFC on this one...
func (irc *Connection) Actionf(target, format string, a ...interface{})
Actionf sends a CTCP-ACTION (/me) to a target (channel or nickname).
func (irc *Connection) AddCallback(eventcode string, callback func(*Event)) string
AddCallback registers a callback to a connection and event code. A callback is a function which takes only an Event pointer as parameter. Valid event codes are all IRC/CTCP commands and error/response codes. This function returns the ID of the registered callback for later management.
func (irc *Connection) ClearCallback(eventcode string) bool
ClearCallback removes all callbacks from a given event code. It returns true if given event code is found and cleared.
func (irc *Connection) Connect(server string) error
Connect to a given server using the current connection configuration. This function also takes care of identification if a password is provided. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1
func (irc *Connection) Connected() bool
Connected returns true if the connection is connected to an IRC server.
func (irc *Connection) Disconnect()
Disconnect sends all buffered messages (if possible), stops all goroutines and then closes the socket.
func (irc *Connection) ErrorChan() chan error
ErrorChan returns the connections error channel.
func (irc *Connection) GetNick() string
GetNick returns the nickname in use by the client.
func (irc *Connection) Join(channel string)
Join uses the connection to join a given channel. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.1
func (irc *Connection) Loop()
Loop is the main loop to control the connection.
func (irc *Connection) Mode(target string, modestring ...string)
Mode sets different modes for a target (channel or nickname). RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.3
func (irc *Connection) Nick(n string)
Nick changes the client nickname to the given value. This may fail, causing the server to return ERR_NICKNAMEINUSE or ERR_ERRONEUSNICKNAME. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1.2
func (irc *Connection) Notice(target, message string)
Notice send a notification to a nickname or channel. This is similar to Privmsg but must not receive replies. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.2
func (irc *Connection) Noticef(target, format string, a ...interface{})
Noticef sends a formated notification to a nickname or channel. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.2
func (irc *Connection) Part(channel string)
Part leaves a given channel. RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.2.2
func (irc *Connection) Privmsg(target, message string)
Privmsg sends a message to a target (channel or nickname). RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.4.1
func (irc *Connection) Privmsgf(target, format string, a ...interface{})
Privmsgf sends a formatted message to a specified target (channel or nickname).
func (irc *Connection) Quit()
Quit the current connection and disconnect from the server RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.1.6
func (irc *Connection) Reconnect() error
Reconnect to a server using the current connection.
func (irc *Connection) RemoveCallback(eventcode string, i string) bool
RemoveCallback removes callback i (ID) from the given event code. This functions returns true upon success, false if any error occurs.
func (irc *Connection) ReplaceCallback(eventcode string, i string, callback func(*Event))
ReplaceCallback replaces callback i (ID) associated with a given event code with a new callback function.
func (irc *Connection) RunCallbacks(event *Event)
RunCallbacks executes all callbacks associated with a given event.
func (irc *Connection) SendRaw(message string)
SendRaw sends a raw message across the wire.
func (irc *Connection) SendRawf(format string, a ...interface{})
SendRawf sends a formatted raw message across the wire.
func (irc *Connection) Who(target string)
Who fetches detailed information about a given target (nick or channel). RFC 1459 details: https://tools.ietf.org/html/rfc1459#section-4.5.1
func (irc *Connection) Whois(nick string)
Whois fetches information about a given client. RFC 1459: https://tools.ietf.org/html/rfc1459#section-4.5.2
type Event struct {
Code string
Raw string
Nick string //<nick>
Host string //<nick>!<usr>@<host>
Source string //<host>
User string //<usr>
Arguments []string
Connection *Connection
}
Event is a struct to represent an event.
func (e *Event) Message() string
Message retrieves the last message from Event arguments. This function leaves the arguments untouched and returns an empty string if there are none.