+#-- vim:sw=2:et
+#++
+#
+# :title: IRC message datastructures
+
module Irc
BotConfig.register BotConfigArrayValue.new('core.address_prefix',
:default => [], :wizard => true,
"#{@source.user}@#{@source.host}" rescue @source.to_s
end
+ # Access the botuser corresponding to the source, if any
+ #
+ def botuser
+ @bot.auth.autologin(@source) rescue @bot.auth.everyone
+ end
+
+
# Was the message from an identified user?
def identified?
return @identified
# channel the message was in, nil for privately addressed messages
attr_reader :channel
+ # for PRIVMSGs, false unless the message was a CTCP command,
+ # in which case it evaluates to the CTCP command itself
+ # (TIME, PING, VERSION, etc). The CTCP command parameters
+ # are then stored in the message.
+ attr_reader :ctcp
+
# for PRIVMSGs, true if the message was a CTCP ACTION (CTCP stuff
# will be stripped from the message)
attr_reader :action
@target = target
@private = false
@plugin = nil
+ @ctcp = false
@action = false
if target == @bot.myself
@address = true
end
- if(@message =~ /^\001ACTION\s(.+)\001/)
- @message = $1
- @action = true
+ if(@message =~ /^\001(\S+)(\s(.+))?\001/)
+ @ctcp = $1
+ # FIXME need to support quoting of NULL and CR/LF, see
+ # http://www.irchelp.org/irchelp/rfc/ctcpspec.html
+ @message = $3 || String.new
+ @action = @ctcp == 'ACTION'
+ debug "Received CTCP command #{@ctcp} with options #{@message} (action? #{@action})"
end
# free splitting for plugins
@replied = true
end
+ # send a CTCP response, i.e. a private NOTICE to the sender
+ # with the same CTCP command and the reply as a parameter
+ def ctcp_reply(string, options={})
+ @bot.ctcp_notice @source, @ctcp, string, options
+ end
+
# convenience method to reply "okay" in the current language to the
# message
def plainokay