def Timer(interval, options = {}, &block)
      options = {:method => :timer, :threaded => true, :interval => interval}.merge(options)
      block ||= self.method(options[:method])
      timer   = Cinch::Timer.new(bot, options, &block)
      timer.start

      if self.respond_to?(:timers)
        timers << timer
      end

      timer
    end
def Timer(interval, options = {}, &block)
      options = {:method => :timer, :threaded => true, :interval => interval}.merge(options)
      block ||= self.method(options[:method])
      timer   = Cinch::Timer.new(bot, options, &block)
      timer.start

      if self.respond_to?(:timers)
        timers << timer
      end

      timer
    end
@example Used as a class method in a plugin
   timer 5, method: :some_method
   def some_method
     Channel("#cinch-bots").send(Time.now.to_s)
   end

 @example Used as an instance method in a plugin
   match "start timer"
   def execute(m)
     Timer(5) { puts "timer fired" }
   end

 @example Used as an instance method in a traditional `on` handler
   on :message, "start timer" do
     Timer(5) { puts "timer fired" }
   end

 @param [Numeric] interval Interval in seconds
 @param [Proc] block A proc to execute
 @option options [Symbol] :method (:timer) Method to call (only
   if no proc is provided)
 @option options [Boolean] :threaded (true) Call method in a
   thread?
 @option options [Integer] :shots (Float::INFINITY) How often
   should the timer fire?
 @option options [Boolean] :start_automatically (true) If true,
   the timer will automatically start after the bot finished
   connecting.
 @option options [Boolean] :stop_automaticall (true) If true, the
   timer will automatically stop when the bot disconnects.
 @return [Timer]
 @since 2.0.0