irc

package
v1.4.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 16, 2014 License: MIT Imports: 22 Imported by: 2

Documentation

Index

Constants

View Source
const (
	IDLE_TIMEOUT = time.Minute // how long before a client is considered idle
	QUIT_TIMEOUT = time.Minute // how long after idle before a client is kicked
)
View Source
const (
	SEM_VER       = "ergonomadic-1.4.4"
	CRLF          = "\r\n"
	MAX_REPLY_LEN = 512 - len(CRLF)

	// string codes
	AWAY    StringCode = "AWAY"
	CAP     StringCode = "CAP"
	DEBUG   StringCode = "DEBUG"
	ERROR   StringCode = "ERROR"
	INVITE  StringCode = "INVITE"
	ISON    StringCode = "ISON"
	JOIN    StringCode = "JOIN"
	KICK    StringCode = "KICK"
	KILL    StringCode = "KILL"
	LIST    StringCode = "LIST"
	MODE    StringCode = "MODE"
	MOTD    StringCode = "MOTD"
	NAMES   StringCode = "NAMES"
	NICK    StringCode = "NICK"
	NOTICE  StringCode = "NOTICE"
	ONICK   StringCode = "ONICK"
	OPER    StringCode = "OPER"
	PART    StringCode = "PART"
	PASS    StringCode = "PASS"
	PING    StringCode = "PING"
	PONG    StringCode = "PONG"
	PRIVMSG StringCode = "PRIVMSG"
	PROXY   StringCode = "PROXY"
	QUIT    StringCode = "QUIT"
	THEATER StringCode = "THEATER" // nonstandard
	TIME    StringCode = "TIME"
	TOPIC   StringCode = "TOPIC"
	USER    StringCode = "USER"
	VERSION StringCode = "VERSION"
	WHO     StringCode = "WHO"
	WHOIS   StringCode = "WHOIS"
	WHOWAS  StringCode = "WHOWAS"

	// numeric codes
	RPL_WELCOME           NumericCode = 1
	RPL_YOURHOST          NumericCode = 2
	RPL_CREATED           NumericCode = 3
	RPL_MYINFO            NumericCode = 4
	RPL_BOUNCE            NumericCode = 5
	RPL_TRACELINK         NumericCode = 200
	RPL_TRACECONNECTING   NumericCode = 201
	RPL_TRACEHANDSHAKE    NumericCode = 202
	RPL_TRACEUNKNOWN      NumericCode = 203
	RPL_TRACEOPERATOR     NumericCode = 204
	RPL_TRACEUSER         NumericCode = 205
	RPL_TRACESERVER       NumericCode = 206
	RPL_TRACESERVICE      NumericCode = 207
	RPL_TRACENEWTYPE      NumericCode = 208
	RPL_TRACECLASS        NumericCode = 209
	RPL_TRACERECONNECT    NumericCode = 210
	RPL_STATSLINKINFO     NumericCode = 211
	RPL_STATSCOMMANDS     NumericCode = 212
	RPL_ENDOFSTATS        NumericCode = 219
	RPL_UMODEIS           NumericCode = 221
	RPL_SERVLIST          NumericCode = 234
	RPL_SERVLISTEND       NumericCode = 235
	RPL_STATSUPTIME       NumericCode = 242
	RPL_STATSOLINE        NumericCode = 243
	RPL_LUSERCLIENT       NumericCode = 251
	RPL_LUSEROP           NumericCode = 252
	RPL_LUSERUNKNOWN      NumericCode = 253
	RPL_LUSERCHANNELS     NumericCode = 254
	RPL_LUSERME           NumericCode = 255
	RPL_ADMINME           NumericCode = 256
	RPL_ADMINLOC1         NumericCode = 257
	RPL_ADMINLOC2         NumericCode = 258
	RPL_ADMINEMAIL        NumericCode = 259
	RPL_TRACELOG          NumericCode = 261
	RPL_TRACEEND          NumericCode = 262
	RPL_TRYAGAIN          NumericCode = 263
	RPL_AWAY              NumericCode = 301
	RPL_USERHOST          NumericCode = 302
	RPL_ISON              NumericCode = 303
	RPL_UNAWAY            NumericCode = 305
	RPL_NOWAWAY           NumericCode = 306
	RPL_WHOISUSER         NumericCode = 311
	RPL_WHOISSERVER       NumericCode = 312
	RPL_WHOISOPERATOR     NumericCode = 313
	RPL_WHOWASUSER        NumericCode = 314
	RPL_ENDOFWHO          NumericCode = 315
	RPL_WHOISIDLE         NumericCode = 317
	RPL_ENDOFWHOIS        NumericCode = 318
	RPL_WHOISCHANNELS     NumericCode = 319
	RPL_LIST              NumericCode = 322
	RPL_LISTEND           NumericCode = 323
	RPL_CHANNELMODEIS     NumericCode = 324
	RPL_UNIQOPIS          NumericCode = 325
	RPL_NOTOPIC           NumericCode = 331
	RPL_TOPIC             NumericCode = 332
	RPL_INVITING          NumericCode = 341
	RPL_SUMMONING         NumericCode = 342
	RPL_INVITELIST        NumericCode = 346
	RPL_ENDOFINVITELIST   NumericCode = 347
	RPL_EXCEPTLIST        NumericCode = 348
	RPL_ENDOFEXCEPTLIST   NumericCode = 349
	RPL_VERSION           NumericCode = 351
	RPL_WHOREPLY          NumericCode = 352
	RPL_NAMREPLY          NumericCode = 353
	RPL_LINKS             NumericCode = 364
	RPL_ENDOFLINKS        NumericCode = 365
	RPL_ENDOFNAMES        NumericCode = 366
	RPL_BANLIST           NumericCode = 367
	RPL_ENDOFBANLIST      NumericCode = 368
	RPL_ENDOFWHOWAS       NumericCode = 369
	RPL_INFO              NumericCode = 371
	RPL_MOTD              NumericCode = 372
	RPL_ENDOFINFO         NumericCode = 374
	RPL_MOTDSTART         NumericCode = 375
	RPL_ENDOFMOTD         NumericCode = 376
	RPL_YOUREOPER         NumericCode = 381
	RPL_REHASHING         NumericCode = 382
	RPL_YOURESERVICE      NumericCode = 383
	RPL_TIME              NumericCode = 391
	RPL_USERSSTART        NumericCode = 392
	RPL_USERS             NumericCode = 393
	RPL_ENDOFUSERS        NumericCode = 394
	RPL_NOUSERS           NumericCode = 395
	ERR_NOSUCHNICK        NumericCode = 401
	ERR_NOSUCHSERVER      NumericCode = 402
	ERR_NOSUCHCHANNEL     NumericCode = 403
	ERR_CANNOTSENDTOCHAN  NumericCode = 404
	ERR_TOOMANYCHANNELS   NumericCode = 405
	ERR_WASNOSUCHNICK     NumericCode = 406
	ERR_TOOMANYTARGETS    NumericCode = 407
	ERR_NOSUCHSERVICE     NumericCode = 408
	ERR_NOORIGIN          NumericCode = 409
	ERR_INVALIDCAPCMD     NumericCode = 410
	ERR_NORECIPIENT       NumericCode = 411
	ERR_NOTEXTTOSEND      NumericCode = 412
	ERR_NOTOPLEVEL        NumericCode = 413
	ERR_WILDTOPLEVEL      NumericCode = 414
	ERR_BADMASK           NumericCode = 415
	ERR_UNKNOWNCOMMAND    NumericCode = 421
	ERR_NOMOTD            NumericCode = 422
	ERR_NOADMININFO       NumericCode = 423
	ERR_FILEERROR         NumericCode = 424
	ERR_NONICKNAMEGIVEN   NumericCode = 431
	ERR_ERRONEUSNICKNAME  NumericCode = 432
	ERR_NICKNAMEINUSE     NumericCode = 433
	ERR_NICKCOLLISION     NumericCode = 436
	ERR_UNAVAILRESOURCE   NumericCode = 437
	ERR_USERNOTINCHANNEL  NumericCode = 441
	ERR_NOTONCHANNEL      NumericCode = 442
	ERR_USERONCHANNEL     NumericCode = 443
	ERR_NOLOGIN           NumericCode = 444
	ERR_SUMMONDISABLED    NumericCode = 445
	ERR_USERSDISABLED     NumericCode = 446
	ERR_NOTREGISTERED     NumericCode = 451
	ERR_NEEDMOREPARAMS    NumericCode = 461
	ERR_ALREADYREGISTRED  NumericCode = 462
	ERR_NOPERMFORHOST     NumericCode = 463
	ERR_PASSWDMISMATCH    NumericCode = 464
	ERR_YOUREBANNEDCREEP  NumericCode = 465
	ERR_YOUWILLBEBANNED   NumericCode = 466
	ERR_KEYSET            NumericCode = 467
	ERR_CHANNELISFULL     NumericCode = 471
	ERR_UNKNOWNMODE       NumericCode = 472
	ERR_INVITEONLYCHAN    NumericCode = 473
	ERR_BANNEDFROMCHAN    NumericCode = 474
	ERR_BADCHANNELKEY     NumericCode = 475
	ERR_BADCHANMASK       NumericCode = 476
	ERR_NOCHANMODES       NumericCode = 477
	ERR_BANLISTFULL       NumericCode = 478
	ERR_NOPRIVILEGES      NumericCode = 481
	ERR_CHANOPRIVSNEEDED  NumericCode = 482
	ERR_CANTKILLSERVER    NumericCode = 483
	ERR_RESTRICTED        NumericCode = 484
	ERR_UNIQOPPRIVSNEEDED NumericCode = 485
	ERR_NOOPERHOST        NumericCode = 491
	ERR_UMODEUNKNOWNFLAG  NumericCode = 501
	ERR_USERSDONTMATCH    NumericCode = 502
)
View Source
const (
	R = '→'
	W = '←'
)

