Class: DiscordRDA::ComponentBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/discord_rda/entity/message_builder.rb

Overview

Builder for message components (buttons, select menus)

Instance Method Summary collapse

Constructor Details

#initialize(components_array) ⇒ ComponentBuilder

Returns a new instance of ComponentBuilder.



190
191
192
# File 'lib/discord_rda/entity/message_builder.rb', line 190

def initialize(components_array)
  @components = components_array
end

Instance Method Details

#button(style:, label:, custom_id: nil, url: nil, emoji: nil, disabled: false) ⇒ self

Add a button component

Parameters:

  • style (Integer)

    Button style (1=primary, 2=secondary, 3=success, 4=danger, 5=link)

  • label (String)

    Button label

  • custom_id (String) (defaults to: nil)

    Custom ID for button interaction

  • url (String) (defaults to: nil)

    URL for link buttons

  • emoji (String) (defaults to: nil)

    Emoji for the button

  • disabled (Boolean) (defaults to: false)

    Whether button is disabled

Returns:

  • (self)


202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/discord_rda/entity/message_builder.rb', line 202

def button(style:, label:, custom_id: nil, url: nil, emoji: nil, disabled: false)
  btn = {
    type: 2, # Button type
    style: style,
    label: label,
    disabled: disabled
  }
  btn[:custom_id] = custom_id if custom_id
  btn[:url] = url if url
  btn[:emoji] = emoji.is_a?(Hash) ? emoji : { name: emoji } if emoji

  @components << btn
  self
end

#channel_select(custom_id:, placeholder: nil, channel_types: nil, min_values: 1, max_values: 1, disabled: false) ⇒ self

Add a channel select menu (type 8)

Parameters:

  • custom_id (String)

    Custom ID for interaction

  • placeholder (String) (defaults to: nil)

    Placeholder text

  • channel_types (Array<Integer>) (defaults to: nil)

    Channel types to show

  • min_values (Integer) (defaults to: 1)

    Minimum values

  • max_values (Integer) (defaults to: 1)

    Maximum values

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


357
358
359
360
361
362
363
364
365
366
367
368
369
# File 'lib/discord_rda/entity/message_builder.rb', line 357

def channel_select(custom_id:, placeholder: nil, channel_types: nil, min_values: 1, max_values: 1, disabled: false)
  menu = {
    type: 8,
    custom_id: custom_id,
    min_values: min_values,
    max_values: max_values,
    disabled: disabled
  }
  menu[:placeholder] = placeholder if placeholder
  menu[:channel_types] = channel_types if channel_types
  @components << menu
  self
end

#danger_button(label:, custom_id:, emoji: nil, disabled: false) ⇒ self

Add a danger button (style 4)

Parameters:

  • label (String)

    Button label

  • custom_id (String)

    Custom ID for interaction

  • emoji (String) (defaults to: nil)

    Optional emoji

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


253
254
255
# File 'lib/discord_rda/entity/message_builder.rb', line 253

def danger_button(label:, custom_id:, emoji: nil, disabled: false)
  button(style: 4, label: label, custom_id: custom_id, emoji: emoji, disabled: disabled)
end

Add a link button (style 5)

Parameters:

  • label (String)

    Button label

  • url (String)

    URL to open

  • emoji (String) (defaults to: nil)

    Optional emoji

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


263
264
265
# File 'lib/discord_rda/entity/message_builder.rb', line 263

def link_button(label:, url:, emoji: nil, disabled: false)
  button(style: 5, label: label, url: url, emoji: emoji, disabled: disabled)
end

#mentionable_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false) ⇒ self

Add a mentionable select menu (type 7)

Parameters:

  • custom_id (String)

    Custom ID for interaction

  • placeholder (String) (defaults to: nil)

    Placeholder text

  • min_values (Integer) (defaults to: 1)

    Minimum values

  • max_values (Integer) (defaults to: 1)

    Maximum values

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


336
337
338
339
340
341
342
343
344
345
346
347
# File 'lib/discord_rda/entity/message_builder.rb', line 336

def mentionable_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false)
  menu = {
    type: 7,
    custom_id: custom_id,
    min_values: min_values,
    max_values: max_values,
    disabled: disabled
  }
  menu[:placeholder] = placeholder if placeholder
  @components << menu
  self
