IceDragon200

[IRSB]IcyCommands (V0.101B)

Apr 7th, 2012
279
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 7.90 KB | None | 0 0
  1. # // 04/07/2012
  2. # // 04/15/2012
  3. # // Created by IceDragon
  4. # // Version 0.101B
  5. # // Neat function
  6. #=========================================#
  7. # // ● Change Log
  8. #=========================================#
  9. # // ■(04/09/2012)
  10. # //    Commands
  11. # //      memo (changes)
  12. # //        memoF replaced by memo_msg
  13. # //    Functions
  14. # //      get_save_contents()
  15. # //      load_from(contents)
  16. # //
  17. # // ■(04/10/2012)
  18. # //    Commands
  19. # //      poke
  20. # // ■(04/14/2012)
  21. # //    Commands
  22. # //      memo (changes)
  23. # //        added "REM" parameter
  24. # //        fixed "CLEAR"
  25. # // ■(04/15/2012)
  26. # //    Commands
  27. # //      memo (changes) 1.007
  28. # //        updated help
  29. # //      icver (Added)
  30. # //      poke (changes) 1.001
  31. # //        Notifies of poke success
  32. # // ■()
  33. #=========================================#
  34. class ::Hash
  35.   def get_values(*args)
  36.     args.collect{|n|self[n]}
  37.   end unless method_defined? :get_values
  38. end
  39. # //
  40. class ::IrcBot::IrcCommands::IcyCommands < ::IrcBot::IrcCommands::Command
  41.   VERSION = "V0.101B"
  42.   class HelpTable
  43.     attr_accessor :colors, :width
  44.     def initialize(width,lines=[])
  45.       @width   = width
  46.       @colors  = {}
  47.       @colors[0] = [1,0] # // Content
  48.       @colors[1] = [0,1] # // Header
  49.       @colors[2] = [1,8] # // Warning
  50.       @lines   = []
  51.       lines.each{|l|add_line(*l)} # // [string, align]
  52.     end
  53.     def clear_lines()
  54.       @lines.clear()
  55.       self
  56.     end
  57.     def add_line(string,color_set=0,align=:left,padding=0)
  58.       @lines << [string,align,padding,color_set]
  59.       self
  60.     end
  61.     def to_a()
  62.       @lines.collect{|a|a[0].align(@width,a[1],a[2]).irc_color(*@colors[a[3]])}
  63.     end
  64.   end
  65.   @@help_table = HelpTable.new(60)
  66.   def self.mauthor
  67.     "IceDragon"
  68.   end
  69.   # // Conv
  70.   def self.p2int(params_a,*ns)
  71.     ns.collect{|n|params_a[n].to_i}
  72.   end
  73.   def self.p2str(params_a,*ns)
  74.     ns.collect{|n|params_a[n].to_s}
  75.   end
  76.   def self.hlpF(str)
  77.     format("[USAGE] %s", str)
  78.   end
  79.   # // Marshalling
  80.   def self.get_save_contents()
  81.     contents = {}
  82.     contents[:memos] = @memos
  83.     contents
  84.   end
  85.   def self.load_from(contents)
  86.     @memos = contents[:memos]
  87.   end
  88.   # // scope - :channel, :return_to_sender, :user
  89.   # // access_level - :any, :registred, :vip, :dev
  90.   def self.new_command(name,scope=:channel,access_level=:user,hlp=[""],arity=0,&method)
  91.     commands_scope(scope)
  92.     access_levels( name => access_level)
  93.     help(          name => hlp         )
  94.     arities(   name => arity       )
  95.     # // author(        name => mauthor     ) # if you ever implement something like that
  96.     on(name,&method)
  97.   end
  98.   # // IcVer 1.000 - IcyCommand Version
  99.   hlp = hlpF "!icver"
  100.   new_command(:icver,:return_to_sender,:dev,hlp,0) do |data|
  101.     ex = ::IrcBot::IrcCommands::IcyCommands
  102.     "IcyCommands #{ex::VERSION} by #{ex.mauthor}"
  103.   end
  104.   # // Dice 1.004
  105.   DICE_LIMIT = 12
  106.   hlp = hlpF "!dice <int sides> [<int dies>]"
  107.   new_command(:dice,:channel,:any,hlp,1..2) do |data|
  108.     params  = data[:params]
  109.     ex      = ::IrcBot::IrcCommands::IcyCommands
  110.     sides, diecoun = ex.p2int(params.split(" "),0,1)
  111.     sides   = 1 if(sides<=0)
  112.     diecoun = 1 if(diecoun<=0)
  113.     dice    = [diecoun,DICE_LIMIT].min.times.collect{|i|1+rand(sides)}
  114.     dice.inject(0){|r,i|r+i}.to_s + " : " + dice.inspect
  115.   end
  116.   # // Coin 1.003
  117.   COIN_LIMIT = 12
  118.   hlp = hlpF "!coin <int count>"
  119.   new_command(:coin,:channel,:any,hlp,1) do |data|
  120.     params = data[:params]
  121.     ex    = ::IrcBot::IrcCommands::IcyCommands
  122.     count,= ex.p2int(params.split(" "),0)
  123.     ([[count,0].max,COIN_LIMIT].min).times.collect{|i|rand(2) == 0 ? "O" : "X"}.inspect.gsub('"',"")
  124.   end
  125.   # // Klik 1.003
  126.   hlp = hlpF "!klik"
  127.   new_command(:klik,:channel,:any,hlp,0) do |data|
  128.     params = data[:params]
  129.     ex = ::IrcBot::IrcCommands::IcyCommands; n = ex.klik.to_i
  130.     format("KLIK! %s %s", n.to_s, (n == 1 ? "sec" : "secs"))
  131.   end
  132.   def self.klik()
  133.     @then_klik ||= Time.now
  134.     @klik = Time.now - @then_klik
  135.     @then_klik = Time.now
  136.     @klik
  137.   end
  138.   # // Poke 1.001
  139.   hlp = hlpF "!poke <string name>"
  140.   new_command(:poke,:user,:registered,hlp,1) do |data|
  141.     user, params = data.get_values(:sender,:params)
  142.     unless(respond_to?(:notice))
  143.       notice user, "Poke Disabled (unabled to complete command)"
  144.     else
  145.       notice params.to_s, "#{user} has poked you"
  146.       notice user, "Poke successful"
  147.     end
  148.     nil
  149.   end
  150.   # // Memo 1.007
  151.   hlp = hlpF "!memo ([about]|[list]|[clear]|[check] <id>|[add] <recipient> <message>|[rem] <id>)"
  152.   new_command(:memo,:user,:registered,hlp,1..3) do |data|
  153.     user, params = data.get_values(:sender,:params)
  154.     ex      = ::IrcBot::IrcCommands::IcyCommands
  155.     sparams = params.split(" ")
  156.     case(sparams[0].upcase)
  157.     when "LIST"
  158.       mems = ex.memos(user)||[] # <<
  159.       ex.memo_msg("LIST",mems)
  160.     when "CHECK"
  161.       mems = ex.memos(user) # <<
  162.       mem  = mems ? mems[sparams[1].to_i] : nil
  163.       ex.memo_msg("CHECK",mem)
  164.     when "ADD"
  165.       ex.add_memo(user, sparams[1], sparams[2...sparams.size].join(" ")) ? ex.memo_msg("ADD") : ex.memo_msg("FADD")
  166.     when "REM"  
  167.       case(ex.remove_memo(user,sparams[1].to_i))
  168.       when 0 # // Invalid nick
  169.         ex.memo_msg("FREM")
  170.       when 1 # // Sucess
  171.         ex.memo_msg("REM")
  172.       when 2 # // No Memo
  173.         ex.memo_msg("NREM")
  174.       end
  175.     when "CLEAR"
  176.       ex.memo_msg("CLEAR",ex.clear_memos(user))
  177.     when "ABOUT"
  178.       "Memo V1.006 by IceDragon".align(40,:center,2).irc_color(1,12)
  179.     else
  180.       "Invalid parameters given.".align(40,:center,2).irc_color(1,5)
  181.     end
  182.   end
  183.   # // Keys are always UPCASED for ease of use I guess
  184.   def self.memos(nick)
  185.     n = ::IrcBot::Nick.where(:nick=>nick).first
  186.     n ? n.memos : nil
  187.   end
  188.   def self.add_memo(sender,recipient,message)
  189.     n = ::IrcBot::Nick.where(:nick=>recipient).first
  190.     if(n)
  191.       n.memos << ::IrcBot::Nick::Memo.new(:sender=>sender, :message=>message)
  192.       n.save!
  193.       true
  194.     else
  195.       false
  196.     end
  197.   end
  198.   def self.remove_memo(nick,id)
  199.     n = ::IrcBot::Nick.where(:nick=>recipient).first
  200.     if(n)
  201.       m = n.memos.delete_at(id)
  202.       n.save!
  203.       m ? 1 : 2
  204.     else
  205.       0
  206.     end  
  207.   end
  208.   def self.clear_memos(recipient)
  209.     n = ::IrcBot::Nick.where(:nick=>recipient.upcase).first
  210.     if(n)
  211.       n.memos.clear
  212.       n.save!
  213.       true
  214.     else
  215.       false
  216.     end
  217.   end
  218.   def self.memo_msg(type,*params)
  219.     param,=params
  220.     case(type)
  221.     when "LIST"
  222.       @@help_table.clear_lines()
  223.       @@help_table.width = 60
  224.       @@help_table.add_line(format("You have %d %s", param.size, param.size == 1 ? "Memo" : "Memos"),1,:center,0)
  225.       param.each_with_index{|m,i|@@help_table.add_line("#{i} "+m.to_short_s,0,:left,2)}
  226.       @@help_table.to_a
  227.     when "ADD"
  228.       "Memo successfully added".align(40,:center,2).irc_color(1,9)
  229.     when "FADD"
  230.       "Memo could not be added".align(40,:center,2).irc_color(1,8)
  231.     when "REM"
  232.       "Memo removed successfully".align(40,:center,2).irc_color(1,9)
  233.     when "NREM"  
  234.       "Memo does not exist".align(40,:center,2).irc_color(1,8)
  235.     when "FREM"
  236.       "Memo could not be removed".align(40,:center,2).irc_color(1,8)
  237.     when "CHECK"
  238.       if(param)
  239.         @@help_table.clear_lines()
  240.         @@help_table.width = 60
  241.         @@help_table.add_line(format("Time: %s", param.created_at),1,:center,0)
  242.         @@help_table.add_line(format("%s: %s", param.sender, param.message),0,:left,0)
  243.         @@help_table.to_a
  244.       else
  245.         "[No Memos]".align(40,:center,2).irc_color(0,1)
  246.       end
  247.     when "CLEAR"
  248.       (param ? "Memos cleared." : "No Memos to clear.").irc_color(0,1)
  249.     else # // Empty
  250.       "[NO MESSAGE]"
  251.     end
  252.   end
  253. end
  254. #=■==========================================================================■=#
  255. #                           // ● End of File ● //                              #
  256. #=■==========================================================================■=#
Advertisement
Add Comment
Please, Sign In to add comment