Variables

View Source
var (
	ErrNickMissing      = errors.New("nick missing")
	ErrNicknameInUse    = errors.New("nickname in use")
	ErrNicknameMismatch = errors.New("nickname mismatch")
)
View Source
var (
	NotEnoughArgsError = errors.New("not enough arguments")
	ErrParseCommand    = errors.New("failed to parse message")
)
View Source
var (
	// regexps
	ChannelNameExpr = regexp.MustCompile(`^[&!#+][\pL\pN]{1,63}$`)
	NicknameExpr    = regexp.MustCompile("^[\\pL\\pN\\pP\\pS]{1,32}$")
)
View Source
var (
	EmptyPasswordError = errors.New("empty password")
)
View Source
var (
	Log = NewLogging("warn")
)
View Source
var (
	SupportedCapabilities = CapabilitySet{
		MultiPrefix: true,
	}
)
View Source
var (
	SupportedUserModes = UserModes{
		Away, Invisible, Operator,
	}
)

Functions

func ComparePassword added in v1.2.13

func ComparePassword(hash, password []byte) error

func DecodePassword added in v1.2.13

func DecodePassword(encoded string) (decoded []byte, err error)

func GenerateEncodedPassword added in v1.2.13

func GenerateEncodedPassword(passwd string) (encoded string, err error)

func HasWildcards added in v1.3.1

func HasWildcards(mask string) bool

func InitDB added in v1.2.13

func InitDB(path string)

func NewLogger added in v1.4.1

func NewLogger(on bool) *log.Logger

func NewNumericReply

func NewNumericReply(target *Client, code NumericCode,
	format string, args ...interface{}) string

func NewStringReply

func NewStringReply(source Identifiable, code StringCode,
	format string, args ...interface{}) string

func OpenDB added in v1.2.13

func OpenDB(path string) *sql.DB

func QuoteLike added in v1.3.1

func QuoteLike(userhost Name) string

func RplCTCPAction added in v1.4.1

func RplCTCPAction(source Identifiable, target Identifiable, action CTCPText) string

func RplCap added in v1.2.15

func RplCap(client *Client, subCommand CapSubCommand, arg interface{}) string

func RplChannelMode

func RplChannelMode(client *Client, channel *Channel,
	changes ChannelModeChanges) string

func RplCurrentMode added in v1.4.2

func RplCurrentMode(client *Client, target *Client) string

