parse method
override
Parse the raw
data received from the API into an instance of the type of this manager.
Implementation
@override
Message parse(Map<String, Object?> raw, {Snowflake? guildId}) {
if (client.channels.cache[channelId] case GuildChannel(guildId: final guildIdFromChannel)) {
guildId ??= guildIdFromChannel;
}
final webhookId = maybeParse(raw['webhook_id'], Snowflake.parse);
return Message(
id: Snowflake.parse(raw['id']!),
manager: this,
author: (webhookId == null
? client.users.parse(raw['author'] as Map<String, Object?>)
: client.webhooks.parseWebhookAuthor(raw['author'] as Map<String, Object?>)) as MessageAuthor,
content: raw['content'] as String,
timestamp: DateTime.parse(raw['timestamp'] as String),
editedTimestamp: maybeParse(raw['edited_timestamp'], DateTime.parse),
isTts: raw['tts'] as bool,
mentionsEveryone: raw['mention_everyone'] as bool,
mentions: parseMany(raw['mentions'] as List, client.users.parse),
roleMentionIds: parseMany(raw['mention_roles'] as List, Snowflake.parse),
channelMentions: maybeParseMany(raw['mention_channels'], parseChannelMention) ?? [],
attachments: parseMany(raw['attachments'] as List, parseAttachment),
embeds: parseMany(raw['embeds'] as List, parseEmbed),
reactions: maybeParseMany(raw['reactions'], parseReaction) ?? [],
nonce: raw['nonce'] /* as int | String */,
isPinned: raw['pinned'] as bool,
webhookId: webhookId,
type: MessageType.parse(raw['type'] as int),
activity: maybeParse(raw['activity'], parseMessageActivity),
application: maybeParse(
raw['application'],
(Map<String, Object?> raw) => PartialApplication(id: Snowflake.parse(raw['id']!), manager: client.applications),
),
applicationId: maybeParse(raw['application_id'], Snowflake.parse),
reference: maybeParse(raw['message_reference'], parseMessageReference),
flags: MessageFlags(raw['flags'] as int? ?? 0),
referencedMessage: maybeParse(raw['referenced_message'], parse),
interaction: maybeParse(
raw['interaction'],
(Map<String, Object?> raw) => parseMessageInteraction(raw, guildId: guildId),
),
interactionMetadata: maybeParse(
raw['interaction_metadata'],
parseMessageInteractionMetadata,
),
thread: maybeParse(raw['thread'], client.channels.parse) as Thread?,
components: maybeParseMany(raw['components'], parseMessageComponent),
position: raw['position'] as int?,
roleSubscriptionData: maybeParse(raw['role_subscription_data'], parseRoleSubscriptionData),
stickers: parseMany(raw['sticker_items'] as List? ?? [], client.stickers.parseStickerItem),
resolved: maybeParse(raw['resolved'], (Map<String, Object?> raw) => client.interactions.parseResolvedData(raw, guildId: guildId, channelId: channelId)),
);
}