Module: Discorb::Command::Handler

Included in:
Discorb::Client
Defined in:
lib/discorb/command.rb

Overview

Module to handle commands.

Instance Method Summary collapse

Instance Method Details

#message_command(command_name, guild_ids: nil, &block) {|interaction, message| ... } ⇒ Discorb::Command::Command

Add message context menu command.

Parameters:

  • command_name (String)

    Command name.

  • guild_ids (Array<#to_s>, false, nil) (defaults to: nil)

    Guild IDs to set the command to. false to global command, nil to use default.

  • block (Proc)

    Command block.

Yields:

  • (interaction, message)

    Block to execute.

Yield Parameters:

Returns:



76
77
78
79
80
# File 'lib/discorb/command.rb', line 76

def message_command(command_name, guild_ids: nil, &block)
  command = Discorb::Command::Command.new(command_name, guild_ids, block, 3)
  @commands << command
  command
end

#setup_commands(token = nil, guild_ids: nil) -> Object

Note:

token parameter only required if you don't run client.

Setup commands.

Parameters:

  • token (String) (defaults to: nil)

    Bot token.

  • guild_ids (Array<#to_s>, false, nil) (defaults to: nil)

    Guild IDs to use as default. If false is given, it will be global command.

See Also:



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/discorb/command.rb', line 109

def setup_commands(token = nil, guild_ids: nil)
  Async do
    @token ||= token
    @http = HTTP.new(self)
    global_commands = @commands.select { |c| c.guild_ids == false or c.guild_ids == [] }
    local_commands = @commands.select { |c| c.guild_ids.is_a?(Array) and c.guild_ids.any? }
    default_commands = @commands.select { |c| c.guild_ids.nil? }
    if guild_ids.is_a?(Array)
      default_commands.each do |command|
        command.instance_variable_set(:@guild_ids, guild_ids)
      end
      local_commands += default_commands
    else
      global_commands += default_commands
    end
    final_guild_ids = local_commands.map(&:guild_ids).flatten.map(&:to_s).uniq
    app_info = fetch_application.wait
    http.put("/applications/#{app_info.id}/commands", global_commands.map(&:to_hash)).wait unless global_commands.empty?
    final_guild_ids.each do |guild_id|
      commands = local_commands.select { |c| c.guild_ids.include?(guild_id) }
      http.put("/applications/#{app_info.id}/guilds/#{guild_id}/commands", commands.map(&:to_hash)).wait
    end unless final_guild_ids.empty?
    @log.info "Successfully setup commands"
  end
end

#slash(command_name, description, options = {}, guild_ids: nil, &block) -> Discorb::Command::Command::SlashCommand

Add new top-level command.

Parameters:

  • command_name (String)

    Command name.

  • description (String)

    Command description.

  • options (Hash{String => Hash{:description => String, :optional => Boolean, :type => Object}}) (defaults to: {})

    Command options. The key is the option name, the value is a hash with the following keys:

    | Key | Type | Description | | — | — | — | | :description | String | Description of the option. | | :optional | Boolean | Whether the option is optional or not. | | :type | Object | Type of the option. | | :choice | Hash{String => String, Integer, Float} | Type of the option. |

  • guild_ids (Array<#to_s>, false, nil) (defaults to: nil)

    Guild IDs to set the command to. false to global command, nil to use default.

  • block (Proc)

    Command block.

Returns:

See Also:



35
36
37
38
39
40
# File 'lib/discorb/command.rb', line 35

def slash(command_name, description, options = {}, guild_ids: nil, &block)
  command = Discorb::Command::Command::SlashCommand.new(command_name, description, options, guild_ids, block, 1, "")
  @commands << command
  @bottom_commands << command
  command
end

#slash_group(command_name, description, guild_ids: nil) { ... } ⇒ Discorb::Command::Command::GroupCommand

Add new command with group.

Parameters:

  • command_name (String)

    Command name.

  • description (String)

    Command description.

  • guild_ids (Array<#to_s>, false, nil) (defaults to: nil)

    Guild IDs to set the command to. false to global command, nil to use default.

Yields:

  • Block to execute as the command. It can be used to define sub-commands.

Returns:

See Also:



57
58
59
60
61
62
# File 'lib/discorb/command.rb', line 57

def slash_group(command_name, description, guild_ids: nil, &block)
  command = Discorb::Command::Command::GroupCommand.new(command_name, description, guild_ids, nil, self)
  command.instance_eval(&block) if block_given?
  @commands << command
  command
end

#user_command(command_name, guild_ids: nil, &block) {|interaction, user| ... } ⇒ Discorb::Command::Command

Add user context menu command.

Parameters:

  • command_name (String)

    Command name.

  • guild_ids (Array<#to_s>, false, nil) (defaults to: nil)

    Guild IDs to set the command to. false to global command, nil to use default.

  • block (Proc)

    Command block.

Yields:

  • (interaction, user)

    Block to execute.

Yield Parameters:

Returns:



94
95
96
97
98
# File 'lib/discorb/command.rb', line 94

def user_command(command_name, guild_ids: nil, &block)
  command = Discorb::Command::Command.new(command_name, guild_ids, block, 2)
  @commands << command
  command
end