func RplError

func RplError(message string) string

func RplInviteMsg

func RplInviteMsg(inviter *Client, invitee *Client, channel Name) string

func RplJoin

func RplJoin(client *Client, channel *Channel) string

func RplKick

func RplKick(channel *Channel, client *Client, target *Client, comment Text) string

func RplKill

func RplKill(client *Client, target *Client, comment Text) string

func RplModeChanges added in v1.4.2

func RplModeChanges(client *Client, target *Client, changes ModeChanges) string

func RplNick

func RplNick(source Identifiable, newNick Name) string

func RplNotice

func RplNotice(source Identifiable, target Identifiable, message Text) string

func RplPart

func RplPart(client *Client, channel *Channel, message Text) string

func RplPing

func RplPing(target Identifiable) string

func RplPong

func RplPong(client *Client, msg Text) string

func RplPrivMsg

func RplPrivMsg(source Identifiable, target Identifiable, message Text) string

func RplQuit

func RplQuit(client *Client, message Text) string

func RplTopicMsg

func RplTopicMsg(source Identifiable, channel *Channel) string

func UpgradeDB added in v1.3.1

func UpgradeDB(path string)

Types

type AwayCommand

type AwayCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*AwayCommand) HandleServer

func (msg *AwayCommand) HandleServer(server *Server)

type BaseCommand

type BaseCommand struct {
	// contains filtered or unexported fields
}

func (*BaseCommand) Client

func (command *BaseCommand) Client() *Client

func (*BaseCommand) Code

func (command *BaseCommand) Code() StringCode

func (*BaseCommand) SetClient

func (command *BaseCommand) SetClient(client *Client)

func (*BaseCommand) SetCode

func (command *BaseCommand) SetCode(code StringCode)

type CTCPText added in v1.4.1

type CTCPText string

CTCPText is text suitably escaped for CTCP.

func NewCTCPText added in v1.4.1

func NewCTCPText(str string) CTCPText

type CapCommand

type CapCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*CapCommand) HandleRegServer

func (msg *CapCommand) HandleRegServer(server *Server)

type CapModifier added in v1.2.14

type CapModifier rune

CapModifiers are indicators showing the state of a capability after a REQ or ACK.

const (
	Ack     CapModifier = '~'
	Disable CapModifier = '-'
	Sticky  CapModifier = '='
)

func (CapModifier) String added in v1.2.14

func (mod CapModifier) String() string

type CapState added in v1.2.14

type CapState uint
const (
	CapNone        CapState = iota
	CapNegotiating CapState = iota
	CapNegotiated  CapState = iota
)

type CapSubCommand added in v1.2.14

type CapSubCommand string
const (
	CAP_LS    CapSubCommand = "LS"
	CAP_LIST  CapSubCommand = "LIST"
	CAP_REQ   CapSubCommand = "REQ"
	CAP_ACK   CapSubCommand = "ACK"
	CAP_NAK   CapSubCommand = "NAK"
	CAP_CLEAR CapSubCommand = "CLEAR"
	CAP_END   CapSubCommand = "END"
)

type Capability added in v1.2.14

type Capability string

Capabilities are optional features a client may request from a server.

const (
	MultiPrefix Capability = "multi-prefix"
	SASL        Capability = "sasl"
)

func (Capability) String added in v1.2.15

func (capability Capability) String() string

type CapabilitySet added in v1.2.14

type CapabilitySet map[Capability]bool

func (CapabilitySet) DisableString added in v1.2.15

func (set CapabilitySet) DisableString() string

func (CapabilitySet) String added in v1.2.14

func (set CapabilitySet) String() string

type Channel

type Channel struct {
	// contains filtered or unexported fields
}

func NewChannel

func NewChannel(s *Server, name Name) *Channel

NewChannel creates a new channel from a `Server` and a `name` string, which must be unique on the server.

func (*Channel) CanSpeak

func (channel *Channel) CanSpeak(client *Client) bool

func (*Channel) CheckKey

func (channel *Channel) CheckKey(key Text) bool

func (*Channel) ClientIsOperator

func (channel *Channel) ClientIsOperator(client *Client) bool

func (*Channel) GetTopic

func (channel *Channel) GetTopic(client *Client)

func (*Channel) Id

func (channel *Channel) Id() Name

func (*Channel) Invite

func (channel *Channel) Invite(invitee *Client, inviter *Client)

func (*Channel) IsEmpty

func (channel *Channel) IsEmpty() bool

func (*Channel) IsFull

func (channel *Channel) IsFull() bool

func (*Channel) Join

func (channel *Channel) Join(client *Client, key Text)

func (*Channel) Kick

func (channel *Channel) Kick(client *Client, target *Client, comment Text)

func (*Channel) Mode

func (channel *Channel) Mode(client *Client, changes ChannelModeChanges)

func (*Channel) ModeString

func (channel *Channel) ModeString(client *Client) (str string)

<mode> <mode params>

func (*Channel) Names

func (channel *Channel) Names(client *Client)

func (*Channel) Nick

func (channel *Channel) Nick() Name

func (*Channel) Nicks

func (channel *Channel) Nicks(target *Client) []string

func (*Channel) Notice

func (channel *Channel) Notice(client *Client, message Text)

func (*Channel) Part

func (channel *Channel) Part(client *Client, message Text)

func (*Channel) Persist

func (channel *Channel) Persist() (err error)

func (*Channel) PrivMsg

func (channel *Channel) PrivMsg(client *Client, message Text)

func (*Channel) Quit

func (channel *Channel) Quit(client *Client)

func (*Channel) SetTopic

func (channel *Channel) SetTopic(client *Client, topic Text)

func (*Channel) ShowMaskList added in v1.3.1

func (channel *Channel) ShowMaskList(client *Client, mode ChannelMode)

func (*Channel) String

func (channel *Channel) String() string

type ChannelMode

type ChannelMode rune

channel mode flags

