125 lines
3.3 KiB
GDScript3
125 lines
3.3 KiB
GDScript3
|
|
class_name SelectMenu
|
||
|
|
"""
|
||
|
|
Represents a Discord select menu.
|
||
|
|
"""
|
||
|
|
|
||
|
|
var custom_id: String: set = set_custom_id, get = get_custom_id
|
||
|
|
var placeholder: String: set = set_placeholder, get = get_placeholder
|
||
|
|
var options: Array: set = set_options, get = get_options
|
||
|
|
|
||
|
|
var min_values = 1: set = set_min_values, get = get_min_values
|
||
|
|
var max_values = 1: set = set_max_values, get = get_max_values
|
||
|
|
|
||
|
|
var disabled: bool = false: set = set_disabled, get = get_disabled
|
||
|
|
|
||
|
|
var type: int = 3
|
||
|
|
|
||
|
|
|
||
|
|
func set_custom_id(new_custom_id):
|
||
|
|
Helpers.assert_length(new_custom_id, 100, 'custom_id of SelectMenu cannot be more than 100 characters.')
|
||
|
|
custom_id = new_custom_id
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_custom_id() -> String:
|
||
|
|
return custom_id
|
||
|
|
|
||
|
|
|
||
|
|
func add_option(value: String, label: String, data: Dictionary = {}):
|
||
|
|
assert(options.size() <= 25, 'options of SelectMenu cannot have more than 25 options')
|
||
|
|
assert(Helpers.is_valid_str(value), 'value of SelectMenu option must be a valid String')
|
||
|
|
Helpers.assert_length(value, 100, 'value of SelectMenu option cannot be more than 100 characters')
|
||
|
|
assert(Helpers.is_valid_str(label), 'SelectMenu option must have a label')
|
||
|
|
Helpers.assert_length(label, 100, 'label of SelectMenu option cannot be more than 100 characters')
|
||
|
|
|
||
|
|
# Parse data
|
||
|
|
#{description: "", emoji: {}, default = false}
|
||
|
|
var _data = {
|
||
|
|
'value': value,
|
||
|
|
'label': label
|
||
|
|
}
|
||
|
|
if data.has('description'):
|
||
|
|
assert(typeof(data.description) == TYPE_STRING, 'description of SelectMenu option must be a String')
|
||
|
|
Helpers.assert_length(data.description, 100, 'description of SelectMenu cannot be more than 100 characters')
|
||
|
|
_data['description'] = data.description
|
||
|
|
|
||
|
|
if data.has('emoji'):
|
||
|
|
assert(typeof(data.emoji) == TYPE_DICTIONARY, 'emoji of SelectMenu option must be a Dictionary')
|
||
|
|
_data['emoji'] = data.emoji
|
||
|
|
|
||
|
|
if data.has('default'):
|
||
|
|
assert(typeof(data.default) == TYPE_BOOL, 'default of SelectMenu option must be a bool')
|
||
|
|
_data['default'] = data.default
|
||
|
|
|
||
|
|
options.append(_data)
|
||
|
|
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func set_options(new_options: Array):
|
||
|
|
options = new_options
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_options() -> Array:
|
||
|
|
return options
|
||
|
|
|
||
|
|
|
||
|
|
func set_placeholder(new_placeholder: String):
|
||
|
|
Helpers.assert_length(new_placeholder, 100, 'placeholder of SelectMenu cannot be more than 100 characters.')
|
||
|
|
placeholder = new_placeholder
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_placeholder() -> String:
|
||
|
|
return placeholder
|
||
|
|
|
||
|
|
|
||
|
|
func set_min_values(new_min_values: int):
|
||
|
|
assert(new_min_values <= 25, 'min_values of SelectMenu cannot be more than 25')
|
||
|
|
min_values = new_min_values
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_min_values() -> int:
|
||
|
|
return min_values
|
||
|
|
|
||
|
|
|
||
|
|
func set_max_values(new_max_values: int):
|
||
|
|
assert(new_max_values <= 25, 'max_values of SelectMenu cannot be more than 25')
|
||
|
|
max_values = new_max_values
|
||
|
|
return self
|
||
|
|
|
||
|
|
func get_max_values() -> int:
|
||
|
|
return max_values
|
||
|
|
|
||
|
|
|
||
|
|
func set_disabled(new_value: bool):
|
||
|
|
disabled = new_value
|
||
|
|
return self
|
||
|
|
|
||
|
|
func get_disabled() -> bool:
|
||
|
|
return disabled
|
||
|
|
|
||
|
|
|
||
|
|
func _to_string(pretty: bool = false) -> String:
|
||
|
|
return JSON.stringify(_to_dict(), '\t') if pretty else JSON.stringify(_to_dict())
|
||
|
|
|
||
|
|
|
||
|
|
func print():
|
||
|
|
print(_to_string(true))
|
||
|
|
|
||
|
|
|
||
|
|
func _to_dict() -> Dictionary:
|
||
|
|
# Default style is primary
|
||
|
|
assert(Helpers.is_valid_str(custom_id), 'A button must have a custom_id.')
|
||
|
|
return {
|
||
|
|
'type': type,
|
||
|
|
'custom_id': custom_id,
|
||
|
|
'options': options,
|
||
|
|
'placeholder': placeholder,
|
||
|
|
'min_values': min_values,
|
||
|
|
'max_values': max_values,
|
||
|
|
'disabled': disabled,
|
||
|
|
}
|