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, }