class Irc::BasicUserMessage
base user message class, all user messages derive from this (a user message is defined as having a source hostmask, a target nick/channel and a message part)
Attributes
associated bot
should the message be ignored?
should the message be ignored?
set this to true if the method that delegates the message is run in a thread
set this to true if the method that delegates the message is run in a thread
contents of the message (for logging purposes)
contents of the message (stripped of initial/final format codes)
contents of the message (stripped of all formatting)
has the message been replied to/handled by a plugin?
has the message been replied to/handled by a plugin?
associated server
User
that originated the message
User/Channel message was sent to
when the message was received
Public Class Methods
instantiate a new Message
- bot
-
associated bot class
- server
-
Server
where the message took place - source
-
User
that sent the message - target
-
User/Channel is destined for
- message
-
actual message
# File lib/rbot/message.rb, line 179 def initialize(bot, server, source, target, message) @msg_wants_id = false unless defined? @msg_wants_id @time = Time.now @bot = bot @source = source @address = false @prefixed = false @target = target @message = message || "" @replied = false @server = server @ignored = false @in_thread = false @identified = false if @msg_wants_id && @server.capabilities[:"identify-msg"] if @message =~ /^([-+])(.*)/ @identified = ($1=="+") @message = $2 else warning "Message does not have identification" end end @logmessage = @message.dup @plainmessage = BasicUserMessage.strip_formatting(@message) @message = BasicUserMessage.strip_initial_formatting(@message) if target && target == @bot.myself @address = true end end
# File lib/rbot/message.rb, line 264 def BasicUserMessage.strip_formatting(string) string.gsub(FormattingRx,"") end
# File lib/rbot/message.rb, line 259 def BasicUserMessage.strip_initial_formatting(string) return "" unless string ret = string.gsub(/^#{FormattingRx}|#{FormattingRx}$/,"") end
strip mIRC colour escapes from a string
# File lib/rbot/message.rb, line 252 def BasicUserMessage.stripcolour(string) return "" unless string ret = string.gsub(ColorRx, "") #ret.tr!("\x00-\x1f", "") ret end
Public Instance Methods
returns true if the message was addressed to the bot. This includes any private message to the bot, or any public message which looks like it’s addressed to the bot, e.g. “bot: foo”, “bot, foo”, a kick message when bot was kicked etc.
# File lib/rbot/message.rb, line 241 def address? return @address end
Access the botuser corresponding to the source, if any
# File lib/rbot/message.rb, line 227 def botuser source.botuser rescue @bot.auth.everyone end
Was the message from an identified user?
# File lib/rbot/message.rb, line 233 def identified? return @identified end
# File lib/rbot/message.rb, line 150 def inspect(fields=nil) ret = self.__to_s__[0..-2] ret << ' bot=' << @bot.__to_s__ ret << ' server=' << server.to_s ret << ' time=' << time.to_s ret << ' source=' << source.to_s ret << ' target=' << target.to_s ret << ' message=' << message.inspect ret << ' logmessage=' << logmessage.inspect ret << ' plainmessage=' << plainmessage.inspect ret << fields if fields ret << ' (identified)' if identified? if address? ret << ' (addressed to me' ret << ', with prefix' if prefixed? ret << ')' end ret << ' (replied)' if replied? ret << ' (ignored)' if ignored? ret << ' (in thread)' if in_thread? ret << '>' end
We extend the BasicUserMessage
class with a method that parses a string which is a channel list as matched by IN_CHAN(_LIST) and co. The method returns an array of channel names, where ‘private’ or ‘pvt’ is replaced by the Symbol
:“?”, ‘here’ is replaced by the channel of the message or by :“?” (depending on whether the message target is the bot or a Channel
), and ‘anywhere’ and ‘everywhere’ are replaced by Symbol
:*
# File lib/rbot/core/utils/extends.rb, line 421 def parse_channel_list(string) return [:*] if [:anywhere, :everywhere].include? string.to_sym string.scan( /(?:^|,?(?:\s+and)?\s+)(?:in|on\s+)?(#{Regexp::Irc::GEN_CHAN}|here|private|pvt)/ ).map { |chan_ar| chan = chan_ar.first case chan.to_sym when :private, :pvt :"?" when :here case self.target when Channel self.target.name else :"?" end else chan end }.uniq end
returns true if the messaged was addressed to the bot via the address prefix. This can be used to tell appart “!do this” from “botname, do this”
# File lib/rbot/message.rb, line 247 def prefixed? return @prefixed end
The recurse depth of a message, for fake messages. 0 means an original message
# File lib/rbot/core/utils/extends.rb, line 445 def recurse_depth unless defined? @recurse_depth @recurse_depth = 0 end @recurse_depth end
Set the recurse depth of a message, for fake messages. 0 should only be used by original messages
# File lib/rbot/core/utils/extends.rb, line 454 def recurse_depth=(val) @recurse_depth = val end
Access the user@host of the source
# File lib/rbot/message.rb, line 221 def sourceaddress "#{@source.user}@#{@source.host}" rescue @source.to_s end
Access the nick of the source
# File lib/rbot/message.rb, line 215 def sourcenick @source.nick rescue @source.to_s end