Module: Discordrb::Commands::CommandContainer
Overview
This module holds a collection of commands that can be easily added to by calling the #command function. Other containers can be included into it as well. This allows for modularization of command bots.
Instance Attribute Summary collapse
-
#commands ⇒ Hash<Symbol, Command>
readonly
Hash of command names and commands this container has.
Instance Method Summary collapse
-
#command(name, attributes = {}) {|event| ... } ⇒ Command
deprecated
Deprecated.
The command name argument will no longer support arrays in the next release. Use the
aliases
attribute instead. -
#include!(container) ⇒ Object
Includes another container into this one.
-
#include_commands(container) ⇒ Object
Adds all commands from another container into this one.
-
#remove_command(name) ⇒ Object
Removes a specific command from this container.
Methods included from RateLimiter
#bucket, #clean, #include_buckets, #rate_limited?
Instance Attribute Details
#commands ⇒ Hash<Symbol, Command> (readonly)
Returns hash of command names and commands this container has.
13 14 15 |
# File 'lib/discordrb/commands/container.rb', line 13 def commands @commands end |
Instance Method Details
#command(name, attributes = {}) {|event| ... } ⇒ Command
The command name argument will no longer support arrays in the next release.
Use the aliases
attribute instead.
LocalJumpError
s are rescued from internally, giving bots the opportunity to use return
or break
in
their blocks without propagating an exception.
Adds a new command to the container.
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/discordrb/commands/container.rb', line 60 def command(name, attributes = {}, &block) @commands ||= {} if name.is_a? Array new_command = nil name.each do |e| new_command = Command.new(e, attributes, &block) @commands[e] = new_command end new_command else new_command = Command.new(name, attributes, &block) new_command.attributes[:aliases].each do |aliased_name| @commands[aliased_name] = CommandAlias.new(aliased_name, new_command) end @commands[name] = new_command end end |
#include!(container) ⇒ Object
Includes another container into this one.
99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/discordrb/commands/container.rb', line 99 def include!(container) container_modules = container.singleton_class.included_modules # If the container is an EventContainer and we can include it, then do that include_events(container) if container_modules.include?(Discordrb::EventContainer) && respond_to?(:include_events) if container_modules.include? Discordrb::Commands::CommandContainer include_commands(container) include_buckets(container) elsif !container_modules.include? Discordrb::EventContainer raise "Could not include! this particular container - ancestors: #{container_modules}" end end |
#include_commands(container) ⇒ Object
Adds all commands from another container into this one. Existing commands will be overwritten.
89 90 91 92 93 94 95 |
# File 'lib/discordrb/commands/container.rb', line 89 def include_commands(container) handlers = container.instance_variable_get '@commands' return unless handlers @commands ||= {} @commands.merge! handlers end |
#remove_command(name) ⇒ Object
Removes a specific command from this container.
82 83 84 85 |
# File 'lib/discordrb/commands/container.rb', line 82 def remove_command(name) @commands ||= {} @commands.delete name end |