:desc => "when replying with nick put this character after the nick of the user the bot is replying to"
)
- Color = "\003"
+ # Define standard IRC attriubtes (not so standard actually,
+ # but the closest thing we have ...)
Bold = "\002"
Underline = "\037"
Reverse = "\026"
+ Italic = "\011"
+ NormalText = "\017"
+
+ # 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.
+ Color = "\003"
+ ColorRx = /#{Color}\d?\d?(?:,\d\d?)?/
+
+ # Standard color codes
+ ColorCode = {
+ :black => 1,
+ :blue => 2,
+ :navyblue => 2,
+ :navy_blue => 2,
+ :green => 3,
+ :red => 4,
+ :brown => 5,
+ :purple => 6,
+ :olive => 7,
+ :yellow => 8,
+ :limegreen => 9,
+ :lime_green => 9,
+ :teal => 10,
+ :aqualight => 11,
+ :aqua_light => 11,
+ :royal_blue => 12,
+ :hotpink => 13,
+ :hot_pink => 13,
+ :darkgray => 14,
+ :dark_gray => 14,
+ :lightgray => 15,
+ :light_gray => 15,
+ :white => 16
+ }
+
+ # Convert a String or Symbol into a color number
+ def Irc.find_color(data)
+ if Integer === data
+ data
+ else
+ f = if String === data
+ data.intern
+ else
+ data
+ end
+ if ColorCode.key?(f)
+ ColorCode[f]
+ else
+ 0
+ end
+ end
+ end
+
+ # Insert the full color code for a given
+ # foreground/background combination.
+ def Irc.color(fg=nil,bg=nil)
+ str = Color.dup
+ if fg
+ str << Irc.find_color(fg).to_s
+ end
+ if bg
+ str << "," << Irc.find_color(bg).to_s
+ end
+ return str
+ end
# base user message class, all user messages derive from this
# (a user message is defined as having a source hostmask, a target
@server = server
@identified = false
- if @msg_wants_id && @server.capabilities["identify-msg".to_sym]
- if @message =~ /([-+])(.*)/
+ if @msg_wants_id && @server.capabilities[:"identify-msg"]
+ if @message =~ /^([-+])(.*)/
@identified = ($1=="+")
@message = $2
else
# Access the nick of the source
#
def sourcenick
- @source.nick
+ @source.nick rescue @source.to_s
end
# Access the user@host of the source
#
def sourceaddress
- "#{@source.user}@#{@source.host}"
+ "#{@source.user}@#{@source.host}" rescue @source.to_s
end
# Was the message from an identified user?
# strip mIRC colour escapes from a string
def BasicUserMessage.stripcolour(string)
return "" unless string
- ret = string.gsub(/\cC\d\d?(?:,\d\d?)?/, "")
+ ret = string.gsub(ColorRx, "")
#ret.tr!("\x00-\x1f", "")
ret
end
# <tt>@bot.say m.replyto, string</tt>
# So if the message is private, it will reply to the user. If it was
# in a channel, it will reply in the channel.
- def plainreply(string)
- @bot.say @replyto, string
+ def plainreply(string, options={})
+ @bot.say @replyto, string, options
@replied = true
end
# Same as reply, but when replying in public it adds the nick of the user
# the bot is replying to
- def nickreply(string)
+ def nickreply(string, options={})
extra = self.public? ? "#{@source}#{@bot.config['core.nick_postfix']} " : ""
- @bot.say @replyto, extra + string
+ @bot.say @replyto, extra + string, options
@replied = true
end
# the default reply style is to nickreply unless the reply already contains
# the nick or core.reply_with_nick is set to false
#
- def reply(string)
+ def reply(string, options={})
if @bot.config['core.reply_with_nick'] and not string =~ /\b#{@source}\b/
- return nickreply(string)
+ return nickreply(string, options)
end
- plainreply(string)
+ plainreply(string, options)
end
# convenience method to reply to a message with an action. It's the
# <tt>@bot.action m.replyto, string</tt>
# So if the message is private, it will reply to the user. If it was
# in a channel, it will reply in the channel.
- def act(string)
- @bot.action @replyto, string
+ def act(string, options={})
+ @bot.action @replyto, string, options
@replied = true
end
# the default okay style is the same as the default reply style
#
def okay
- self.reply @bot.lang.get("okay")
+ if @bot.config['core.reply_with_nick']
+ return nickokay
+ end
+ plainokay
end
end