Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

constants.go 8.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. package irc
  2. import (
  3. "errors"
  4. "regexp"
  5. "time"
  6. )
  7. var (
  8. // debugging flags
  9. DEBUG_NET = false
  10. DEBUG_CLIENT = false
  11. DEBUG_CHANNEL = false
  12. DEBUG_SERVER = false
  13. // errors
  14. ErrAlreadyDestroyed = errors.New("already destroyed")
  15. // regexps
  16. ChannelNameExpr = regexp.MustCompile(`^[&!#+][\pL\pN]{1,63}$`)
  17. NicknameExpr = regexp.MustCompile(
  18. "^[\\pL\\pN\\pP\\pS]{1,32}$")
  19. )
  20. const (
  21. SEM_VER = "ergonomadic-1.3.1"
  22. CRLF = "\r\n"
  23. MAX_REPLY_LEN = 512 - len(CRLF)
  24. LOGIN_TIMEOUT = time.Minute / 2 // how long the client has to login
  25. IDLE_TIMEOUT = time.Minute // how long before a client is considered idle
  26. QUIT_TIMEOUT = time.Minute // how long after idle before a client is kicked
  27. // string codes
  28. AWAY StringCode = "AWAY"
  29. CAP StringCode = "CAP"
  30. DEBUG StringCode = "DEBUG"
  31. ERROR StringCode = "ERROR"
  32. INVITE StringCode = "INVITE"
  33. ISON StringCode = "ISON"
  34. JOIN StringCode = "JOIN"
  35. KICK StringCode = "KICK"
  36. KILL StringCode = "KILL"
  37. LIST StringCode = "LIST"
  38. MODE StringCode = "MODE"
  39. MOTD StringCode = "MOTD"
  40. NAMES StringCode = "NAMES"
  41. NICK StringCode = "NICK"
  42. NOTICE StringCode = "NOTICE"
  43. OPER StringCode = "OPER"
  44. PART StringCode = "PART"
  45. PASS StringCode = "PASS"
  46. PING StringCode = "PING"
  47. PONG StringCode = "PONG"
  48. PRIVMSG StringCode = "PRIVMSG"
  49. PROXY StringCode = "PROXY"
  50. QUIT StringCode = "QUIT"
  51. TIME StringCode = "TIME"
  52. TOPIC StringCode = "TOPIC"
  53. USER StringCode = "USER"
  54. VERSION StringCode = "VERSION"
  55. WHO StringCode = "WHO"
  56. WHOIS StringCode = "WHOIS"
  57. WHOWAS StringCode = "WHOWAS"
  58. // numeric codes
  59. RPL_WELCOME NumericCode = 1
  60. RPL_YOURHOST NumericCode = 2
  61. RPL_CREATED NumericCode = 3
  62. RPL_MYINFO NumericCode = 4
  63. RPL_BOUNCE NumericCode = 5
  64. RPL_TRACELINK NumericCode = 200
  65. RPL_TRACECONNECTING NumericCode = 201
  66. RPL_TRACEHANDSHAKE NumericCode = 202
  67. RPL_TRACEUNKNOWN NumericCode = 203
  68. RPL_TRACEOPERATOR NumericCode = 204
  69. RPL_TRACEUSER NumericCode = 205
  70. RPL_TRACESERVER NumericCode = 206
  71. RPL_TRACESERVICE NumericCode = 207
  72. RPL_TRACENEWTYPE NumericCode = 208
  73. RPL_TRACECLASS NumericCode = 209
  74. RPL_TRACERECONNECT NumericCode = 210
  75. RPL_STATSLINKINFO NumericCode = 211
  76. RPL_STATSCOMMANDS NumericCode = 212
  77. RPL_ENDOFSTATS NumericCode = 219
  78. RPL_UMODEIS NumericCode = 221
  79. RPL_SERVLIST NumericCode = 234
  80. RPL_SERVLISTEND NumericCode = 235
  81. RPL_STATSUPTIME NumericCode = 242
  82. RPL_STATSOLINE NumericCode = 243
  83. RPL_LUSERCLIENT NumericCode = 251
  84. RPL_LUSEROP NumericCode = 252
  85. RPL_LUSERUNKNOWN NumericCode = 253
  86. RPL_LUSERCHANNELS NumericCode = 254
  87. RPL_LUSERME NumericCode = 255
  88. RPL_ADMINME NumericCode = 256
  89. RPL_ADMINLOC1 NumericCode = 257
  90. RPL_ADMINLOC2 NumericCode = 258
  91. RPL_ADMINEMAIL NumericCode = 259
  92. RPL_TRACELOG NumericCode = 261
  93. RPL_TRACEEND NumericCode = 262
  94. RPL_TRYAGAIN NumericCode = 263
  95. RPL_AWAY NumericCode = 301
  96. RPL_USERHOST NumericCode = 302
  97. RPL_ISON NumericCode = 303
  98. RPL_UNAWAY NumericCode = 305
  99. RPL_NOWAWAY NumericCode = 306
  100. RPL_WHOISUSER NumericCode = 311
  101. RPL_WHOISSERVER NumericCode = 312
  102. RPL_WHOISOPERATOR NumericCode = 313
  103. RPL_WHOWASUSER NumericCode = 314
  104. RPL_ENDOFWHO NumericCode = 315
  105. RPL_WHOISIDLE NumericCode = 317
  106. RPL_ENDOFWHOIS NumericCode = 318
  107. RPL_WHOISCHANNELS NumericCode = 319
  108. RPL_LIST NumericCode = 322
  109. RPL_LISTEND NumericCode = 323
  110. RPL_CHANNELMODEIS NumericCode = 324
  111. RPL_UNIQOPIS NumericCode = 325
  112. RPL_NOTOPIC NumericCode = 331
  113. RPL_TOPIC NumericCode = 332
  114. RPL_INVITING NumericCode = 341
  115. RPL_SUMMONING NumericCode = 342
  116. RPL_INVITELIST NumericCode = 346
  117. RPL_ENDOFINVITELIST NumericCode = 347
  118. RPL_EXCEPTLIST NumericCode = 348
  119. RPL_ENDOFEXCEPTLIST NumericCode = 349
  120. RPL_VERSION NumericCode = 351
  121. RPL_WHOREPLY NumericCode = 352
  122. RPL_NAMREPLY NumericCode = 353
  123. RPL_LINKS NumericCode = 364
  124. RPL_ENDOFLINKS NumericCode = 365
  125. RPL_ENDOFNAMES NumericCode = 366
  126. RPL_BANLIST NumericCode = 367
  127. RPL_ENDOFBANLIST NumericCode = 368
  128. RPL_ENDOFWHOWAS NumericCode = 369
  129. RPL_INFO NumericCode = 371
  130. RPL_MOTD NumericCode = 372
  131. RPL_ENDOFINFO NumericCode = 374
  132. RPL_MOTDSTART NumericCode = 375
  133. RPL_ENDOFMOTD NumericCode = 376
  134. RPL_YOUREOPER NumericCode = 381
  135. RPL_REHASHING NumericCode = 382
  136. RPL_YOURESERVICE NumericCode = 383
  137. RPL_TIME NumericCode = 391
  138. RPL_USERSSTART NumericCode = 392
  139. RPL_USERS NumericCode = 393
  140. RPL_ENDOFUSERS NumericCode = 394
  141. RPL_NOUSERS NumericCode = 395
  142. ERR_NOSUCHNICK NumericCode = 401
  143. ERR_NOSUCHSERVER NumericCode = 402
  144. ERR_NOSUCHCHANNEL NumericCode = 403
  145. ERR_CANNOTSENDTOCHAN NumericCode = 404
  146. ERR_TOOMANYCHANNELS NumericCode = 405
  147. ERR_WASNOSUCHNICK NumericCode = 406
  148. ERR_TOOMANYTARGETS NumericCode = 407
  149. ERR_NOSUCHSERVICE NumericCode = 408
  150. ERR_NOORIGIN NumericCode = 409
  151. ERR_INVALIDCAPCMD NumericCode = 410
  152. ERR_NORECIPIENT NumericCode = 411
  153. ERR_NOTEXTTOSEND NumericCode = 412
  154. ERR_NOTOPLEVEL NumericCode = 413
  155. ERR_WILDTOPLEVEL NumericCode = 414
  156. ERR_BADMASK NumericCode = 415
  157. ERR_UNKNOWNCOMMAND NumericCode = 421
  158. ERR_NOMOTD NumericCode = 422
  159. ERR_NOADMININFO NumericCode = 423
  160. ERR_FILEERROR NumericCode = 424
  161. ERR_NONICKNAMEGIVEN NumericCode = 431
  162. ERR_ERRONEUSNICKNAME NumericCode = 432
  163. ERR_NICKNAMEINUSE NumericCode = 433
  164. ERR_NICKCOLLISION NumericCode = 436
  165. ERR_UNAVAILRESOURCE NumericCode = 437
  166. ERR_USERNOTINCHANNEL NumericCode = 441
  167. ERR_NOTONCHANNEL NumericCode = 442
  168. ERR_USERONCHANNEL NumericCode = 443
  169. ERR_NOLOGIN NumericCode = 444
  170. ERR_SUMMONDISABLED NumericCode = 445
  171. ERR_USERSDISABLED NumericCode = 446
  172. ERR_NOTREGISTERED NumericCode = 451
  173. ERR_NEEDMOREPARAMS NumericCode = 461
  174. ERR_ALREADYREGISTRED NumericCode = 462
  175. ERR_NOPERMFORHOST NumericCode = 463
  176. ERR_PASSWDMISMATCH NumericCode = 464
  177. ERR_YOUREBANNEDCREEP NumericCode = 465
  178. ERR_YOUWILLBEBANNED NumericCode = 466
  179. ERR_KEYSET NumericCode = 467
  180. ERR_CHANNELISFULL NumericCode = 471
  181. ERR_UNKNOWNMODE NumericCode = 472
  182. ERR_INVITEONLYCHAN NumericCode = 473
  183. ERR_BANNEDFROMCHAN NumericCode = 474
  184. ERR_BADCHANNELKEY NumericCode = 475
  185. ERR_BADCHANMASK NumericCode = 476
  186. ERR_NOCHANMODES NumericCode = 477
  187. ERR_BANLISTFULL NumericCode = 478
  188. ERR_NOPRIVILEGES NumericCode = 481
  189. ERR_CHANOPRIVSNEEDED NumericCode = 482
  190. ERR_CANTKILLSERVER NumericCode = 483
  191. ERR_RESTRICTED NumericCode = 484
  192. ERR_UNIQOPPRIVSNEEDED NumericCode = 485
  193. ERR_NOOPERHOST NumericCode = 491
  194. ERR_UMODEUNKNOWNFLAG NumericCode = 501
  195. ERR_USERSDONTMATCH NumericCode = 502
  196. CAP_LS CapSubCommand = "LS"
  197. CAP_LIST CapSubCommand = "LIST"
  198. CAP_REQ CapSubCommand = "REQ"
  199. CAP_ACK CapSubCommand = "ACK"
  200. CAP_NAK CapSubCommand = "NAK"
  201. CAP_CLEAR CapSubCommand = "CLEAR"
  202. CAP_END CapSubCommand = "END"
  203. Add ModeOp = '+'
  204. List ModeOp = '='
  205. Remove ModeOp = '-'
  206. Away UserMode = 'a'
  207. Invisible UserMode = 'i'
  208. LocalOperator UserMode = 'O'
  209. Operator UserMode = 'o'
  210. Restricted UserMode = 'r'
  211. ServerNotice UserMode = 's' // deprecated
  212. WallOps UserMode = 'w'
  213. Anonymous ChannelMode = 'a' // flag
  214. BanMask ChannelMode = 'b' // arg
  215. ChannelCreator ChannelMode = 'O' // flag
  216. ChannelOperator ChannelMode = 'o' // arg
  217. ExceptMask ChannelMode = 'e' // arg
  218. InviteMask ChannelMode = 'I' // arg
  219. InviteOnly ChannelMode = 'i' // flag
  220. Key ChannelMode = 'k' // flag arg
  221. Moderated ChannelMode = 'm' // flag
  222. NoOutside ChannelMode = 'n' // flag
  223. OpOnlyTopic ChannelMode = 't' // flag
  224. Persistent ChannelMode = 'P' // flag
  225. Private ChannelMode = 'p' // flag
  226. Quiet ChannelMode = 'q' // flag
  227. ReOp ChannelMode = 'r' // flag
  228. Secret ChannelMode = 's' // flag, deprecated
  229. UserLimit ChannelMode = 'l' // flag arg
  230. Voice ChannelMode = 'v' // arg
  231. MultiPrefix Capability = "multi-prefix"
  232. SASL Capability = "sasl"
  233. Disable CapModifier = '-'
  234. Ack CapModifier = '~'
  235. Sticky CapModifier = '='
  236. )
  237. var (
  238. SupportedCapabilities = CapabilitySet{
  239. MultiPrefix: true,
  240. }
  241. )
  242. const (
  243. Registration Phase = iota
  244. Normal Phase = iota
  245. )
  246. const (
  247. CapNone CapState = iota
  248. CapNegotiating CapState = iota
  249. CapNegotiated CapState = iota
  250. )