mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-26 05:49:25 +01:00
235 lines
8.0 KiB
Go
235 lines
8.0 KiB
Go
package irc
|
|
|
|
import (
|
|
"errors"
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
// debugging flags
|
|
DEBUG_NET = false
|
|
DEBUG_CLIENT = false
|
|
DEBUG_CHANNEL = false
|
|
DEBUG_SERVER = false
|
|
|
|
// errors
|
|
ErrAlreadyDestroyed = errors.New("already destroyed")
|
|
|
|
// regexps
|
|
ChannelNameExpr = regexp.MustCompile(`^[&!#+][[:word:]]{1,63}$`)
|
|
NicknameExpr = regexp.MustCompile(
|
|
"^[[:alpha:]\\[\\]{}^`][[:word:]\\[\\]{}^`]{1,31}$")
|
|
)
|
|
|
|
const (
|
|
VERSION = "1.0.0"
|
|
CRLF = "\r\n"
|
|
MAX_REPLY_LEN = 512 - len(CRLF)
|
|
|
|
LOGIN_TIMEOUT = time.Minute / 2 // how long the client has to login
|
|
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
|
|
|
|
// string codes
|
|
AWAY StringCode = "AWAY"
|
|
CAP StringCode = "CAP"
|
|
ERROR StringCode = "ERROR"
|
|
INVITE StringCode = "INVITE"
|
|
ISON StringCode = "ISON"
|
|
JOIN StringCode = "JOIN"
|
|
KICK StringCode = "KICK"
|
|
LIST StringCode = "LIST"
|
|
MODE StringCode = "MODE"
|
|
MOTD StringCode = "MOTD"
|
|
NAMES StringCode = "NAMES"
|
|
NICK StringCode = "NICK"
|
|
NOTICE StringCode = "NOTICE"
|
|
OPER StringCode = "OPER"
|
|
PART StringCode = "PART"
|
|
PASS StringCode = "PASS"
|
|
PING StringCode = "PING"
|
|
PONG StringCode = "PONG"
|
|
PRIVMSG StringCode = "PRIVMSG"
|
|
PROXY StringCode = "PROXY"
|
|
QUIT StringCode = "QUIT"
|
|
TOPIC StringCode = "TOPIC"
|
|
USER StringCode = "USER"
|
|
WHO StringCode = "WHO"
|
|
WHOIS StringCode = "WHOIS"
|
|
|
|
// 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_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
|
|
|
|
Add ModeOp = '+'
|
|
List ModeOp = '='
|
|
Remove ModeOp = '-'
|
|
|
|
Away UserMode = 'a'
|
|
Invisible UserMode = 'i'
|
|
LocalOperator UserMode = 'O'
|
|
Operator UserMode = 'o'
|
|
Restricted UserMode = 'r'
|
|
ServerNotice UserMode = 's'
|
|
WallOps UserMode = 'w'
|
|
|
|
Anonymous ChannelMode = 'a' // flag
|
|
BanMask ChannelMode = 'b' // arg
|
|
ChannelCreator ChannelMode = 'O' // flag
|
|
ChannelOperator ChannelMode = 'o' // arg
|
|
ExceptionMask 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
|
|
Private ChannelMode = 'p' // flag
|
|
Quiet ChannelMode = 'q' // flag
|
|
ReOp ChannelMode = 'r' // flag
|
|
Secret ChannelMode = 's' // flag
|
|
UserLimit ChannelMode = 'l' // flag arg
|
|
Voice ChannelMode = 'v' // arg
|
|
)
|
|
|
|
const (
|
|
Authorization Phase = iota
|
|
Registration Phase = iota
|
|
Normal Phase = iota
|
|
)
|