#-- vim:sw=2:et #++ # # :title: rbot basic management from IRC # # Author:: Giuseppe "Oblomov" Bilotta # Copyright:: (C) 2006,2007 Giuseppe Bilotta # License:: GPL v2 class BasicsModule < CoreBotModule def listen(m) return unless m.kind_of?(PrivMessage) if m.message =~ /^\001PING\s+(.+)\001/ ping_id = $1 if m.private? @bot.notice m.source, "\001PING #{ping_id}\001" @bot.irclog "@ #{m.source} pinged me" else @bot.notice m.source, "\001PING #{ping_id}\001" @bot.irclog "@ #{m.source} pinged #{m.target}" end end end def bot_join(m, param) if param[:pass] @bot.join param[:chan], param[:pass] else @bot.join param[:chan] end end def bot_part(m, param) if param[:chan] @bot.part param[:chan] else @bot.part m.target if m.public? end end def bot_quit(m, param) @bot.quit(param[:msg] ? param[:msg].join(" ") : nil) end def bot_restart(m, param) @bot.restart(param[:msg] ? param[:msg].join(" ") : nil) end def bot_hide(m, param) @bot.join 0 end def bot_say(m, param) @bot.say param[:where], param[:what].join(" ") end def bot_action(m, param) @bot.action param[:where], param[:what].join(" ") end def bot_mode(m, param) @bot.mode param[:where], param[:what], param[:who].join(" ") end def bot_ping(m, param) m.reply "pong" end def bot_quiet(m, param) if param.has_key?(:where) @bot.set_quiet param[:where].sub(/^here$/, m.target.downcase) else @bot.set_quiet end # Make sense when the commmand is given in private or in a non-quieted # channel m.okay end def bot_talk(m, param) if param.has_key?(:where) @bot.reset_quiet param[:where].sub(/^here$/, m.target.downcase) else @bot.reset_quiet end # Make sense when the commmand is given in private or in a non-quieted # channel m.okay end def bot_help(m, param) m.reply @bot.help(param[:topic].join(" ")) end #TODO move these to a "chatback" plugin # when (/^(botsnack|ciggie)$/i) # @bot.say m.replyto, @lang.get("thanks_X") % m.sourcenick if(m.public?) # @bot.say m.replyto, @lang.get("thanks") if(m.private?) # when (/^#{Regexp.escape(@bot.nick)}!*$/) # @bot.say m.replyto, @lang.get("hello_X") % m.sourcenick # handle help requests for "core" topics def help(cmd, topic="") case cmd when "quit" _("quit [] => quit IRC with message ") when "restart" _("restart => completely stop and restart the bot (including reconnect)") when "join" _("join [] => join channel with secret key if specified. #{myself} also responds to invites if you have the required access level") when "part" _("part => part channel ") when "hide" _("hide => part all channels") when "nick" _("nick => attempt to change nick to ") when "say" _("say | => say to or in private message to ") when "action" _("action | => does a /me to or in private message to ") when "quiet" _("quiet [in here|] => with no arguments, stop speaking in all channels, if \"in here\", stop speaking in this channel, or stop speaking in ") when "talk" _("talk [in here|] => with no arguments, resume speaking in all channels, if \"in here\", resume speaking in this channel, or resume speaking in ") when "version" _("version => describes software version") when "ping" _("ping => replies with a pong") when "mode" _("mode => set channel modes for on to ") # when "botsnack" # return "botsnack => reward #{myself} for being good" # when "hello" # return "hello|hi|hey|yo [#{myself}] => greet the bot" else _("%{name}: quit, restart, join, part, hide, save, nick, say, action, topic, quiet, talk,version, ping, mode") % {:name=>name} #, botsnack, hello end end end basics = BasicsModule.new basics.map "quit *msg", :action => 'bot_quit', :defaults => { :msg => nil }, :auth_path => 'quit' basics.map "restart *msg", :action => 'bot_restart', :defaults => { :msg => nil }, :auth_path => 'quit' basics.map "quiet [in] [:where]", :action => 'bot_quiet', :auth_path => 'talk::set' basics.map "talk [in] [:where]", :action => 'bot_talk', :auth_path => 'talk::set' basics.map "say :where *what", :action => 'bot_say', :auth_path => 'talk::do' basics.map "action :where *what", :action => 'bot_action', :auth_path => 'talk::do' basics.map "mode :where :what *who", :action => 'bot_mode', :auth_path => 'talk::do' basics.map "join :chan :pass", :action => 'bot_join', :defaults => {:pass => nil}, :auth_path => 'move' basics.map "part :chan", :action => 'bot_part', :defaults => {:chan => nil}, :auth_path => 'move' basics.map "hide", :action => 'bot_hide', :auth_path => 'move' basics.map "ping", :action => 'bot_ping', :auth_path => '!ping!' basics.map "help *topic", :action => 'bot_help', :defaults => { :topic => [""] }, :auth_path => '!help!' basics.default_auth('*', false)