const (
	Anonymous       ChannelMode = 'a' // flag
	BanMask         ChannelMode = 'b' // arg
	ChannelCreator  ChannelMode = 'O' // flag
	ChannelOperator ChannelMode = 'o' // arg
	ExceptMask      ChannelMode = 'e' // arg
	InviteMask      ChannelMode = 'I' // arg
	InviteOnly      ChannelMode = 'i' // flag
	Key             ChannelMode = 'k' // flag arg
	Moderated       ChannelMode = 'm' // flag
	NoOutside       ChannelMode = 'n' // flag
	OpOnlyTopic     ChannelMode = 't' // flag
	Persistent      ChannelMode = 'P' // flag
	Private         ChannelMode = 'p' // flag
	Quiet           ChannelMode = 'q' // flag
	ReOp            ChannelMode = 'r' // flag
	Secret          ChannelMode = 's' // flag, deprecated
	Theater         ChannelMode = 'T' // flag, nonstandard
	UserLimit       ChannelMode = 'l' // flag arg
	Voice           ChannelMode = 'v' // arg
)

func (ChannelMode) String

func (mode ChannelMode) String() string

type ChannelModeChange

type ChannelModeChange struct {
	// contains filtered or unexported fields
}

func (*ChannelModeChange) String

func (change *ChannelModeChange) String() (str string)

type ChannelModeChanges

type ChannelModeChanges []*ChannelModeChange

func (ChannelModeChanges) String

func (changes ChannelModeChanges) String() (str string)

type ChannelModeCommand

type ChannelModeCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*ChannelModeCommand) HandleServer

func (msg *ChannelModeCommand) HandleServer(server *Server)

type ChannelModeSet

type ChannelModeSet map[ChannelMode]bool

func (ChannelModeSet) String

func (set ChannelModeSet) String() string

type ChannelModes added in v1.4.1

type ChannelModes []ChannelMode

func (ChannelModes) String added in v1.4.1

func (modes ChannelModes) String() string

type ChannelNameMap

type ChannelNameMap map[Name]*Channel

func (ChannelNameMap) Add

func (channels ChannelNameMap) Add(channel *Channel) error

func (ChannelNameMap) Get

func (channels ChannelNameMap) Get(name Name) *Channel

func (ChannelNameMap) Remove

func (channels ChannelNameMap) Remove(channel *Channel) error

type ChannelSet

type ChannelSet map[*Channel]bool

func (ChannelSet) Add

func (channels ChannelSet) Add(channel *Channel)

func (ChannelSet) First

func (channels ChannelSet) First() *Channel

func (ChannelSet) Remove

func (channels ChannelSet) Remove(channel *Channel)

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(server *Server, conn net.Conn) *Client

func (*Client) Active

func (client *Client) Active()

func (*Client) ChangeNickname

func (client *Client) ChangeNickname(nickname Name)

func (*Client) ErrAlreadyRegistered

func (target *Client) ErrAlreadyRegistered()

func (*Client) ErrBadChannelKey

func (target *Client) ErrBadChannelKey(channel *Channel)

func (*Client) ErrBannedFromChan added in v1.3.1

func (target *Client) ErrBannedFromChan(channel *Channel)

func (*Client) ErrCannotSendToChan

func (target *Client) ErrCannotSendToChan(channel *Channel)

func (*Client) ErrChanOPrivIsNeeded

func (target *Client) ErrChanOPrivIsNeeded(channel *Channel)

<channel> :You're not channel operator

func (*Client) ErrChannelIsFull

func (target *Client) ErrChannelIsFull(channel *Channel)

func (*Client) ErrConfiguredMode added in v1.4.1

func (target *Client) ErrConfiguredMode(mode ChannelMode)

func (*Client) ErrErroneusNickname

func (target *Client) ErrErroneusNickname(nick Name)

func (*Client) ErrInvalidCapCmd added in v1.2.14

func (target *Client) ErrInvalidCapCmd(subCommand CapSubCommand)

func (*Client) ErrInviteOnlyChan added in v1.3.1

func (target *Client) ErrInviteOnlyChan(channel *Channel)

func (*Client) ErrInviteOnlyChannel

func (target *Client) ErrInviteOnlyChannel(channel *Channel)

func (*Client) ErrNeedMoreParams

func (target *Client) ErrNeedMoreParams(command StringCode)

func (*Client) ErrNickNameInUse

func (target *Client) ErrNickNameInUse(nick Name)

func (*Client) ErrNoChanModes

func (target *Client) ErrNoChanModes(channel *Channel)

func (*Client) ErrNoMOTD

func (target *Client) ErrNoMOTD()

func (*Client) ErrNoNicknameGiven

func (target *Client) ErrNoNicknameGiven()

func (*Client) ErrNoPrivileges

func (target *Client) ErrNoPrivileges()

func (*Client) ErrNoSuchChannel

func (target *Client) ErrNoSuchChannel(channel Name)

func (*Client) ErrNoSuchNick

func (target *Client) ErrNoSuchNick(nick Name)

func (*Client) ErrNoSuchServer

func (target *Client) ErrNoSuchServer(server Name)

func (*Client) ErrNotOnChannel

func (target *Client) ErrNotOnChannel(channel *Channel)

func (*Client) ErrPasswdMismatch

func (target *Client) ErrPasswdMismatch()

func (*Client) ErrRestricted

func (target *Client) ErrRestricted()

func (*Client) ErrUnknownCommand

func (target *Client) ErrUnknownCommand(code StringCode)

func (*Client) ErrUnknownMode

func (target *Client) ErrUnknownMode(mode ChannelMode, channel *Channel)

func (*Client) ErrUserNotInChannel

func (target *Client) ErrUserNotInChannel(channel *Channel, client *Client)

func (*Client) ErrUserOnChannel

func (target *Client) ErrUserOnChannel(channel *Channel, member *Client)

func (*Client) ErrUsersDontMatch

func (target *Client) ErrUsersDontMatch()

func (*Client) ErrWasNoSuchNick added in v1.3.1

func (target *Client) ErrWasNoSuchNick(nickname Name)

func (*Client) Friends

func (client *Client) Friends() ClientSet

func (*Client) HasNick

func (client *Client) HasNick() bool

func (*Client) HasUsername

func (client *Client) HasUsername() bool

func (*Client) Id

func (c *Client) Id() Name

func (*Client) Idle

func (client *Client) Idle()

func (*Client) IdleSeconds

