barebones prototype
This commit is contained in:
parent
83f340ea01
commit
b53d33584c
60 changed files with 3743 additions and 1 deletions
237
addons/discord_gd/classes/embed.gd
Normal file
237
addons/discord_gd/classes/embed.gd
Normal file
|
|
@ -0,0 +1,237 @@
|
|||
class_name Embed
|
||||
"""
|
||||
Stores data about a Discord Embed
|
||||
and has functions to add, modify and edit
|
||||
the various properties of an Embed.
|
||||
"""
|
||||
|
||||
var title: String: set = set_title, get = get_title
|
||||
var type: String = 'rich': set = set_type, get = get_type
|
||||
var description: String: set = set_description, get = get_description
|
||||
var url: String: set = set_url, get = get_url
|
||||
var timestamp: String: set = set_timestamp, get = get_timestamp
|
||||
var color: set = set_color, get = get_color
|
||||
|
||||
var footer = null
|
||||
var image = null
|
||||
var thumbnail = null
|
||||
var video = null
|
||||
var provider = null
|
||||
var author = null
|
||||
var fields: Array
|
||||
|
||||
|
||||
func get_title():
|
||||
return title if Helpers.is_valid_str(title) else null
|
||||
|
||||
|
||||
func get_type():
|
||||
return type if Helpers.is_valid_str(type) else null
|
||||
|
||||
|
||||
func get_description():
|
||||
return description if Helpers.is_valid_str(description) else null
|
||||
|
||||
|
||||
func get_url():
|
||||
return url if Helpers.is_valid_str(url) else null
|
||||
|
||||
|
||||
func get_timestamp():
|
||||
return timestamp if Helpers.is_valid_str(timestamp) else null
|
||||
|
||||
|
||||
func get_color():
|
||||
return color
|
||||
|
||||
|
||||
func set_title(_title):
|
||||
assert(Helpers.is_valid_str(_title), 'Invalid Type: title of Embed must be a String')
|
||||
assert(_title.length() <= 256, 'title of Embed must be <= 256 characters')
|
||||
title = _title
|
||||
return self
|
||||
|
||||
|
||||
func set_type(_type):
|
||||
assert(Helpers.is_valid_str(_type), 'Invalid Type: type of Embed must be a String')
|
||||
type = _type
|
||||
return self
|
||||
|
||||
|
||||
func set_description(_description):
|
||||
assert(
|
||||
Helpers.is_valid_str(_description), 'Invalid Type: description of Embed must be a String'
|
||||
)
|
||||
assert(_description.length() <= 4096, 'Embed description must be <= 4096 characters')
|
||||
description = _description
|
||||
return self
|
||||
|
||||
|
||||
func set_url(_url):
|
||||
assert(Helpers.is_valid_str(_url), 'Invalid Type: url of Embed must be a String')
|
||||
url = _url
|
||||
return self
|
||||
|
||||
|
||||
func set_timestamp(_timestamp = ''):
|
||||
timestamp = Helpers.make_iso_string()
|
||||
return self
|
||||
|
||||
|
||||
func set_color(_color):
|
||||
# RBG color
|
||||
if typeof(_color) == TYPE_ARRAY:
|
||||
color = (int(_color[0]) * 256 * 256) + (int(_color[1]) * 256) + int(_color[2])
|
||||
|
||||
# Hex color
|
||||
elif typeof(_color) == TYPE_STRING and _color.begins_with('#'):
|
||||
color = _color.replace('#', '0x').hex_to_int()
|
||||
|
||||
# Decimal color
|
||||
elif _color.is_valid_integer:
|
||||
color = int(_color)
|
||||
|
||||
return self
|
||||
|
||||
|
||||
func set_footer(text: String, icon_url: String = '', proxy_icon_url: String = ''):
|
||||
assert(Helpers.is_valid_str(text), 'Invalid Type: footer text of Embed must be a valid String')
|
||||
assert(text.length() <= 2048, 'Embed footer text must be <= 2048 characters')
|
||||
|
||||
footer = {'text': text, 'icon_url': icon_url, 'proxy_icon_url': proxy_icon_url}
|
||||
return self
|
||||
|
||||
|
||||
func set_image(url: String, width: int = -1, height: int = -1, proxy_url: String = ''):
|
||||
assert(Helpers.is_valid_str(url), 'Invalid Type: image url of Embed must be a valid String')
|
||||
image = {
|
||||
'url': url,
|
||||
'width': width if width != -1 else null,
|
||||
'height': height if height != -1 else null,
|
||||
'proxy_url': proxy_url if Helpers.is_valid_str(proxy_url) else null
|
||||
}
|
||||
return self
|
||||
|
||||
|
||||
func set_thumbnail(url: String, width: int = -1, height: int = -1, proxy_url: String = ''):
|
||||
assert(Helpers.is_valid_str(url), 'Embed thumbnail url must be a valid String')
|
||||
thumbnail = {
|
||||
'url': url,
|
||||
'width': width if width != -1 else null,
|
||||
'height': height if height != -1 else null,
|
||||
'proxy_url': proxy_url if Helpers.is_valid_str(proxy_url) else null
|
||||
}
|
||||
return self
|
||||
|
||||
|
||||
func set_video(url: String, width: int = -1, height: int = -1, proxy_url: String = ''):
|
||||
assert(Helpers.is_valid_str(url), 'Invalid Type: video url of Embed must be a valid String')
|
||||
video = {
|
||||
'url': url,
|
||||
'width': width if width != -1 else null,
|
||||
'height': height if height != -1 else null,
|
||||
'proxy_url': proxy_url if Helpers.is_valid_str(proxy_url) else null
|
||||
}
|
||||
return self
|
||||
|
||||
|
||||
func set_provider(name: String, url: String = ''):
|
||||
assert(
|
||||
Helpers.is_valid_str(name), 'Invalid Type: provider name of Embed must be a valid String'
|
||||
)
|
||||
provider = {'name': name, 'url': url if Helpers.is_valid_str(url) else null}
|
||||
return self
|
||||
|
||||
|
||||
func set_author(
|
||||
name: String, url: String = '', icon_url: String = '', proxy_icon_url: String = ''
|
||||
):
|
||||
assert(Helpers.is_valid_str(name), 'Invalid Type: author name of Embed must be a valid String')
|
||||
assert(name.length() <= 256, 'Embed author name must be <= 256 characters')
|
||||
|
||||
author = {
|
||||
'name': name,
|
||||
'url': url if Helpers.is_valid_str(url) else null,
|
||||
'icon_url': icon_url if Helpers.is_valid_str(icon_url) else null,
|
||||
'proxy_icon_url': proxy_icon_url if Helpers.is_valid_str(proxy_icon_url) else null
|
||||
}
|
||||
return self
|
||||
|
||||
|
||||
func add_field(name: String, value: String, inline: bool = false, index = -1):
|
||||
assert(Helpers.is_valid_str(name), 'Invalid Type: field name of Embed must be a valid String')
|
||||
assert(Helpers.is_valid_str(value), 'Invalid Type: field value of Embed must be a valid String')
|
||||
|
||||
assert(name.length() <= 256, 'Embed field name must be <= 256 characters')
|
||||
assert(value.length() <= 1024, 'Embed field value must be <= 1024 characters')
|
||||
assert(fields.size() <= 25, 'Embed can have a max of 25 fields')
|
||||
|
||||
var new_field = {'name': name, 'value': value, 'inline': inline}
|
||||
if index == -1:
|
||||
fields.append(new_field)
|
||||
else:
|
||||
fields.insert(index, new_field)
|
||||
return self
|
||||
|
||||
|
||||
func slice_fields(index: int, delete_count: int = 1, replace_fields: Array = []):
|
||||
var n = fields.size()
|
||||
assert(Helpers.is_num(index), 'Missing index must be provided to Embed.slice_fields')
|
||||
assert(index > -1 and index < n, 'index out of bounds in Embed.slice_fields')
|
||||
|
||||
var max_deletable = n - index
|
||||
assert(delete_count <= max_deletable, 'delete_count out of bounds in Embed.slice_fields')
|
||||
|
||||
while delete_count != 0:
|
||||
fields.remove_at(index)
|
||||
delete_count -= 1
|
||||
|
||||
if replace_fields.size() != 0:
|
||||
# add fields
|
||||
for field in replace_fields:
|
||||
var inline = false
|
||||
if field.size() == 3:
|
||||
inline = field[2]
|
||||
add_field(field[0], field[1], inline, index)
|
||||
index += 1
|
||||
|
||||
return self
|
||||
|
||||
|
||||
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:
|
||||
var total = title + description
|
||||
|
||||
if footer and footer.text:
|
||||
total += footer.text
|
||||
|
||||
if author and author.name:
|
||||
total += author.name
|
||||
|
||||
for field in fields:
|
||||
total += field.name
|
||||
total += field.value
|
||||
|
||||
total = str(total).length()
|
||||
assert(total <= 6000, 'Embed content must be <= 6000 characters in total')
|
||||
|
||||
return {
|
||||
'title': title,
|
||||
'type': type,
|
||||
'description': description,
|
||||
'url': url,
|
||||
'timestamp': timestamp,
|
||||
'color': color,
|
||||
'footer': footer,
|
||||
'image': image,
|
||||
'thumbnail': thumbnail,
|
||||
'video': video,
|
||||
'provider': provider,
|
||||
'author': author,
|
||||
'fields': fields
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue