parse method

  1. @override
Message parse(
  1. Map<String, Object?> raw,
  2. {Snowflake? guildId}
)
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)),
  );
}