+ eventList = await this.Api.DirectMessagesEventsList(count)
+ .ConfigureAwait(false);
+ }
+
+ this.nextCursorDirectMessage = eventList.NextCursor;
+
+ await this.CreateDirectMessagesEventFromJson(eventList, read)
+ .ConfigureAwait(false);
+ }
+
+ private async Task CreateDirectMessagesEventFromJson(TwitterMessageEventSingle eventSingle, bool read)
+ {
+ var eventList = new TwitterMessageEventList
+ {
+ Apps = new Dictionary<string, TwitterMessageEventList.App>(),
+ Events = new[] { eventSingle.Event },
+ };
+
+ await this.CreateDirectMessagesEventFromJson(eventList, read)
+ .ConfigureAwait(false);
+ }
+
+ private async Task CreateDirectMessagesEventFromJson(TwitterMessageEventList eventList, bool read)
+ {
+ var events = eventList.Events
+ .Where(x => x.Type == "message_create")
+ .ToArray();
+
+ if (events.Length == 0)
+ return;
+
+ var userIds = Enumerable.Concat(
+ events.Select(x => x.MessageCreate.SenderId),
+ events.Select(x => x.MessageCreate.Target.RecipientId)
+ ).Distinct().ToArray();
+
+ var users = (await this.Api.UsersLookup(userIds).ConfigureAwait(false))
+ .ToDictionary(x => x.IdStr);
+
+ var apps = eventList.Apps ?? new Dictionary<string, TwitterMessageEventList.App>();
+
+ this.CreateDirectMessagesEventFromJson(events, users, apps, read);
+ }
+
+ private void CreateDirectMessagesEventFromJson(IEnumerable<TwitterMessageEvent> events, IReadOnlyDictionary<string, TwitterUser> users,
+ IReadOnlyDictionary<string, TwitterMessageEventList.App> apps, bool read)
+ {
+ foreach (var eventItem in events)
+ {
+ var post = new PostClass();
+ post.StatusId = long.Parse(eventItem.Id);
+
+ var timestamp = long.Parse(eventItem.CreatedTimestamp);
+ post.CreatedAt = DateTimeUtc.UnixEpoch + TimeSpan.FromTicks(timestamp * TimeSpan.TicksPerMillisecond);
+ //本文
+ var textFromApi = eventItem.MessageCreate.MessageData.Text;
+
+ var entities = eventItem.MessageCreate.MessageData.Entities;
+ var mediaEntity = eventItem.MessageCreate.MessageData.Attachment?.Media;
+
+ if (mediaEntity != null)
+ entities.Media = new[] { mediaEntity };
+
+ //HTMLに整形
+ post.Text = CreateHtmlAnchor(textFromApi, entities, quotedStatusLink: null);
+ post.TextFromApi = this.ReplaceTextFromApi(textFromApi, entities, quotedStatusLink: null);
+ post.TextFromApi = WebUtility.HtmlDecode(post.TextFromApi);
+ post.TextFromApi = post.TextFromApi.Replace("<3", "\u2661");
+ post.AccessibleText = CreateAccessibleText(textFromApi, entities, quotedStatus: null, quotedStatusLink: null);
+ post.AccessibleText = WebUtility.HtmlDecode(post.AccessibleText);
+ post.AccessibleText = post.AccessibleText.Replace("<3", "\u2661");
+ post.IsFav = false;
+
+ this.ExtractEntities(entities, post.ReplyToList, post.Media);
+
+ post.QuoteStatusIds = GetQuoteTweetStatusIds(entities, quotedStatusLink: null)
+ .Distinct().ToArray();
+
+ post.ExpandedUrls = entities.OfType<TwitterEntityUrl>()
+ .Select(x => new PostClass.ExpandedUrlInfo(x.Url, x.ExpandedUrl))
+ .ToArray();
+
+ //以下、ユーザー情報
+ string userId;
+ if (eventItem.MessageCreate.SenderId != this.Api.CurrentUserId.ToString(CultureInfo.InvariantCulture))