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)
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
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
Generated with the Darkfish Rdoc Generator 2.