end

#primary_button(label:, custom_id:, emoji: nil, disabled: false) ⇒ self

Add a primary button (style 1)

Parameters:

  • label (String)

    Button label

  • custom_id (String)

    Custom ID for interaction

  • emoji (String) (defaults to: nil)

    Optional emoji

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


223
224
225
# File 'lib/discord_rda/entity/message_builder.rb', line 223

def primary_button(label:, custom_id:, emoji: nil, disabled: false)
  button(style: 1, label: label, custom_id: custom_id, emoji: emoji, disabled: disabled)
end

#role_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false) ⇒ self

Add a role select menu (type 6)

Parameters:

  • custom_id (String)

    Custom ID for interaction

  • placeholder (String) (defaults to: nil)

    Placeholder text

  • min_values (Integer) (defaults to: 1)

    Minimum values

  • max_values (Integer) (defaults to: 1)

    Maximum values

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/discord_rda/entity/message_builder.rb', line 316

def role_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false)
  menu = {
    type: 6,
    custom_id: custom_id,
    min_values: min_values,
    max_values: max_values,
    disabled: disabled
  }
  menu[:placeholder] = placeholder if placeholder
  @components << menu
  self
end

#secondary_button(label:, custom_id:, emoji: nil, disabled: false) ⇒ self

Add a secondary button (style 2)

Parameters:

  • label (String)

    Button label

  • custom_id (String)

    Custom ID for interaction

  • emoji (String) (defaults to: nil)

    Optional emoji

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


233
234
235
# File 'lib/discord_rda/entity/message_builder.rb', line 233

def secondary_button(label:, custom_id:, emoji: nil, disabled: false)
  button(style: 2, label: label, custom_id: custom_id, emoji: emoji, disabled: disabled)
end

#select_menu(custom_id:, options:, placeholder: nil, min_values: 1, max_values: 1, disabled: false) ⇒ self

Add a string select menu (type 3)

Parameters:

  • custom_id (String)

    Custom ID for select interaction

  • options (Array<Hash>)

    Select options

  • placeholder (String) (defaults to: nil)

    Placeholder text

  • min_values (Integer) (defaults to: 1)

    Minimum values to select

  • max_values (Integer) (defaults to: 1)

    Maximum values to select

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


275
276
277
278
279
280
281
282
283
284
285
286
287
# File 'lib/discord_rda/entity/message_builder.rb', line 275

def select_menu(custom_id:, options:, placeholder: nil, min_values: 1, max_values: 1, disabled: false)
  menu = {
    type: 3,
    custom_id: custom_id,
    options: options,
    min_values: min_values,
    max_values: max_values,
    disabled: disabled
  }
  menu[:placeholder] = placeholder if placeholder
  @components << menu
  self
end

#success_button(label:, custom_id:, emoji: nil, disabled: false) ⇒ self

Add a success button (style 3)

Parameters:

  • label (String)

    Button label

  • custom_id (String)

    Custom ID for interaction

  • emoji (String) (defaults to: nil)

    Optional emoji

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


243
244
245
# File 'lib/discord_rda/entity/message_builder.rb', line 243

def success_button(label:, custom_id:, emoji: nil, disabled: false)
  button(style: 3, label: label, custom_id: custom_id, emoji: emoji, disabled: disabled)
end

#user_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false) ⇒ self

Add a user select menu (type 5)

Parameters:

  • custom_id (String)

    Custom ID for interaction

  • placeholder (String) (defaults to: nil)

    Placeholder text

  • min_values (Integer) (defaults to: 1)

    Minimum values

  • max_values (Integer) (defaults to: 1)

    Maximum values

  • disabled (Boolean) (defaults to: false)

    Whether disabled

Returns:

  • (self)


296
297
298
299
300
301
302
303
304
305
306
307
# File 'lib/discord_rda/entity/message_builder.rb', line 296

def user_select(custom_id:, placeholder: nil, min_values: 1, max_values: 1, disabled: false)
  menu = {
    type: 5,
    custom_id: custom_id,
    min_values: min_values,
    max_values: max_values,
    disabled: disabled
  }
  menu[:placeholder] = placeholder if placeholder
  @components << menu
  self
end