Sha256: 6245c309933d8d6ab8c3412910f7a8bad1780d331a422b9d1000e53cde8740cf

Contents?: true

Size: 1.97 KB

Versions: 12

Compression:

Stored size: 1.97 KB

Contents

# frozen_string_literal: true

module Discorb
  #
  # Module to make extension.
  # extend this module to make your own extension.
  # @see file:docs/extension.md
  # @abstract
  #
  module Extension
    include Discorb::ApplicationCommand::Handler
    undef setup_commands

    @events = {}
    @client = nil

    #
    # Define a new event.
    #
    # @param [Symbol] event_name The name of the event.
    # @param [Symbol] id The id of the event. Used to delete the event.
    # @param [Hash] metadata Other metadata.
    # @param [Proc] block The block to execute when the event is triggered.
    #
    # @return [Discorb::Event] The event.
    #
    def event(event_name, id: nil, **metadata, &block)
      raise ArgumentError, "Event name must be a symbol" unless event_name.is_a?(Symbol)
      raise ArgumentError, "block must be a Proc" unless block.is_a?(Proc)

      @events[event_name] ||= []
      metadata[:extension] = self.name
      @events[event_name] << Discorb::Event.new(block, id, metadata)
    end

    #
    # Define a new once event.
    #
    # @param [Symbol] event_name The name of the event.
    # @param [Symbol] id The id of the event. Used to delete the event.
    # @param [Hash] metadata Other metadata.
    # @param [Proc] block The block to execute when the event is triggered.
    #
    # @return [Discorb::Event] The event.
    #
    def once_event(event_name, id: nil, **metadata, &block)
      event(event_name, id: id, once: true, **metadata, &block)
    end

    # @return [Hash{Symbol => Array<Discorb::Event>}] The events of the extension.
    attr_reader :events
    # @return [Array<Discorb::ApplicationCommand::Command>] The commands of the extension.
    attr_reader :commands
    # @private
    attr_reader :bottom_commands

    # @!visibility private
    attr_accessor :client

    def self.extended(obj)
      obj.instance_variable_set(:@events, {})
      obj.instance_variable_set(:@commands, [])
      obj.instance_variable_set(:@bottom_commands, [])
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
discorb-0.9.3 lib/discorb/extension.rb
discorb-0.9.1 lib/discorb/extension.rb
discorb-0.9.0 lib/discorb/extension.rb
discorb-0.8.2 lib/discorb/extension.rb
discorb-0.8.1 lib/discorb/extension.rb
discorb-0.8.0 lib/discorb/extension.rb
discorb-0.7.6 lib/discorb/extension.rb
discorb-0.7.3 lib/discorb/extension.rb
discorb-0.7.2 lib/discorb/extension.rb
discorb-0.7.1 lib/discorb/extension.rb
discorb-0.7.0 lib/discorb/extension.rb
discorb-0.6.1 lib/discorb/extension.rb