internal static EventMessage CreateFrom(dynamic dynamicObject) { var message = dynamicObject?.message; if (message == null) { return(null); } if (!Enum.TryParse((string)message.type, true, out EventMessageType messageType)) { return(null); } switch (messageType) { case EventMessageType.Text: var emojis_list = new List <Emoji>(); var mentionees_list = new List <Mentionees>(); try { for (int i = 0; i < message.emojis.Count; i++) { var emoji = new Emoji( (int)message.emojis[i]?.index, (int)message.emojis[i]?.length, (string)message.emojis[i]?.productId, (string)message.emojis[i]?.emojiId); emojis_list.Add(emoji); } } catch (Exception) { } try { for (int i = 0; i < message.mention.mentionees.Count; i++) { var mentionees = new Mentionees( (int)message.mention.mentionees[i]?.index, (int)message.mention.mentionees[i]?.length, (string)message.mention.mentionees[i]?.userId); mentionees_list.Add(mentionees); } } catch (Exception) { } var emojis = emojis_list.ToArray(); var mention = new Mention(mentionees_list.ToArray()); return(new TextEventMessage( (string)message.id, (string)message.text, emojis, mention)); case EventMessageType.Image: ContentProvider imageContentProvider = null; if ((string)message.contentProvider.type == "line") { imageContentProvider = new ContentProvider(ContentProviderType.External); } else if ((string)message.contentProvider.type == "external") { imageContentProvider = new ContentProvider(ContentProviderType.External, (string)message.contentProvider?.originalContentUrl, (string)message.contentProvider?.previewContentUrl); } return(new ImageEventMessage( messageType, (string)message.id, imageContentProvider, message.imageSet)); case EventMessageType.Audio: case EventMessageType.Video: ContentProvider contentProvider = null; if ((string)message.contentProvider.type == "line") { contentProvider = new ContentProvider(ContentProviderType.External); } else if ((string)message.contentProvider.type == "external") { contentProvider = new ContentProvider(ContentProviderType.External, (string)message.contentProvider?.originalContentUrl, (string)message.contentProvider?.previewContentUrl); } return(new MediaEventMessage( messageType, (string)message.id, contentProvider, (int?)message.duration)); case EventMessageType.Location: return(new LocationEventMessage( (string)message.id, (string)message.title, (string)message.address, (decimal)message.latitude, (decimal)message.longitude)); case EventMessageType.Sticker: var keywords_list = new List <string>(); try { for (int i = 0; i < message.keywords.Count; i++) { keywords_list.Add((string)message.keywords[i]); } } catch (Exception) { } return(new StickerEventMessage( (string)message.id, (string)message.packageId, (string)message.stickerId, keywords_list.ToArray(), (StickerResourceType)message.stickerResourceType)); case EventMessageType.File: return(new FileEventMessage( (string)message.id, (string)message.fileName, (long)message.fileSize)); default: return(null); } }