Exemplo n.º 1
0
 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));
 }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 4
0
        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();
        }