module Irc
This would be a good idea if it was failproof, but the truth is that other methods can indirectly modify the hash. sigh
class AuthNotifyingHash < Hash
%w(clear default= delete delete_if replace invert merge! update rehash reject! replace shift []= store).each { |m| class_eval { define_method(m) { |*a| r = super(*a) Irc::Bot::Auth.manager.set_changed r } } }
end
The move of everything rbot-related to the Irc::Bot::* namespace from Irc::* would cause off-repo plugins to fail if they register any configuration key, so we have to handle this case.
- Author
-
Giuseppe Bilotta (giuseppe.bilotta@gmail.com)
- Author
-
Giuseppe “Oblomov” Bilotta <giuseppe.bilotta@gmail.com>
- Author
-
Giuseppe “Oblomov” Bilotta <giuseppe.bilotta@gmail.com>
This file collects methods to handle ‘stream filters’, a generic mechanism to transform text+attributes into other text+attributes
- Author
-
Giuseppe “Oblomov” Bilotta <giuseppe.bilotta@gmail.com>
These routines read a string and return the number of seconds they represent.
The Irc
module is used to keep all IRC-related classes in the same namespace
This module takes care of language handling for rbot: setting the core.language value, loading the appropriate .lang file etc.
This module defines the Irc::Client
class, a class that can handle and dispatch messages based on RFC 2821 (Internet Relay Chat: Client
Protocol)
Constants
- AttributeRx
- Bold
-
Define standard IRC attriubtes (not so standard actually, but the closest thing we have …)
- Color
-
Color
is prefixed by 003 and followed by optional foreground and background specifications, two-digits-max numbers separated by a comma. One of the two parts must be present. - ColorCode
-
Standard color codes
- ColorRx
- Config
- ERR_ALREADYREGISTRED
-
“:Unauthorized command (already registered)”
-
Returned by the server to any link which tries to change part of the registered details (such as password or user details from second USER message).
-
- ERR_BADCHANMASK
-
“<channel> :Bad
Channel
Mask” - ERR_BADCHANNELKEY
-
“<channel> :Cannot join channel (+k)”
- ERR_BADMASK
-
“<mask> :Bad Server/host mask”
- ERR_BANLISTFULL
-
“<channel> <char> :Channel list is full”
- ERR_BANNEDFROMCHAN
-
“<channel> :Cannot join channel (+b)”
- ERR_CANNOTSENDTOCHAN
-
“<channel name> :Cannot send to channel”
-
Sent to a user who is either (a) not on a channel which is mode +n or (b) not a chanop (or mode +v) on a channel which has mode +m set or where the user is banned and is trying to send a PRIVMSG message to that channel.
-
- ERR_CANTKILLSERVER
-
“:You can’t kill a server!”
-
Any attempts to use the KILL command on a server are to be refused and this error returned directly to the client.
-
- ERR_CHANNELISFULL
-
“<channel> :Cannot join channel (+l)”
- ERR_CHANOPRIVSNEEDED
-
“<channel> :You’re not channel operator”
-
Any command requiring ‘chanop’ privileges (such as MODE messages) MUST return this error if the client making the attempt is not a chanop on the specified channel.
-
- ERR_ERRONEUSNICKNAME
-
“<nick> :Erroneous nickname”
-
Returned after receiving a NICK message which contains characters which do not fall in the defined set. See section 2.3.1 for details on valid nicknames.
-
- ERR_FILEERROR
-
“:File error doing <file op> on <file>”
-
Generic error message used to report a failed file operation during the processing of a message.
-
- ERR_INVITEONLYCHAN
-
“<channel> :Cannot join channel (+i)”
- ERR_KEYSET
-
“<channel> :Channel key already set”
- ERR_NEEDMOREPARAMS
-
“<command> :Not enough parameters”
-
Returned by the server by numerous commands to indicate to the client that it didn’t supply enough parameters.
-
- ERR_NICKCOLLISION
-
“<nick> :Nickname collision KILL from <user>@<host>”
-
Returned by a server to a client when it detects a nickname collision (registered of a NICK that already exists by another server).
-
- ERR_NICKNAMEINUSE
-
“<nick> :Nickname is already in use”
-
Returned when a NICK message is processed that results in an attempt to change to a currently existing nickname.
-
- ERR_NOADMININFO
-
“<server> :No administrative info available”
-
Returned by a server in response to an ADMIN message when there is an error in finding the appropriate information.
-
- ERR_NOCHANMODES
-
“<channel> :Channel doesn’t support modes”
- ERR_NOLOGIN
-
“<user> :User not logged in”
-
Returned by the summon after a SUMMON command for a user was unable to be performed since they were not logged in.
-
- ERR_NOMOTD
-
“:MOTD File is missing”
-
Server’s MOTD file could not be opened by the server.
-
- ERR_NONICKNAMEGIVEN
-
“:No nickname given”
-
Returned when a nickname parameter expected for a command and isn’t found.
-
- ERR_NOOPERHOST
-
“:No O-lines for your host”
-
If a client sends an OPER message and the server has not been configured to allow connections from the client’s host as an operator, this error MUST be returned.
-
- ERR_NOORIGIN
-
“:No origin specified”
-
PING or PONG message missing the originator parameter.
-
- ERR_NOPERMFORHOST
-
“:Your host isn’t among the privileged”
-
Returned to a client which attempts to register with a server which does not been setup to allow connections from the host the attempted connection is tried.
-
- ERR_NOPRIVILEGES
-
“:Permission Denied- You’re not an IRC operator”
-
Any command requiring operator privileges to operate MUST return this error to indicate the attempt was unsuccessful.
-
- ERR_NORECIPIENT
-
“:No recipient given (<command>)”
- ERR_NOSERVICEHOST
- ERR_NOSUCHCHANNEL
-
“<channel name> :No such channel”
-
Used to indicate the given channel name is invalid.
-
- ERR_NOSUCHNICK
-
“<nickname> :No such nick/channel”
-
Used to indicate the nickname parameter supplied to a command is currently unused.
-
- ERR_NOSUCHSERVER
-
“<server name> :No such server”
-
Used to indicate the server name given currently does not exist.
-
- ERR_NOSUCHSERVICE
-
“<service name> :No such service”
-
Returned to a client which is attempting to send a SQUERY to a service which does not exist.
-
- ERR_NOTEXTTOSEND
-
“:No text to send”
- ERR_NOTONCHANNEL
-
“<channel> :You’re not on that channel”
-
Returned by the server whenever a client tries to perform a channel affecting command for which the client isn’t a member.
-
- ERR_NOTOPLEVEL
-
“<mask> :No toplevel domain specified”
- ERR_NOTREGISTERED
-
“:You have not registered”
-
Returned by the server to indicate that the client MUST be registered before the server will allow it to be parsed in detail.
-
- ERR_PASSWDMISMATCH
-
“:Password incorrect”
-
Returned to indicate a failed attempt at registering a connection for which a password was required and was either not given or incorrect.
-
- ERR_RESTRICTED
-
“:Your connection is restricted!”
-
Sent by the server to a user upon connection to indicate the restricted nature of the connection (user mode “+r”).
-
- ERR_SUMMONDISABLED
-
“:SUMMON has been disabled”
-
Returned as a response to the SUMMON command. MUST be returned by any server which doesn’t implement it.
-
- ERR_TOOMANYCHANNELS
-
“<channel name> :You have joined too many channels”
-
Sent to a user when they have joined the maximum number of allowed channels and they try to join another channel.
-
- ERR_TOOMANYTARGETS
-
“<target> :<error code> recipients. <abort message>”
-
Returned to a client which is attempting to send a PRIVMSG/NOTICE using the user@host destination format and for a user@host which has several occurrences.
-
Returned to a client which trying to send a PRIVMSG/NOTICE to too many recipients.
-
Returned to a client which is attempting to JOIN a safe channel using the shortname when there are more than one such channel.
-
- ERR_UMODEUNKNOWNFLAG
-
“:Unknown MODE flag”
-
Returned by the server to indicate that a MODE message was sent with a nickname parameter and that the a mode flag sent was not recognized.
-
- ERR_UNAVAILRESOURCE
-
“<nick/channel> :Nick/channel is temporarily unavailable”
-
Returned by a server to a user trying to join a channel currently blocked by the channel delay mechanism.
-
Returned by a server to a user trying to change nickname when the desired nickname is blocked by the nick delay mechanism.
-
- ERR_UNIQOPPRIVSNEEDED
-
“:You’re not the original channel operator”
-
Any MODE requiring “channel creator” privileges MUST return this error if the client making the attempt is not a chanop on the specified channel.
-
- ERR_UNKNOWNCOMMAND
-
“<command> :Unknown command”
-
Returned to a registered client to indicate that the command sent is unknown by the server.
-
- ERR_UNKNOWNMODE
-
“<char> :is unknown mode char to me for <channel>”
- ERR_USERNOTINCHANNEL
-
“<nick> <channel> :They aren’t on that channel”
-
Returned by the server to indicate that the target user of the command is not on the given channel.
-
- ERR_USERONCHANNEL
-
“<user> <channel> :is already on channel”
-
Returned when a client tries to invite a user to a channel they are already on.
-
- ERR_USERSDISABLED
-
“:USERS has been disabled”
-
Returned as a response to the USERS command. MUST be returned by any server which does not implement it.
-
- ERR_USERSDONTMATCH
-
“:Cannot change mode for other users”
-
Error sent to any user trying to view or change the user mode for a user other than themselves.
-
- ERR_WASNOSUCHNICK
-
“<nickname> :There was no such nickname”
-
Returned by WHOWAS to indicate there is no history information for that nickname.
-
- ERR_WILDTOPLEVEL
-
“<mask> :Wildcard in toplevel domain”
- ERR_YOUREBANNEDCREEP
-
“:You are banned from this server”
-
Returned after an attempt to connect and register yourself with a server which has been setup to explicitly deny connections to you.
-
- ERR_YOUWILLBEBANNED
-
-
Sent by a server to a user to inform that access to the server will soon be denied.
-
- FormattingRx
- Italic
- NormalText
- RPL_ADMINEMAIL
-
“:<admin info>”
- RPL_ADMINLOC1
-
“:<admin info>”
- RPL_ADMINLOC2
-
“:<admin info>”
- RPL_ADMINME
-
“<server> :Administrative info”
- RPL_AWAY
-
“<nick> :<away message>”
- RPL_BANLIST
-
“<channel> <banmask>”
- RPL_CHANNELMODEIS
-
“<channel> <mode> <mode params>”
- RPL_CHANNEL_URL
-
“<channel> <url>”
- RPL_CLOSEEND
- RPL_CLOSING
- RPL_CREATED
-
“This server was created <date>”
- RPL_CREATIONTIME
-
“<channel> <unixtime>”
- RPL_DATASTR
- RPL_ENDOFBANLIST
-
“<channel> :End of channel ban list”
- RPL_ENDOFEXCEPTLIST
-
“<channel> :End of channel exception list”
-
When listing the ‘exception masks’ for a given channel, a server is required to send the list back using the
RPL_EXCEPTLIST
andRPL_ENDOFEXCEPTLIST
messages. A separateRPL_EXCEPTLIST
is sent for each active mask. After the masks have been listed (or if none present) aRPL_ENDOFEXCEPTLIST
MUST be sent.
-
- RPL_ENDOFINFO
-
“:End of INFO list”
- RPL_ENDOFINVITELIST
-
“<channel> :End of channel invite list”
-
When listing the ‘invitations masks’ for a given channel, a server is required to send the list back using the
RPL_INVITELIST
andRPL_ENDOFINVITELIST
messages. A separateRPL_INVITELIST
is sent for each active mask. After the masks have been listed (or if none present) aRPL_ENDOFINVITELIST
MUST be sent.
-
- RPL_ENDOFLINKS
-
“<mask> :End of LINKS list”
- RPL_ENDOFMOTD
-
“:End of MOTD command”
- RPL_ENDOFNAMES
-
“<channel> :End of NAMES list”
- RPL_ENDOFSERVICES
- RPL_ENDOFSTATS
-
“<stats letter> :End of STATS report”
- RPL_ENDOFUSERS
-
“:End of users”
- RPL_ENDOFWHO
-
“<name> :End of WHO list”
- RPL_ENDOFWHOIS
-
“<nick> :End of WHOIS list”
- RPL_ENDOFWHOWAS
-
“<nick> :End of WHOWAS”
- RPL_EXCEPTLIST
-
“<channel> <exceptionmask>”
- RPL_GLOBALUSERS
-
“:Current global users: 3 Max: 4”
- RPL_INFO
-
“:<string>”
- RPL_INFOSTART
- RPL_INVITELIST
-
“<channel> <invitemask>”
- RPL_INVITING
-
“<channel> <nick>”
-
Returned by the server to indicate that the attempted INVITE message was successful and is being passed onto the end client.
-
- RPL_ISON
-
“:*1<nick> *( ” “ <nick> )”
-
Reply format used by ISON to list replies to the query list.
-
- RPL_ISUPPORT
-
“005 nick PREFIX=(ov)@+ CHANTYPES=#& :are supported by this server”
defines the capabilities supported by the server.
Previous RFCs defined message 005 as follows:
-
Sent by the server to a user to suggest an alternative server. This is often used when the connection is refused because the server is already full.
# “Try server <server name>, port <port number>”
RPL_BOUNCE=005
-
- RPL_KILLDONE
- RPL_LINKS
-
“<mask> <server> :<hopcount> <server info>”
- RPL_LIST
-
“<channel> <# visible> :<topic>”
- RPL_LISTEND
-
“:End of LIST”
- RPL_LISTSTART
-
Obsolete. Not used.
- RPL_LOCALUSERS
-
“:Current local users: 3 Max: 4”
- RPL_LUSERCHANNELS
-
“<integer> :channels formed”
- RPL_LUSERCLIENT
-
“:There are <integer> users and <integer> services on <integer> servers”
- RPL_LUSERME
-
“:I have <integer> clients and <integer> servers”
- RPL_LUSEROP
-
“<integer> :operator(s) online”
- RPL_LUSERUNKNOWN
-
“<integer> :unknown connection(s)”
- RPL_MOTD
-
“:- <text>”
- RPL_MOTDSTART
-
“:- <server> Message of the day - ”
- RPL_MYINFO
-
“<servername> <version> <available user modes> <available channel modes>”
- RPL_MYPORTIS
- RPL_NAMREPLY
-
“( ”=“ / ”*“ / ”@“ ) <channel> :[ ”@“ / ”+“ ] <nick> *( ” “ [ ”@“ / ”+“ ] <nick> )
-
“@” is used for secret channels, “*” for private
channels, and “=” for others (public channels).
-
- RPL_NONE
- RPL_NOTOPIC
-
“<channel> :No topic is set”
- RPL_NOUSERS
-
“:Nobody logged in”
- RPL_NOWAWAY
-
“:You have been marked as being away”
- RPL_REHASHING
-
“<config file> :Rehashing”
-
If the REHASH option is used and an operator sends a REHASH message, an
RPL_REHASHING
is sent back to the operator.
-
- RPL_SERVICE
- RPL_SERVICEINFO
-
5.3 Reserved numerics
These numerics are not described above since they fall into one of the following categories:
-
no longer in use;
-
reserved for future planned use;
-
in current use but are part of a non-generic ‘feature’ of the current IRC server.
-
- RPL_SERVLIST
-
“<name> <server> <mask> <type> <hopcount> <info>”
- RPL_SERVLISTEND
-
“<mask> <type> :End of service listing”
- RPL_STATSBLINE
- RPL_STATSCLINE
- RPL_STATSCOMMANDS
-
“<command> <count> <byte count> <remote count>”
-
reports statistics on commands usage.
-
- RPL_STATSCONN
-
“::Highest connection count: 4 (4 clients) (251 since server was (re)started)”
- RPL_STATSHLINE
- RPL_STATSILINE
- RPL_STATSKLINE
- RPL_STATSLINKINFO
-
“<linkname> <sendq> <sent messages> <sent Kbytes> <received messages> <received Kbytes> <time open>”
-
reports statistics on a connection. <linkname> identifies the particular connection, <sendq> is the amount of data that is queued and waiting to be sent <sent messages> the number of messages sent, and <sent Kbytes> the amount of data sent, in Kbytes. <received messages> and <received Kbytes> are the equivalent of <sent messages> and <sent Kbytes> for received data, respectively. <time open> indicates how long ago the connection was opened, in seconds.
-
- RPL_STATSLLINE
- RPL_STATSNLINE
- RPL_STATSOLINE
-
“O <hostmask> * <name>”
-
reports the allowed hosts from where user may become IRC operators.
-
- RPL_STATSPING
- RPL_STATSQLINE
- RPL_STATSSLINE
- RPL_STATSUPTIME
-
“:Server Up %d days %d:%02d:%02d”
-
reports the server uptime.
-
- RPL_STATSVLINE
- RPL_STATSYLINE
- RPL_SUMMONING
-
“<user> :Summoning user to IRC”
-
Returned by a server answering a SUMMON message to indicate that it is summoning that user.
-
- RPL_TIME
-
“<server> :<string showing server’s local time>”
-
When replying to the TIME message, a server MUST send the reply using the
RPL_TIME
format above. The string showing the time need only contain the correct day and time there. There is no further requirement for the time string.
-
- RPL_TOPIC
-
“<channel> :<topic>”
- RPL_TOPIC_INFO
-
<channel> <set by> <unixtime>
- RPL_TRACECLASS
-
“Class <class> <count>”
- RPL_TRACECONNECTING
-
“Try. <class> <server>”
- RPL_TRACEEND
-
“<server name> <version & debug level> :End of TRACE”
- RPL_TRACEHANDSHAKE
-
“H.S. <class> <server>”
- RPL_TRACELINK
-
“Link <version & debug level> <destination> <next server> V<protocol version> <link uptime in seconds> <backstream sendq> <upstream sendq>”
- RPL_TRACELOG
-
“File <logfile> <debug level>”
- RPL_TRACENEWTYPE
-
“<newtype> 0 <client name>”
- RPL_TRACEOPERATOR
-
“Oper <class> <nick>”
- RPL_TRACERECONNECT
-
Unused.
- RPL_TRACESERVER
-
“Serv <class> <int>S <int>C <server> <nick!user|*!*>@<host|server> V<protocol version>”
- RPL_TRACESERVICE
-
“Service <class> <name> <type> <active type>”
- RPL_TRACEUNKNOWN
-
“???? <class> [<client IP address in dot form>]”
- RPL_TRACEUSER
-
“User <class> <nick>”
- RPL_TRYAGAIN
-
“<command> :Please wait a while and try again.”
-
When a server drops a command without processing it, it MUST use the reply
RPL_TRYAGAIN
to inform the originating client.
-
- RPL_UMODEIS
-
“<user mode string>”
-
To answer a query about a client’s own mode,
RPL_UMODEIS
is sent back.
-
- RPL_UNAWAY
-
“:You are no longer marked as being away”
- RPL_UNIQOPIS
-
“<channel> <nickname>”
- RPL_USERHOST
-
“:*1<reply> *( ” “ <reply> )”
-
Reply format used by USERHOST to list replies to the query list. The reply string is composed as follows:
reply = nickname [ “*” ] “=” ( “+” / “-” ) hostname
The ‘*’ indicates whether the client has registered as an Operator. The ‘-’ or ‘+’ characters represent whether the client has set an AWAY message or not respectively.
-
- RPL_USERS
-
“:<username> <ttyline> <hostname>”
- RPL_USERSSTART
-
“:UserID Terminal Host”
- RPL_VERSION
-
“<version>.<debuglevel> <server> :<comments>”
-
Reply by the server showing its version details.
The <version> is the version of the software being used (including any patchlevel revisions) and the <debuglevel> is used to indicate if the server is running in “debug mode”.
The “comments” field may contain any comments about the version or further version details.
-
- RPL_WELCOME
-
“Welcome to the Internet Relay Network <nick>!<user>@<host>”
- RPL_WHOISCHANNELS
-
“<nick> :*( ( ”@“ / ”+“ ) <channel> ” “ )”
- RPL_WHOISCHANOP
- RPL_WHOISIDLE
-
“<nick> <integer> :seconds idle”
- RPL_WHOISOPERATOR
-
“<nick> :is an IRC operator”
- RPL_WHOISSERVER
-
“<nick> <server> :<server info>”
- RPL_WHOISUSER
-
“<nick> <user> <host> * :<real name>”
- RPL_WHOREPLY
-
“<channel> <user> <host> <server> <nick> ( ”H“ / ”G“ > [”*“] [ ( ”@“ / ”+“ ) ] :<hopcount> <real name>”
- RPL_WHOWASUSER
-
“<nick> <user> <host> * :<real name>”
- RPL_YOUREOPER
-
“:You are now an IRC operator”
-
RPL_YOUREOPER
is sent back to a client which has just successfully issued an OPER message and gained operator status.
-
- RPL_YOURESERVICE
-
“You are service <servicename>”
-
Sent by the server to a service upon successful registration.
-
- RPL_YOURHOST
-
“Your host is <servername>, running version <ver>”
- Reverse
- Underline
Public Class Methods
Source
# File lib/rbot/message.rb, line 98 def Irc.color(fg=nil,bg=nil) str = Color.dup if fg str << Irc.find_color(fg) end if bg str << "," << Irc.find_color(bg) end return str end
Insert the full color code for a given foreground/background combination.