func (client *Client) IdleSeconds() uint64

func (*Client) IdleTime

func (client *Client) IdleTime() time.Duration

func (*Client) ModeString

func (c *Client) ModeString() (str string)

<mode>

func (*Client) MultilineReply

func (target *Client) MultilineReply(names []string, code NumericCode, format string,
	args ...interface{})

func (*Client) Nick

func (c *Client) Nick() Name

func (*Client) NumericReply

func (target *Client) NumericReply(code NumericCode,
	format string, args ...interface{})

func (*Client) Quit

func (client *Client) Quit(message Text)

func (*Client) Register

func (client *Client) Register()

func (*Client) Reply

func (client *Client) Reply(reply string) error

func (*Client) RplAway

func (target *Client) RplAway(client *Client)

func (*Client) RplBanList

func (target *Client) RplBanList(channel *Channel, mask Name)

func (*Client) RplChannelModeIs

func (target *Client) RplChannelModeIs(channel *Channel)

func (*Client) RplCreated

func (target *Client) RplCreated()

func (*Client) RplEndOfBanList

func (target *Client) RplEndOfBanList(channel *Channel)

func (*Client) RplEndOfExceptList

func (target *Client) RplEndOfExceptList(channel *Channel)

func (*Client) RplEndOfInviteList

func (target *Client) RplEndOfInviteList(channel *Channel)

func (*Client) RplEndOfMaskList

func (target *Client) RplEndOfMaskList(mode ChannelMode, channel *Channel)

func (*Client) RplEndOfNames

func (target *Client) RplEndOfNames(channel *Channel)

func (*Client) RplEndOfWho

func (target *Client) RplEndOfWho(name Name)

<name> :End of WHO list

func (*Client) RplEndOfWhoWas added in v1.3.1

func (target *Client) RplEndOfWhoWas(nickname Name)

func (*Client) RplEndOfWhois

func (target *Client) RplEndOfWhois()

func (*Client) RplExceptList

func (target *Client) RplExceptList(channel *Channel, mask Name)

func (*Client) RplInviteList

func (target *Client) RplInviteList(channel *Channel, mask Name)

func (*Client) RplInviting

func (target *Client) RplInviting(invitee *Client, channel Name)

func (*Client) RplInvitingMsg

func (target *Client) RplInvitingMsg(invitee *Client, channel Name)

<nick> <channel> NB: correction in errata

func (*Client) RplIsOn

func (target *Client) RplIsOn(nicks []string)

func (*Client) RplList

func (target *Client) RplList(channel *Channel)

func (*Client) RplListEnd

func (target *Client) RplListEnd(server *Server)

func (*Client) RplMOTD

func (target *Client) RplMOTD(line string)

func (*Client) RplMOTDEnd

func (target *Client) RplMOTDEnd()

func (*Client) RplMOTDStart

func (target *Client) RplMOTDStart()

func (*Client) RplMaskList

func (target *Client) RplMaskList(mode ChannelMode, channel *Channel, mask Name)

func (*Client) RplMyInfo

func (target *Client) RplMyInfo()

func (*Client) RplNamReply

func (target *Client) RplNamReply(channel *Channel)

func (*Client) RplNoTopic

func (target *Client) RplNoTopic(channel *Channel)

func (*Client) RplNowAway

func (target *Client) RplNowAway()

func (*Client) RplTime

func (target *Client) RplTime()

func (*Client) RplTopic

func (target *Client) RplTopic(channel *Channel)

func (*Client) RplUModeIs

func (target *Client) RplUModeIs(client *Client)

func (*Client) RplUnAway

func (target *Client) RplUnAway()

func (*Client) RplVersion

func (target *Client) RplVersion()

func (*Client) RplWelcome

func (target *Client) RplWelcome()

func (*Client) RplWhoReply

func (target *Client) RplWhoReply(channel *Channel, client *Client)

<channel> <user> <host> <server> <nick> ( "H" / "G" ) ["*"] [ ( "@" / "+" ) ] :<hopcount> <real name>

func (*Client) RplWhoWasUser added in v1.3.1

func (target *Client) RplWhoWasUser(whoWas *WhoWas)

func (*Client) RplWhois added in v1.3.1

func (target *Client) RplWhois(client *Client)

func (*Client) RplWhoisChannels

func (target *Client) RplWhoisChannels(client *Client)

func (*Client) RplWhoisIdle

func (target *Client) RplWhoisIdle(client *Client)

func (*Client) RplWhoisOperator

func (target *Client) RplWhoisOperator(client *Client)

func (*Client) RplWhoisUser

func (target *Client) RplWhoisUser(client *Client)

func (*Client) RplYourHost

func (target *Client) RplYourHost()

func (*Client) RplYoureOper

func (target *Client) RplYoureOper()

:You are now an IRC operator

func (*Client) SetNickname

func (client *Client) SetNickname(nickname Name)

func (*Client) SignonTime

func (client *Client) SignonTime() int64

func (*Client) String

func (c *Client) String() string

func (*Client) Touch

func (client *Client) Touch()

func (*Client) UserHost

func (c *Client) UserHost() Name

func (*Client) WhoisChannelsNames

func (client *Client) WhoisChannelsNames() []string

type ClientDB added in v1.3.1

type ClientDB struct {
	// contains filtered or unexported fields
}

func NewClientDB added in v1.3.1

func NewClientDB() *ClientDB

func (*ClientDB) Add added in v1.3.1

func (db *ClientDB) Add(client *Client)

func (*ClientDB) Remove added in v1.3.1

func (db *ClientDB) Remove(client *Client)

type ClientLookupSet added in v1.3.1

type ClientLookupSet struct {
	// contains filtered or unexported fields
}

func NewClientLookupSet added in v1.3.1

func NewClientLookupSet() *ClientLookupSet

func (*ClientLookupSet) Add added in v1.3.1

func (clients *ClientLookupSet) Add(client *Client) error

func (*ClientLookupSet) Find added in v1.3.1

func (clients *ClientLookupSet) Find(userhost Name) *Client

func (*ClientLookupSet) FindAll added in v1.3.1

func (clients *ClientLookupSet) FindAll(userhost Name) (set ClientSet)

func (*ClientLookupSet) Get added in v1.3.1

func (clients *ClientLookupSet) Get(nick Name) *Client

func (*ClientLookupSet) Remove added in v1.3.1

func (clients *ClientLookupSet) Remove(client *Client) error

type ClientSet

type ClientSet map[*Client]bool

func (ClientSet) Add

func (clients ClientSet) Add(client *Client)

func (ClientSet) Has

func (clients ClientSet) Has(client *Client) bool

func (ClientSet) Remove

func (clients ClientSet) Remove(client *Client)

type Command

type Command interface {
	Client() *Client
	Code() StringCode
	SetClient(*Client)
	SetCode(StringCode)
}

func ParseAwayCommand added in v1.4.1

func ParseAwayCommand(args []string) (Command, error)

func ParseCapCommand added in v1.4.1

func ParseCapCommand(args []string) (Command, error)

func ParseChannelModeCommand added in v1.4.1

func ParseChannelModeCommand(channel Name, args []string) (Command, error)

MODE <channel> *( ( "-" / "+" ) *<modes> *<modeparams> )

func ParseCommand

func ParseCommand(line string) (cmd Command, err error)

func ParseDebugCommand added in v1.4.1

func ParseDebugCommand(args []string) (Command, error)

func ParseInviteCommand added in v1.4.1

func ParseInviteCommand(args []string) (Command, error)

func ParseIsOnCommand added in v1.4.1

func ParseIsOnCommand(args []string) (Command, error)

func ParseJoinCommand added in v1.4.1

func ParseJoinCommand(args []string) (Command, error)

func ParseKickCommand added in v1.4.1

func ParseKickCommand(args []string) (Command, error)

func ParseKillCommand added in v1.4.1

func ParseKillCommand(args []string) (Command, error)

func ParseListCommand added in v1.4.1

func ParseListCommand(args []string) (Command, error)

func ParseMOTDCommand added in v1.4.1

func ParseMOTDCommand(args []string) (Command, error)

func ParseModeCommand added in v1.4.1

func ParseModeCommand(args []string) (Command, error)

func ParseNamesCommand added in v1.4.1

func ParseNamesCommand(args []string) (Command, error)

func ParseNickCommand added in v1.4.1

func ParseNickCommand(args []string) (Command, error)

func ParseNoticeCommand added in v1.4.1

func ParseNoticeCommand(args []string) (Command, error)

func ParseOperCommand added in v1.4.1

func ParseOperCommand(args []string) (Command, error)

OPER <name> <password>

func ParseOperNickCommand added in v1.4.1

func ParseOperNickCommand(args []string) (Command, error)

func ParsePartCommand added in v1.4.1

func ParsePartCommand(args []string) (Command, error)

func ParsePassCommand added in v1.4.1

func ParsePassCommand(args []string) (Command, error)

func ParsePingCommand added in v1.4.1

func ParsePingCommand(args []string) (Command, error)

func ParsePongCommand added in v1.4.1

func ParsePongCommand(args []string) (Command, error)

func ParsePrivMsgCommand added in v1.4.1

func ParsePrivMsgCommand(args []string) (Command, error)

func ParseProxyCommand added in v1.4.1

func ParseProxyCommand(args []string) (Command, error)

func ParseQuitCommand added in v1.4.1

func ParseQuitCommand(args []string) (Command, error)

func ParseTheaterCommand added in v1.4.1

func ParseTheaterCommand(args []string) (Command, error)

func ParseTimeCommand added in v1.4.1

func ParseTimeCommand(args []string) (Command, error)

func ParseTopicCommand added in v1.4.1

func ParseTopicCommand(args []string) (Command, error)

func ParseUserCommand added in v1.4.1

func ParseUserCommand(args []string) (Command, error)

func ParseUserModeCommand added in v1.4.1

func ParseUserModeCommand(nickname Name, args []string) (Command, error)

MODE <nickname> *( ( "+" / "-" ) *( "i" / "w" / "o" / "O" / "r" ) )

func ParseVersionCommand added in v1.4.1

func ParseVersionCommand(args []string) (Command, error)

func ParseWhoCommand added in v1.4.1

func ParseWhoCommand(args []string) (Command, error)

WHO [ <mask> [ "o" ] ]

func ParseWhoWasCommand added in v1.4.1

func ParseWhoWasCommand(args []string) (Command, error)

func ParseWhoisCommand added in v1.4.1

func ParseWhoisCommand(args []string) (Command, error)

WHOIS [ <target> ] <mask> *( "," <mask> )

type Config

type Config struct {
	Server struct {
		PassConfig
		Database string
		Listen   []string
		Log      string
		MOTD     string
		Name     string
	}

	Operator map[string]*PassConfig

	Theater map[string]*PassConfig
}

func LoadConfig

func LoadConfig(filename string) (config *Config, err error)

func (*Config) Operators

func (conf *Config) Operators() map[Name][]byte

func (*Config) Theaters added in v1.4.1

func (conf *Config) Theaters() map[Name][]byte

type DebugCommand

type DebugCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*DebugCommand) HandleServer

func (msg *DebugCommand) HandleServer(server *Server)

type Identifiable added in v1.4.1

type Identifiable interface {
	Id() Name
	Nick() Name
}

type InviteCommand

type InviteCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*InviteCommand) HandleServer

func (msg *InviteCommand) HandleServer(server *Server)

type IsOnCommand

type IsOnCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*IsOnCommand) HandleServer

func (msg *IsOnCommand) HandleServer(server *Server)

type JoinCommand

type JoinCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*JoinCommand) HandleServer

func (m *JoinCommand) HandleServer(s *Server)

type KickCommand

type KickCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*KickCommand) Comment

func (msg *KickCommand) Comment() Text

func (*KickCommand) HandleServer

func (msg *KickCommand) HandleServer(server *Server)

type KillCommand

type KillCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*KillCommand) HandleServer

func (msg *KillCommand) HandleServer(server *Server)

type ListCommand

type ListCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*ListCommand) HandleServer

func (msg *ListCommand) HandleServer(server *Server)

type Logging added in v1.4.1

type Logging struct {
	// contains filtered or unexported fields
}

func NewLogging added in v1.4.1

