private static FB_Event parse_client_delta(Session session, JToken data)
 {
     if (data?.get("deltaMessageReaction") != null)
     {
         return(FB_ReactionEvent._parse(session, data["deltaMessageReaction"]));
     }
     else if (data?.get("deltaChangeViewerStatus") != null)
     {
         // TODO: Parse all `reason`
         if (data?.get("deltaChangeViewerStatus")?.get("reason")?.Value <int>() == 2)
         {
             return(FB_UserStatusEvent._parse(session, data["deltaChangeViewerStatus"]));
         }
     }
     else if (data?.get("liveLocationData") != null)
     {
         return(FB_LiveLocationEvent._parse(session, data["liveLocationData"]));
     }
     else if (data?.get("deltaRecallMessageData") != null)
     {
         return(FB_UnsendEvent._parse(session, data["deltaRecallMessageData"]));
     }
     else if (data?.get("deltaMessageReply") != null)
     {
         return(FB_MessageReplyEvent._parse(session, data["deltaMessageReply"]));
     }
     return(new FB_UnknownEvent()
     {
         source = "client payload", data = data
     });
 }
        internal static FB_MessageReplyEvent _parse(Session session, JToken data)
        {
            var thread   = FB_MessageReplyEvent._get_thread(session, data);
            var metadata = data?.get("message")?.get("messageMetadata");

            return(new FB_MessageReplyEvent()
            {
                author = new FB_User(session: session, uid: metadata?.get("actorFbId")?.Value <string>()),
                thread = thread,
                message = FB_Message._from_reply(data?.get("message"), thread),
                replied_to = FB_Message._from_reply(data?.get("repliedToMessage"), thread),
            });
        }