102 lines
2.1 KiB
GDScript3
102 lines
2.1 KiB
GDScript3
|
|
class_name MessageButton
|
||
|
|
"""
|
||
|
|
Represents a Discord message button.
|
||
|
|
"""
|
||
|
|
|
||
|
|
var _STYLES = {0: 'DEFAULT', 1: 'PRIMARY', 2: 'SECONDARY', 3: 'SUCCESS', 4: 'DANGER', 5: 'LINK'}
|
||
|
|
|
||
|
|
enum STYLES { DEFAULT, PRIMARY, SECONDARY, SUCCESS, DANGER, LINK }
|
||
|
|
|
||
|
|
var label: String: set = set_label, get = get_label
|
||
|
|
var custom_id: String: set = set_custom_id, get = get_custom_id
|
||
|
|
var url: String: set = set_url, get = get_url
|
||
|
|
var disabled: bool = false: set = set_disabled, get = get_disabled
|
||
|
|
var emoji: Dictionary
|
||
|
|
|
||
|
|
var _style: set = set_style
|
||
|
|
var type: int = 2
|
||
|
|
|
||
|
|
|
||
|
|
func set_style(style_number: int):
|
||
|
|
_style = style_number
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_style_string():
|
||
|
|
return _STYLES[_style]
|
||
|
|
|
||
|
|
|
||
|
|
func set_label(new_label: String):
|
||
|
|
assert(new_label.length() <= 80, 'label of MessageButton must be max 80 characters.')
|
||
|
|
label = new_label
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_label() -> String:
|
||
|
|
return label
|
||
|
|
|
||
|
|
|
||
|
|
func set_custom_id(new_custom_id):
|
||
|
|
assert(new_custom_id.length() <= 80, 'custom_id of MessageButton must be max 100 characters.')
|
||
|
|
custom_id = new_custom_id
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_custom_id() -> String:
|
||
|
|
return custom_id
|
||
|
|
|
||
|
|
|
||
|
|
func set_url(new_url):
|
||
|
|
url = new_url
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_url() -> String:
|
||
|
|
return url
|
||
|
|
|
||
|
|
|
||
|
|
func set_disabled(new_value: bool):
|
||
|
|
disabled = new_value
|
||
|
|
return self
|
||
|
|
|
||
|
|
|
||
|
|
func get_disabled() -> bool:
|
||
|
|
return disabled
|
||
|
|
|
||
|
|
|
||
|
|
func set_emoji(new_emoji: Dictionary):
|
||
|
|
emoji = new_emoji
|
||
|
|
return self
|
||
|
|
|
||
|
|
func get_emoji() -> Dictionary:
|
||
|
|
return emoji
|
||
|
|
|
||
|
|
|
||
|
|
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
|
||
|
|
if _style == 0:
|
||
|
|
_style = 1
|
||
|
|
|
||
|
|
if _style == STYLES.LINK:
|
||
|
|
# Must have a url
|
||
|
|
assert(Helpers.is_valid_str(url), 'A LINK MessageButton must have a url.')
|
||
|
|
return {'type': type, 'style': _style, 'label': label, 'url': url, 'disabled': disabled}
|
||
|
|
else:
|
||
|
|
assert(Helpers.is_valid_str(custom_id), 'A button must have a custom_id.')
|
||
|
|
return {
|
||
|
|
'type': type,
|
||
|
|
'style': _style,
|
||
|
|
'label': label,
|
||
|
|
'custom_id': custom_id,
|
||
|
|
'disabled': disabled,
|
||
|
|
'emoji': emoji if emoji else null
|
||
|
|
}
|