func NewLogging(level string) *Logging

func (*Logging) SetLevel added in v1.4.1

func (logging *Logging) SetLevel(level string)

type MOTDCommand

type MOTDCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*MOTDCommand) HandleServer

func (msg *MOTDCommand) HandleServer(server *Server)

type MemberSet

type MemberSet map[*Client]ChannelModeSet

func (MemberSet) Add

func (members MemberSet) Add(member *Client)

func (MemberSet) AnyHasMode added in v1.4.1

func (members MemberSet) AnyHasMode(mode ChannelMode) bool

func (MemberSet) Has

func (members MemberSet) Has(member *Client) bool

func (MemberSet) HasMode

func (members MemberSet) HasMode(member *Client, mode ChannelMode) bool

func (MemberSet) Remove

func (members MemberSet) Remove(member *Client)

type ModeChange

type ModeChange struct {
	// contains filtered or unexported fields
}

func (*ModeChange) String

func (change *ModeChange) String() string

type ModeChanges

type ModeChanges []*ModeChange

func (ModeChanges) String

func (changes ModeChanges) String() string

type ModeCommand

type ModeCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*ModeCommand) HandleServer

func (m *ModeCommand) HandleServer(s *Server)

type ModeOp

type ModeOp rune
const (
	Add    ModeOp = '+'
	List   ModeOp = '='
	Remove ModeOp = '-'
)

func (ModeOp) String

func (op ModeOp) String() string

type Name added in v1.4.1

type Name string

Names are normalized and canonicalized to remove formatting marks and simplify usage. They are things like hostnames and usermasks.

func AddrLookupHostname

func AddrLookupHostname(addr net.Addr) Name

func ExpandUserHost added in v1.3.1

func ExpandUserHost(userhost Name) (expanded Name)

func IPString

func IPString(addr net.Addr) Name

func LookupHostname

func LookupHostname(addr Name) Name

func NewName added in v1.4.1

func NewName(str string) Name

func NewNames added in v1.4.1

func NewNames(strs []string) []Name

func (Name) IsChannel added in v1.4.1

func (name Name) IsChannel() bool

func (Name) IsNickname added in v1.4.1

func (name Name) IsNickname() bool

func (Name) String added in v1.4.1

func (name Name) String() string

func (Name) Text added in v1.4.1

func (name Name) Text() Text

It's safe to coerce a Name to Text. Name is a strict subset of Text.

func (Name) ToLower added in v1.4.1

func (name Name) ToLower() Name

type NamesCommand

type NamesCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*NamesCommand) HandleServer

func (msg *NamesCommand) HandleServer(server *Server)

type NickCommand

type NickCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*NickCommand) HandleRegServer

func (m *NickCommand) HandleRegServer(s *Server)

func (*NickCommand) HandleServer

func (msg *NickCommand) HandleServer(server *Server)

type NoticeCommand

type NoticeCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*NoticeCommand) HandleServer

func (msg *NoticeCommand) HandleServer(server *Server)

type NumericCode

type NumericCode uint

func (NumericCode) String

func (code NumericCode) String() string

type OperCommand

type OperCommand struct {
	PassCommand
	// contains filtered or unexported fields
}

func (*OperCommand) HandleServer

func (msg *OperCommand) HandleServer(server *Server)

func (*OperCommand) LoadPassword

func (msg *OperCommand) LoadPassword(server *Server)

type OperNickCommand added in v1.4.1

type OperNickCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*OperNickCommand) HandleServer added in v1.4.1

func (msg *OperNickCommand) HandleServer(server *Server)

type PartCommand

type PartCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*PartCommand) HandleServer

func (m *PartCommand) HandleServer(server *Server)

func (*PartCommand) Message

func (cmd *PartCommand) Message() Text

type PassCommand

type PassCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*PassCommand) CheckPassword

func (cmd *PassCommand) CheckPassword()

func (*PassCommand) HandleRegServer added in v1.2.14

func (msg *PassCommand) HandleRegServer(server *Server)

func (*PassCommand) HandleServer

func (m *PassCommand) HandleServer(s *Server)

func (*PassCommand) LoadPassword

func (cmd *PassCommand) LoadPassword(server *Server)

type PassConfig added in v1.2.14

type PassConfig struct {
	Password string
}

func (*PassConfig) PasswordBytes added in v1.2.14

func (conf *PassConfig) PasswordBytes() []byte

type PingCommand

type PingCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*PingCommand) HandleServer

func (m *PingCommand) HandleServer(s *Server)

type PongCommand

type PongCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*PongCommand) HandleServer

func (m *PongCommand) HandleServer(s *Server)

type PrivMsgCommand

type PrivMsgCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*PrivMsgCommand) HandleServer

func (msg *PrivMsgCommand) HandleServer(server *Server)

type ProxyCommand

type ProxyCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

HAPROXY support

func NewProxyCommand

func NewProxyCommand(hostname Name) *ProxyCommand

func (*ProxyCommand) HandleRegServer

func (msg *ProxyCommand) HandleRegServer(server *Server)

type QuitCommand

type QuitCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func NewQuitCommand

func NewQuitCommand(message Text) *QuitCommand

func (*QuitCommand) HandleRegServer

func (msg *QuitCommand) HandleRegServer(server *Server)

func (*QuitCommand) HandleServer

func (msg *QuitCommand) HandleServer(server *Server)

type RFC1459UserCommand

type RFC1459UserCommand struct {
	UserCommand
	// contains filtered or unexported fields
}

USER <username> <hostname> <servername> <realname>

func (*RFC1459UserCommand) HandleRegServer

func (msg *RFC1459UserCommand) HandleRegServer(server *Server)

type RFC2812UserCommand

type RFC2812UserCommand struct {
	UserCommand
	// contains filtered or unexported fields
}

USER <user> <mode> <unused> <realname>

func (*RFC2812UserCommand) Flags

func (cmd *RFC2812UserCommand) Flags() []UserMode

func (*RFC2812UserCommand) HandleRegServer

func (msg *RFC2812UserCommand) HandleRegServer(server *Server)

type RegServerCommand

type RegServerCommand interface {
	Command
	HandleRegServer(*Server)
}

