barebones prototype
This commit is contained in:
parent
83f340ea01
commit
b53d33584c
60 changed files with 3743 additions and 1 deletions
190
addons/discord_gd/classes/message.gd
Normal file
190
addons/discord_gd/classes/message.gd
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
class_name Message
|
||||
"""
|
||||
Represents a Discord Message.
|
||||
"""
|
||||
|
||||
var id: String
|
||||
var channel_id: String
|
||||
var guild_id: String
|
||||
var content: String
|
||||
var timestamp: String
|
||||
var edited_timestamp: String
|
||||
var webhook_id: String
|
||||
var type: String
|
||||
|
||||
var author: User
|
||||
var member: Dictionary
|
||||
var activity: Dictionary
|
||||
var message_reference: Dictionary
|
||||
var referenced_message: Dictionary
|
||||
|
||||
var tts: bool
|
||||
var mention_everyone: bool
|
||||
var pinned: bool
|
||||
|
||||
var mentions: Array
|
||||
var mention_roles: Array
|
||||
var mention_channels: Array
|
||||
var attachments: Array
|
||||
var components: Array
|
||||
var embeds: Array
|
||||
var reactions: Array
|
||||
var flags: MessageFlags
|
||||
|
||||
var nonce
|
||||
|
||||
var MESSAGE_TYPES = {
|
||||
'0': 'DEFAULT',
|
||||
'1': 'RECIPIENT_ADD',
|
||||
'2': 'RECIPIENT_REMOVE',
|
||||
'3': 'CALL',
|
||||
'4': 'CHANNEL_NAME_CHANGE',
|
||||
'5': 'CHANNEL_ICON_CHANGE',
|
||||
'6': 'CHANNEL_PINNED_MESSAGE',
|
||||
'7': 'GUILD_MEMBER_JOIN',
|
||||
'8': 'USER_PREMIUM_GUILD_SUBSCRIPTION',
|
||||
'9': 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_1',
|
||||
'10': 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_2',
|
||||
'11': 'USER_PREMIUM_GUILD_SUBSCRIPTION_TIER_3',
|
||||
'12': 'CHANNEL_FOLLOW_ADD',
|
||||
'14': 'GUILD_DISCOVERY_DISQUALIFIED',
|
||||
'15': 'GUILD_DISCOVERY_REQUALIFIED',
|
||||
'16': 'GUILD_DISCOVERY_GRACE_PERIOD_INITIAL_WARNING',
|
||||
'17': 'GUILD_DISCOVERY_GRACE_PERIOD_FINAL_WARNING',
|
||||
'18': 'THREAD_CREATED',
|
||||
'19': 'REPLY',
|
||||
'20': 'APPLICATION_COMMAND',
|
||||
'21': 'THREAD_STARTER_MESSAGE',
|
||||
'22': 'GUILD_INVITE_REMINDER'
|
||||
}
|
||||
|
||||
func _init(message: Dictionary):
|
||||
# Compulsory
|
||||
assert(typeof(message) == TYPE_DICTIONARY, 'Invalid type: message must be a Dictionary')
|
||||
assert(message.id, 'Message must have an id')
|
||||
id = message.id
|
||||
assert(message.has('type'), 'Message must have a type')
|
||||
|
||||
assert(message.has('channel_id') and message.channel_id and Helpers.is_valid_str(message.channel_id), 'Message must have a valid channel_id')
|
||||
channel_id = message.channel_id
|
||||
|
||||
if MESSAGE_TYPES.get(str(int(message.type))):
|
||||
type = MESSAGE_TYPES.get(str(int(message.type)))
|
||||
else:
|
||||
assert(false, 'Message must have a valid type')
|
||||
|
||||
assert(message.has('author'), 'Message must have an author')
|
||||
|
||||
# Check if the message is sent by webhook
|
||||
if message.has('webhook_id') and Helpers.is_str(message.webhook_id) and message.webhook_id.length() > 0:
|
||||
# webhook sent a message
|
||||
pass
|
||||
else:
|
||||
# sent by user
|
||||
assert(message.author is User, 'author attribute of Mesage must be of type User')
|
||||
author = message.author
|
||||
|
||||
if message.has('flags'):
|
||||
flags = MessageFlags.new(message.flags)
|
||||
|
||||
# if message.channel.type != 'DM':
|
||||
# assert(message.has('guild_id') and message.guild_id and Helpers.is_valid_str(message.guild_id), 'Message must have a valid guild_id')
|
||||
# guild_id = message.guild_id
|
||||
|
||||
if message.has('guild_id') and message.guild_id:
|
||||
guild_id = message.guild_id
|
||||
|
||||
#if not message.has('webhook_id'):
|
||||
#assert(message.content.length() > 0 or message.embeds.size() > 0 or message.components.size() > 0 or message.attachments.size() > 0, 'Message must have a content or at least one of (embeds, components or attachments)')
|
||||
content = message.content
|
||||
|
||||
assert(message.timestamp, 'Message must have a timestamp')
|
||||
timestamp = message.timestamp
|
||||
|
||||
|
||||
|
||||
# Optional
|
||||
if message.has('edited_timestamp') and message.edited_timestamp != null:
|
||||
edited_timestamp = message.edited_timestamp
|
||||
|
||||
if message.has('tts'):
|
||||
tts = true if message.tts else false
|
||||
|
||||
if message.has('mention_everyone'):
|
||||
mention_everyone = true if message.mention_everyone else false
|
||||
|
||||
if message.has('mentions') and typeof(message.mentions) == TYPE_ARRAY and message.mentions.size() > 0:
|
||||
mentions = message.mentions
|
||||
|
||||
if message.has('member') and message.member:
|
||||
member = message.member
|
||||
if message.has('mention_roles') and message.mention_roles:
|
||||
mention_roles = message.mention_roles
|
||||
if message.has('mention_channels') and message.mention_channels:
|
||||
mention_channels = message.mention_channels
|
||||
if message.has('attachments') and message.attachments:
|
||||
attachments = message.attachments
|
||||
if message.has('components') and message.components:
|
||||
components = message.components
|
||||
if message.has('embeds') and message.embeds:
|
||||
embeds = message.embeds
|
||||
if message.has('reactions') and message.reactions:
|
||||
reactions = message.reactions
|
||||
if message.has('pinned') and typeof(message.pinned) == TYPE_BOOL:
|
||||
pinned = message.pinned
|
||||
if message.has('message_reference') and message.message_reference:
|
||||
message_reference = message.message_reference
|
||||
if message.has('referenced_message') and message.referenced_message:
|
||||
referenced_message = message.referenced_message
|
||||
func _to_string(pretty: bool = false):
|
||||
var data = {
|
||||
'id': id,
|
||||
'channel_id': channel_id,
|
||||
'guild_id': guild_id,
|
||||
'author': author,
|
||||
'member': member,
|
||||
'content': content,
|
||||
'timestamp': timestamp,
|
||||
'edited_timestamp': edited_timestamp,
|
||||
'tts': tts,
|
||||
'mention_everyone': mention_everyone,
|
||||
'mentions': mentions,
|
||||
'mention_roles': mention_roles,
|
||||
'mention_channels': mention_channels,
|
||||
'attachments': attachments,
|
||||
'components': components,
|
||||
'embeds': embeds,
|
||||
'reactions': reactions,
|
||||
'pinned': pinned,
|
||||
'type': type,
|
||||
'message_reference': message_reference,
|
||||
'referenced_message': referenced_message,
|
||||
'flags': flags.bitfield
|
||||
}
|
||||
|
||||
return JSON.stringify(data, '\t') if pretty else JSON.stringify(data)
|
||||
|
||||
func print():
|
||||
print(_to_string(true))
|
||||
|
||||
func has(attribute):
|
||||
return true if self[attribute] else false
|
||||
|
||||
func slice_attachments(index: int, delete_count: int = 1, replace_attachments: Array = []):
|
||||
var n = attachments.size()
|
||||
assert(Helpers.is_num(index), 'index must be provided to Message.slice_attachments')
|
||||
assert(index > -1 and index < n, 'index out of bounds in Message.slice_attachments')
|
||||
|
||||
var max_deletable = n - index
|
||||
assert(delete_count <= max_deletable, 'delete_count out of bounds in Message.attachments')
|
||||
|
||||
while delete_count != 0:
|
||||
attachments.remove_at(index)
|
||||
delete_count -= 1
|
||||
|
||||
if replace_attachments.size() > 0:
|
||||
for attachment in replace_attachments:
|
||||
assert(attachment.has('id') and Helpers.is_valid_str(attachment.id), 'Missing id for attachment in replace_attachments in slice_attachments')
|
||||
attachments.append_array(replace_attachments)
|
||||
|
||||
return self
|
||||
Loading…
Add table
Add a link
Reference in a new issue