public YouTubeLiveComment(Test2.CommentData commentData) : base(commentData.Raw) { UserId = commentData.UserId; Id = commentData.Id; CommentItems = commentData.MessageItems; NameItems = commentData.NameItems; UserIcon = commentData.Thumbnail; PostedAt = SitePluginCommon.Utils.UnixtimeToDateTime(commentData.TimestampUsec / (1000 * 1000)); }
public YouTubeLiveSuperchat(Test2.CommentData commentData) : base(commentData.Raw) { UserId = commentData.UserId; Id = commentData.Id; var list = new List <IMessagePart>(); var s = commentData.PurchaseAmount; if (commentData.MessageItems.Count > 0) { s += Environment.NewLine; } list.Add(MessagePartFactory.CreateMessageText(s)); list.AddRange(commentData.MessageItems); CommentItems = list; NameItems = commentData.NameItems; PurchaseAmount = commentData.PurchaseAmount; UserIcon = commentData.Thumbnail; PostedAt = SitePluginCommon.Utils.UnixtimeToDateTime(commentData.TimestampUsec / (1000 * 1000)); }
private YouTubeLiveMessageContext CreateMessageContext(CommentData commentData, bool isInitialComment) { IYouTubeLiveMessage message; IEnumerable <IMessagePart> commentItems; IEnumerable <IMessagePart> nameItems; if (commentData.IsPaidMessage) { var superchat = new YouTubeLiveSuperchat(commentData); message = superchat; nameItems = superchat.NameItems; commentItems = superchat.CommentItems; } else { var comment = new YouTubeLiveComment(commentData); message = comment; nameItems = comment.NameItems; commentItems = comment.CommentItems; } var metadata = CreateMetadata(message, isInitialComment); var methods = new YouTubeLiveMessageMethods(); if (_siteOptions.IsAutoSetNickname) { var user = metadata.User; var messageText = Common.MessagePartsTools.ToText(commentItems); var nick = SitePluginCommon.Utils.ExtractNickname(messageText); if (!string.IsNullOrEmpty(nick)) { user.Nickname = nick; } } metadata.User.Name = nameItems; return(new YouTubeLiveMessageContext(message, metadata, methods)); }
public static CommentData ParseLiveChatTextMessageRenderer(dynamic ren) { var commentData = new CommentData { UserId = ren.authorExternalChannelId, TimestampUsec = long.Parse((string)ren.timestampUsec), Id = ren.id }; //authorPhoto { var thumbnail = ren.authorPhoto.thumbnails[0]; var url = thumbnail.url; var width = (int)thumbnail.width; var height = (int)thumbnail.height; var authorPhoto = new MessageImage { Url = url, Width = width, Height = height }; commentData.Thumbnail = authorPhoto; } //message { var messageItems = new List <IMessagePart>(); commentData.MessageItems = messageItems; if (ren.IsDefined("message"))//PaidMessageではコメント無しも可能 { if (ren.message.IsDefined("runs")) { foreach (var r in ren.message.runs) { if (r.IsDefined("text")) { var text = r.text; messageItems.Add(MessagePartFactory.CreateMessageText(text)); } else if (r.IsDefined("emoji")) { var emoji = r.emoji; var thumbnail = emoji.image.thumbnails[0]; var emojiUrl = thumbnail.url; var emojiWidth = (int)thumbnail.width; var emojiHeight = (int)thumbnail.height; var emojiAlt = emoji.image.accessibility.accessibilityData.label; messageItems.Add(new MessageImage { Url = emojiUrl, Alt = emojiAlt, Height = emojiHeight, Width = emojiWidth }); } else { throw new ParseException(); } } } else if (ren.message.IsDefined("simpleText")) { var text = ren.message.simpleText; messageItems.Add(MessagePartFactory.CreateMessageText(text)); } else { throw new ParseException(); } } } //name { var nameItems = new List <IMessagePart>(); commentData.NameItems = nameItems; nameItems.Add(MessagePartFactory.CreateMessageText(ren.authorName.simpleText)); if (ren.IsDefined("authorBadges")) { foreach (var badge in ren.authorBadges) { if (badge.liveChatAuthorBadgeRenderer.IsDefined("customThumbnail")) { var url = badge.liveChatAuthorBadgeRenderer.customThumbnail.thumbnails[0].url; var alt = badge.liveChatAuthorBadgeRenderer.tooltip; nameItems.Add(new MessageImage { Url = url, Alt = alt, Width = 16, Height = 16 }); } else if (badge.liveChatAuthorBadgeRenderer.IsDefined("icon")) { var iconType = badge.liveChatAuthorBadgeRenderer.icon.iconType; var alt = badge.liveChatAuthorBadgeRenderer.tooltip; } else { throw new ParseException(); } } } } return(commentData); }
public YouTubeLiveCommentViewModel(ICommentOptions options, IYouTubeLiveSiteOptions siteOptions, CommentData commentData, ICommentProvider commentProvider, bool isFirstComment, IUser user) : base(options, user, commentProvider, isFirstComment) { var messageText = commentData.MessageItems.ToText(); IsPaidMessage = commentData.IsPaidMessage; if (siteOptions.IsAutoSetNickname) { var nick = ExtractNickname(messageText); if (!string.IsNullOrEmpty(nick)) { user.Nickname = nick; } } NameItemsInternal = commentData.NameItems; user.Name = commentData.NameItems; if (commentData.IsPaidMessage) { var list = new List <IMessagePart>(); var s = commentData.PurchaseAmount; if (commentData.MessageItems.Count > 0) { s += Environment.NewLine; } list.Add(MessagePartFactory.CreateMessageText(s)); list.AddRange(commentData.MessageItems); MessageItems = list; MessageType = MessageType.BroadcastInfo; } else { MessageItems = commentData.MessageItems; MessageType = MessageType.Comment; } Id = commentData.Id; UserId = commentData.UserId; Thumbnail = commentData.Thumbnail; PostTime = Tools.ParseTimestampUsec(commentData.TimestampUsec).ToLocalTime().ToString("HH:mm:ss"); _siteOptions = siteOptions; Init(); }