-- 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) *ConnectionNew 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)) stringAddCallback 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) boolClearCallback 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) errorConnect 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() boolConnected 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 errorErrorChan returns the connections error channel.
func (irc *Connection) GetNick() stringGetNick 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() errorReconnect to a server using the current connection.
func (irc *Connection) RemoveCallback(eventcode string, i string) boolRemoveCallback 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() stringMessage retrieves the last message from Event arguments. This function leaves the arguments untouched and returns an empty string if there are none.