type ReplyCode

type ReplyCode interface {
	String() string
}

type Server

type Server struct {
	// contains filtered or unexported fields
}

func NewServer

func NewServer(config *Config) *Server

func (*Server) Id

func (s *Server) Id() Name

func (*Server) MOTD

func (server *Server) MOTD(client *Client)

func (*Server) Nick

func (s *Server) Nick() Name

func (*Server) Reply

func (server *Server) Reply(target *Client, message string)

func (*Server) Replyf added in v1.4.4

func (server *Server) Replyf(target *Client, format string, args ...interface{})

func (*Server) Run

func (server *Server) Run()

func (*Server) Shutdown added in v1.2.13

func (server *Server) Shutdown()

func (*Server) String

func (s *Server) String() string

type ServerCommand

type ServerCommand interface {
	Command
	HandleServer(*Server)
}

type Socket

type Socket struct {
	// contains filtered or unexported fields
}

func NewSocket

func NewSocket(conn net.Conn) *Socket

func (*Socket) Close

func (socket *Socket) Close()

func (*Socket) Read added in v1.4.4

func (socket *Socket) Read() (line string, err error)

func (*Socket) String

func (socket *Socket) String() string

func (*Socket) Write

func (socket *Socket) Write(line string) (err error)

type StringCode

type StringCode string

func ParseLine added in v1.2.11

func ParseLine(line string) (command StringCode, args []string)

func (StringCode) String

func (code StringCode) String() string

type Text added in v1.4.1

type Text string

Text is PRIVMSG, NOTICE, or TOPIC data. It's canonicalized UTF8 data to simplify but keeps all formatting.

func NewText added in v1.4.1

func NewText(str string) Text

func (Text) String added in v1.4.1

func (text Text) String() string

type TheaterActionCommand added in v1.4.1

type TheaterActionCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*TheaterActionCommand) HandleServer added in v1.4.1

func (m *TheaterActionCommand) HandleServer(s *Server)

type TheaterClient added in v1.4.1

type TheaterClient Name

func (TheaterClient) Id added in v1.4.1

func (c TheaterClient) Id() Name

func (TheaterClient) Nick added in v1.4.1

func (c TheaterClient) Nick() Name

type TheaterIdentifyCommand added in v1.4.1

type TheaterIdentifyCommand struct {
	PassCommand
	// contains filtered or unexported fields
}

func (*TheaterIdentifyCommand) HandleServer added in v1.4.1

func (m *TheaterIdentifyCommand) HandleServer(s *Server)

func (*TheaterIdentifyCommand) LoadPassword added in v1.4.1

func (m *TheaterIdentifyCommand) LoadPassword(s *Server)

type TheaterPrivMsgCommand added in v1.4.1

type TheaterPrivMsgCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*TheaterPrivMsgCommand) HandleServer added in v1.4.1

func (m *TheaterPrivMsgCommand) HandleServer(s *Server)

type TheaterSubCommand added in v1.4.1

type TheaterSubCommand string

type TimeCommand

type TimeCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*TimeCommand) HandleServer

func (msg *TimeCommand) HandleServer(server *Server)

type TopicCommand

type TopicCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*TopicCommand) HandleServer

func (msg *TopicCommand) HandleServer(server *Server)

type UnknownCommand

type UnknownCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func ParseUnknownCommand added in v1.4.1

func ParseUnknownCommand(args []string) *UnknownCommand

type UserCommand

type UserCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*UserCommand) HandleServer

func (m *UserCommand) HandleServer(s *Server)

type UserMaskSet added in v1.3.1

type UserMaskSet struct {
	// contains filtered or unexported fields
}

func NewUserMaskSet added in v1.3.1

func NewUserMaskSet() *UserMaskSet

func (*UserMaskSet) Add added in v1.3.1

func (set *UserMaskSet) Add(mask Name) bool

func (*UserMaskSet) AddAll added in v1.3.1

func (set *UserMaskSet) AddAll(masks []Name) (added bool)

func (*UserMaskSet) Match added in v1.3.1

func (set *UserMaskSet) Match(userhost Name) bool

func (*UserMaskSet) Remove added in v1.3.1

func (set *UserMaskSet) Remove(mask Name) bool

func (*UserMaskSet) String added in v1.3.1

func (set *UserMaskSet) String() string

type UserMode

type UserMode rune

user mode flags

const (
	Away          UserMode = 'a'
	Invisible     UserMode = 'i'
	LocalOperator UserMode = 'O'
	Operator      UserMode = 'o'
	Restricted    UserMode = 'r'
	ServerNotice  UserMode = 's' // deprecated
	WallOps       UserMode = 'w'
)

func (UserMode) String

func (mode UserMode) String() string

type UserModes added in v1.4.1

type UserModes []UserMode

func (UserModes) String added in v1.4.1

func (modes UserModes) String() string

type VersionCommand

type VersionCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*VersionCommand) HandleServer

func (msg *VersionCommand) HandleServer(server *Server)

type WhoCommand

type WhoCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*WhoCommand) HandleServer

func (msg *WhoCommand) HandleServer(server *Server)

type WhoWas added in v1.3.1

type WhoWas struct {
	// contains filtered or unexported fields
}

type WhoWasCommand added in v1.3.1

type WhoWasCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*WhoWasCommand) HandleServer added in v1.3.1

func (msg *WhoWasCommand) HandleServer(server *Server)

type WhoWasList added in v1.3.1

type WhoWasList struct {
	// contains filtered or unexported fields
}

func NewWhoWasList added in v1.3.1

func NewWhoWasList(size uint) *WhoWasList

func (*WhoWasList) Append added in v1.3.1

func (list *WhoWasList) Append(client *Client)

func (*WhoWasList) Each added in v1.3.1

func (list *WhoWasList) Each() <-chan *WhoWas

Iterate the buffer in reverse.

func (*WhoWasList) Find added in v1.3.1

func (list *WhoWasList) Find(nickname Name, limit int64) []*WhoWas

type WhoisCommand

type WhoisCommand struct {
	BaseCommand
	// contains filtered or unexported fields
}

func (*WhoisCommand) HandleServer

func (m *WhoisCommand) HandleServer(server *Server)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL