예제 #1
0
        public MirrativCommentViewModel(ICommentOptions options, IMirrativSiteOptions siteOptions, Message message, bool isFirstComment, ICommentProvider commentProvider, IUser user)
            : base(options, user, commentProvider, isFirstComment)
        {
            MessageType  = message.Type;
            _siteOptions = siteOptions;
            Id           = message.Id;
            UserId       = message.UserId;
            PostTime     = Tools.UnixTime2DateTime(message.CreatedAt).ToString("HH:mm:ss");

            var name = new List <IMessagePart> {
                MessagePartFactory.CreateMessageText(message.Username)
            };

            user.Name = name;
            var comment = message.Comment;

            if (siteOptions.NeedAutoSubNickname && message.Type == MessageType.Comment)
            {
                var nick = ExtractNickname(comment);
                if (!string.IsNullOrEmpty(nick))
                {
                    user.Nickname = nick;
                }
            }
            NameItemsInternal = name;
            MessageItems      = new List <IMessagePart> {
                MessagePartFactory.CreateMessageText(comment)
            };

            Init();
        }
예제 #2
0
        public static IUser FromJson(string json)
        {
            dynamic d         = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
            var     userId    = d.userid.Value;
            var     nick      = d.nickname.Value;
            var     backColor = d.backcolor.Value;
            var     foreColor = d.forecolor.Value;
            var     isNg      = d.is_ng.Value.ToLower() == "true";
            var     name      = d.name;
            var     nameItems = new List <IMessagePart>();

            foreach (var nameItem in d.name)
            {
                if (nameItem.type == "text")
                {
                    var val = nameItem.value.Value;
                    nameItems.Add(MessagePartFactory.CreateMessageText(val));
                }
            }
            var user = new UserTest(userId)
            {
                Name = nameItems, Nickname = nick, BackColorArgb = backColor, ForeColorArgb = foreColor, IsNgUser = isNg
            };

            return(user);
        }
 public NicoCommentViewModel(NicoSitePlugin.INicoInfo info, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
     : this(info as NicoSitePlugin.INicoMessage, metadata, methods, connectionStatus, options)
 {
     //_nameItems = MessagePartFactory.CreateMessageItems(info.UserName);
     MessageItems = MessagePartFactory.CreateMessageItems(info.Text);
     PostTime     = info.PostedAt.ToString("HH:mm:ss");
 }
예제 #4
0
 //ParseMessage.IMessage _message;
 //     public LineLiveCommentViewModel(ICommentOptions options, ILineLiveSiteOptions siteOptions, ParseMessage.ILove data, ParseMessage.IUser sender, IUser user, ICommentProvider cp) :
 //         base(options, user, cp, false)
 //     {
 //         MessageType = MessageType.BroadcastInfo;
 //         _siteOptions = siteOptions;
 //         _message = data;
 //         CommentProvider = cp;
 //         var msg = sender.DisplayName + "さんがハートを送りました!";
 //         MessageItems = new List<IMessagePart> { MessagePartFactory.CreateMessageText(msg) };
 //         Init();
 //     }
 //     public LineLiveCommentViewModel(ICommentOptions options, ILineLiveSiteOptions siteOptions, ParseMessage.IGiftMessage data, ParseMessage.IUser sender, IUser user, ICommentProvider cp) :
 //base(options, user, cp, false)
 //     {
 //         MessageType = MessageType.BroadcastInfo;
 //         _siteOptions = siteOptions;
 //         _message = data;
 //         CommentProvider = cp;
 //         //2018/07/13
 //         if (data.ItemId == "limited-love-gift" || string.IsNullOrEmpty(data.Url))
 //         {
 //             //{"type":"giftMessage","data":{"message":"","type":"LOVE","itemId":"limited-love-gift","quantity":1,"displayName":"limited.love.gift.item","sender":{"id":2903515,"hashedId":"715i4MKqyv","displayName":"上杉The Times","iconUrl":"https://scdn.line-apps.com/obs/0hmNs42D-0MmFOTR9H8JtNNnYQNBY3YzEpNmkpRHdEbQI3LnYxIX97UGIdaVdjKXVjd3ktVGNEP1VjenU1ew/f64x64","hashedIconId":"0hmNs42D-0MmFOTR9H8JtNNnYQNBY3YzEpNmkpRHdEbQI3LnYxIX97UGIdaVdjKXVjd3ktVGNEP1VjenU1ew","isGuest":false,"isBlocked":false},"isNGGift":false,"sentAt":1531445716,"key":"2426265.29035150000000000000","blockedByCms":false}}
 //             var msg = sender.DisplayName + "さんがハートで応援ポイントを送りました!";
 //             MessageItems = new List<IMessagePart> { MessagePartFactory.CreateMessageText(msg) };
 //         }
 //         else
 //         {
 //             var msg = sender.DisplayName + "さんが" + data.Quantity + "コインプレゼントしました!";
 //             MessageItems = new List<IMessagePart> { MessagePartFactory.CreateMessageText(msg), new MessageImage { Url = data.Url } };
 //         }
 //         Init();
 //     }
 //     public LineLiveCommentViewModel(ICommentOptions options, ILineLiveSiteOptions siteOptions, ParseMessage.IFollowStartData data, ParseMessage.IUser sender, IUser user, ICommentProvider cp) :
 //         base(options, user, cp, false)
 //     {
 //         MessageType = MessageType.BroadcastInfo;
 //         _siteOptions = siteOptions;
 //         _message = data;
 //         CommentProvider = cp;
 //         var msg = sender.DisplayName + "さんがフォローしました!";
 //         MessageItems = new List<IMessagePart> { MessagePartFactory.CreateMessageText(msg) };
 //         Init();
 //     }
 public LineLiveCommentViewModel(ICommentOptions options, ILineLiveSiteOptions siteOptions, ParseMessage.IMessageData data, ParseMessage.IUser sender, IUser user, ICommentProvider cp) :
     base(options, user, cp, false)
 {
     MessageType  = MessageType.Comment;
     _siteOptions = siteOptions;
     //_message = data;
     UserId = sender.Id.ToString();
     Id     = "";
     if (siteOptions.IsAutoSetNickname)
     {
         var nick = ExtractNickname(data.Message);
         if (!string.IsNullOrEmpty(nick))
         {
             user.Nickname = nick;
         }
     }
     SetNameItems();
     MessageItems = new List <IMessagePart> {
         MessagePartFactory.CreateMessageText(data.Message)
     };
     Thumbnail = new MessageImage {
         Url = sender.IconUrl
     };
     PostTime = Tools.FromUnixTime(data.SentAt).ToString("HH:mm:ss");
     Init();
     NameItemsInternal = new List <IMessagePart> {
         MessagePartFactory.CreateMessageText(sender.DisplayName)
     };
     User.Name = NameItemsInternal;
 }
예제 #5
0
        public static async Task <INicoComment> CreateNicoComment(IChat chat, IUser user, INicoSiteOptions _siteOptions, string roomName, Func <string, Task <IUserInfo> > f, ILogger logger)
        {
            var userId = chat.UserId;
            var is184  = Tools.Is184UserId(userId);

            if (_siteOptions.IsAutoSetNickname)
            {
                SitePluginCommon.Utils.SetNickname(chat.Text, user);
            }

            string thumbnailUrl = null;
            string name         = null;

            try
            {
                if (IsNamaId(userId))
                {
                    var userInfo = await f(userId);//API.GetUserInfo(_dataSource, userId);

                    thumbnailUrl = userInfo.ThumbnailUrl;
                    if (_siteOptions.IsAutoGetUsername)
                    {
                        name      = userInfo.Name;
                        user.Name = new List <IMessagePart> {
                            MessagePartFactory.CreateMessageText(userInfo.Name)
                        };
                    }
                }
            }
            catch (Exception ex)
            {
                logger.LogException(ex);
            }

            string id;

            if (chat.No.HasValue)
            {
                var shortName = Tools.GetShortRoomName(roomName);
                id = $"{shortName}:{chat.No}";
            }
            else
            {
                id = roomName;
            }
            var comment = chat.Text;

            return(new NicoComment(chat.Raw)
            {
                Text = comment,
                Id = id,
                UserName = name,
                PostedAt = chat.Date,
                ThumbnailUrl = thumbnailUrl,
                UserId = userId,
                ChatNo = chat.No,
                RoomName = roomName,
                Is184 = is184,
            });
        }
예제 #6
0
        private void OnMessageReceived(Result result)
        {
            var commentData    = ParsePrivMsg(result);
            var userId         = commentData.UserId;
            var isFirstComment = _commentCounter.UpdateCount(userId);
            var user           = GetUser(userId);

            if (_siteOptions.NeedAutoSubNickname)
            {
                SitePluginCommon.Utils.SetNickname(commentData.Message, user);
            }
            var message = new TwitchComment(result.Raw)
            {
                CommentItems = Tools.GetMessageItems(result),
                Id           = commentData.Id,
                NameItems    = new List <IMessagePart> {
                    MessagePartFactory.CreateMessageText(commentData.Username)
                },
                PostTime = commentData.SentAt.ToString("HH:mm:ss"),
                UserId   = commentData.UserId,
            };
            var metadata = new MessageMetadata(message, _options, _siteOptions, user, this, isFirstComment)
            {
                IsInitialComment = false,
                SiteContextGuid  = SiteContextGuid,
            };
            var methods        = new TwitchMessageMethods();
            var messageContext = new TwitchMessageContext(message, metadata, methods);

            MessageReceived?.Invoke(this, messageContext);
        }
예제 #7
0
        private static List <IMessagePart> GetNameParts(dynamic ren)
        {
            var nameItems = new List <IMessagePart>();

            if (ren.ContainsKey("authorName"))
            {
                nameItems.Add(MessagePartFactory.CreateMessageText((string)ren.authorName.simpleText));
            }
            if (ren.ContainsKey("authorBadges"))
            {
                foreach (var badge in ren.authorBadges)
                {
                    if (badge.liveChatAuthorBadgeRenderer.ContainsKey("customThumbnail"))
                    {
                        var url = (string)badge.liveChatAuthorBadgeRenderer.customThumbnail.thumbnails[0].url;
                        var alt = (string)badge.liveChatAuthorBadgeRenderer.tooltip;
                        nameItems.Add(new MessageImage {
                            Url = url, Alt = alt, Width = 16, Height = 16
                        });
                    }
                    else if (badge.liveChatAuthorBadgeRenderer.ContainsKey("icon"))
                    {
                        var iconType = (string)badge.liveChatAuthorBadgeRenderer.icon.iconType;
                        var alt      = (string)badge.liveChatAuthorBadgeRenderer.tooltip;
                    }
                    else
                    {
                        throw new ParseException();
                    }
                }
            }
            return(nameItems);
        }
예제 #8
0
        private NicoComment Convert(Chat chat, string roomName)
        {
            string id;

            if (chat.No.HasValue)
            {
                var shortName = Tools.GetShortRoomName(roomName);
                id = $"{shortName}:{chat.No}";
            }
            else
            {
                id = roomName;
            }
            var message = new NicoComment(chat.Raw, _siteOptions)
            {
                ChatNo       = chat.No,
                CommentItems = new List <IMessagePart> {
                    MessagePartFactory.CreateMessageText(chat.Text)
                },
                Id        = id,
                Is184     = Tools.Is184UserId(chat.UserId),
                NameItems = null,
                PostTime  = chat.Date.ToString("HH:mm:ss"),
                RoomName  = roomName,
                UserIcon  = null,
                UserId    = chat.UserId,
            };

            return(message);
        }
        public McvYouTubeLiveCommentViewModel(YouTubeLiveSitePlugin.IYouTubeLiveSuperchat item, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            var comment = item;

            _message = comment;

            _nameItems = comment.NameItems;
            //MessageItems = comment.CommentItems;

            var list = new List <IMessagePart>();
            var s    = item.PurchaseAmount;

            if (item.CommentItems.Count() > 0)
            {
                s += Environment.NewLine;
            }
            list.Add(MessagePartFactory.CreateMessageText(s));
            list.AddRange(item.CommentItems);
            MessageItems = list;

            Thumbnail = comment.UserIcon;
            Id        = comment.Id;
            PostTime  = comment.PostedAt.ToString("HH:mm:ss");
        }
예제 #10
0
        private WhowatchMessageContext CreateMessageContext(IWhowatchMessage message, bool isInitialComment)
        {
            IMessageMetadata metadata = null;

            if (message is IWhowatchComment comment)
            {
                var user = GetUser(comment.UserId);
                user.Name = MessagePartFactory.CreateMessageItems(comment.UserName);
                var isFirstComment = _first.IsFirstComment(user.UserId);
                metadata = new CommentMessageMetadata(comment, _options, _siteOptions, user, this, isFirstComment)
                {
                    IsInitialComment = isInitialComment,
                    SiteContextGuid  = SiteContextGuid,
                };
            }
            else if (message is IWhowatchItem item)
            {
                var user = GetUser(item.UserId.ToString());
                user.Name = MessagePartFactory.CreateMessageItems(item.UserName);
                metadata  = new ItemMessageMetadata(item, _options, _siteOptions, user, this)
                {
                    IsInitialComment = isInitialComment,
                    SiteContextGuid  = SiteContextGuid,
                };
            }
            WhowatchMessageContext context = null;

            if (metadata != null)
            {
                var methods = new WhowatchMessageMethods();
                context = new WhowatchMessageContext(message, metadata, methods);
            }
            return(context);
        }
예제 #11
0
        public TwitchCommentViewModel(ICommentOptions options, ITwitchSiteOptions siteOptions,
                                      ICommentData commentData, bool isFirstComment, ICommentProvider commentProvider, IUser user)
            : base(options, user, commentProvider, isFirstComment)
        {
            MessageType  = MessageType.Comment;
            _siteOptions = siteOptions;
            Id           = commentData.Id;
            UserId       = commentData.UserId;
            DisplayName  = commentData.DisplayName;
            PostTime     = commentData.SentAt.ToString("HH:mm:ss");

            var name = commentData.Username;

            user.Name = new List <IMessagePart> {
                MessagePartFactory.CreateMessageText(name)
            };
            var message = commentData.Message;

            if (siteOptions.NeedAutoSubNickname)
            {
                var nick = ExtractNickname(message);
                if (!string.IsNullOrEmpty(nick))
                {
                    user.Nickname = nick;
                }
            }
            NameItemsInternal = new List <IMessagePart> {
                MessagePartFactory.CreateMessageText(name)
            };
            MessageItems = Tools.GetMessageItems(commentData.Message, commentData.Emotes);

            Init();
        }
        public NicoCommentViewModel(NicoSitePlugin.INicoComment comment, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(comment as NicoSitePlugin.INicoMessage, metadata, methods, connectionStatus, options)
        {
            //if (!string.IsNullOrEmpty(comment.UserName))
            //{
            //    _nameItems = MessagePartFactory.CreateMessageItems(comment.UserName);
            //}
            var siteOptions = (INicoSiteOptions)metadata.SiteOptions;

            siteOptions.PropertyChanged += (s, e) =>
            {
                switch (e.PropertyName)
                {
                case nameof(siteOptions.IsAutoSetNickname):
                {
                    SetNameItems(comment, metadata, siteOptions);
                }
                break;
                }
            };
            SetNameItems(comment, metadata, siteOptions);
            MessageItems = MessagePartFactory.CreateMessageItems(comment.Text);
            if (IsValudThumbnailUrl(comment.ThumbnailUrl))
            {
                Thumbnail = new MessageImage
                {
                    Url    = comment.ThumbnailUrl,
                    Height = 40,
                    Width  = 40,
                };
            }
            Id       = comment.Id;
            PostTime = comment.PostedAt.ToLocalTime().ToString("HH:mm:ss");
        }
예제 #13
0
        public static INicoInfo CreateNicoInfo(IChat chat, string roomName, INicoSiteOptions siteOptions)
        {
            var match = Regex.Match(chat.Text, "^/info (?<no>\\d+) (?<content>.+)$", RegexOptions.Singleline);

            if (match.Success)
            {
                var no      = int.Parse(match.Groups["no"].Value);
                var content = match.Groups["content"].Value;
                return(new NicoInfo(chat.Raw, siteOptions)
                {
                    CommentItems = new List <IMessagePart> {
                        MessagePartFactory.CreateMessageText(content)
                    },
                    NameItems = null,
                    PostTime = chat.Date.ToString("HH:mm:ss"),
                    UserId = chat.UserId,
                    RoomName = roomName,
                    No = no,
                });
            }
            else
            {
                throw new ParseException(chat.Raw);
            }
        }
 public NicoCommentViewModel(NicoSitePlugin.INicoEmotion item, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
     : this(item as NicoSitePlugin.INicoMessage, metadata, methods, connectionStatus, options)
 {
     //_nameItems = MessagePartFactory.CreateMessageItems(item.UserName);
     MessageItems = MessagePartFactory.CreateMessageItems(item.Content);
     PostTime     = item.PostedAt.ToString("HH:mm:ss");
     Info         = "エモーション";
 }
        private MixchMessageContext CreateMessageContext(Packet p, bool isInitialComment)
        {
            var userId = p.UserId.ToString();
            var user   = GetUser(userId) as IUser2;

            if (!_userDict.ContainsKey(userId))
            {
                _userDict.AddOrUpdate(user.UserId, user, (id, u) => u);
            }
            bool isFirstComment;

            if (_userCommentCountDict.ContainsKey(userId))
            {
                _userCommentCountDict[userId]++;
                isFirstComment = false;
            }
            else
            {
                _userCommentCountDict.Add(userId, 1);
                isFirstComment = true;
            }

            var nameItems = new List <IMessagePart>();

            nameItems.Add(MessagePartFactory.CreateMessageText(p.Name));
            user.Name = nameItems;

            var messageItems = new List <IMessagePart>();
            var messageBody  = p.Message();

            if (!string.IsNullOrEmpty(messageBody))
            {
                messageItems.Add(MessagePartFactory.CreateMessageText(messageBody));
            }

            MixchMessageContext messageContext = null;
            IMixchMessage       message;

            message = new MixchMessage("")
            {
                MixchMessageType = (MixchMessageType)p.Kind,
                MessageItems     = messageItems,
                Id             = "", // ミクチャはメッセージにIDが存在しない
                NameItems      = nameItems,
                PostTime       = DateTimeOffset.FromUnixTimeSeconds(p.Created).LocalDateTime,
                UserId         = p.UserId.ToString(),
                IsFirstComment = isFirstComment,
            };
            var metadata = new MessageMetadata(message, _options, _siteOptions, user, this, isFirstComment)
            {
                IsInitialComment = isInitialComment,
                SiteContextGuid  = SiteContextGuid,
            };
            var methods = new MixchMessageMethods();

            messageContext = new MixchMessageContext(message, metadata, methods);
            return(messageContext);
        }
예제 #16
0
 private void SetNameItems()
 {
     if (!string.IsNullOrEmpty(User.Nickname))
     {
         NickItemsInternal = new List <IMessagePart> {
             MessagePartFactory.CreateMessageText(User.Nickname)
         };
     }
 }
예제 #17
0
        public static List <IMessagePart> ParseMessage(string message)
        {
            var b    = ReplaceLink(message);
            var arr  = Regex.Split(b, "(\\<[^\\>]+?\\>)");
            var list = new List <IMessagePart>();

            foreach (var s in arr)
            {
                if (!s.StartsWith("<"))
                {
                    var decoded = ReplaceHtmlEntities(s);
                    list.Add(MessagePartFactory.CreateMessageText(decoded));
                }
                else if (s.StartsWith("<a href"))
                {
                    var match = Regex.Match(s, "^<a href=\"(?<url>[^\"]+)\"");
                    if (match.Success)
                    {
                        var url = match.Groups["url"].Value;
                        list.Add(new MessageLink {
                            Text = url, Url = url
                        });
                    }
                }
                else if (s.StartsWith("<br"))
                {
                    list.Add(MessagePartFactory.CreateMessageText(Environment.NewLine));
                }
                else if (s == "<wbr>")
                {
                    //do nothing
                }
                else if (s.StartsWith("<img"))
                {
                    var match = Regex.Match(s, "(\\<img class=\"emoji\" src=\"(?<url>[^\"]+)\" width=\"(?<width>\\d+)\" height=\"(?<height>\\d+)\" /\\>)");
                    if (match.Success)
                    {
                        var url    = "https://twitcasting.tv" + match.Groups["url"].Value;//domainを追加しないと
                        var width  = int.Parse(match.Groups["width"].Value);
                        var height = int.Parse(match.Groups["height"].Value);
                        list.Add(new MessageImage {
                            Url = url, Alt = "", Height = height, Width = width
                        });
                    }
                }
                else
                {
#if DEBUG
                    using (var sw = new System.IO.StreamWriter("tag.txt", true))
                    {
                        sw.WriteLine(s);
                    }
#endif
                }
            }
            return(list);
        }
예제 #18
0
        public PeriscopeCommentViewModel(PeriscopeSitePlugin.IPeriscopeLeave leave, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            _message = leave;

            _nameItems   = MessagePartFactory.CreateMessageItems(leave.DisplayName);
            MessageItems = MessagePartFactory.CreateMessageItems(leave.Text);
            //Thumbnail = join..UserIcon;
            //Id = join.Id.ToString();
            //PostTime = join.PostTime;
        }
예제 #19
0
        public PeriscopeCommentViewModel(PeriscopeSitePlugin.IPeriscopeComment comment, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            _message = comment;

            _nameItems   = MessagePartFactory.CreateMessageItems(comment.DisplayName);
            MessageItems = MessagePartFactory.CreateMessageItems(comment.Text);
            Thumbnail    = null;
            Id           = comment.Id;
            PostTime     = comment.PostedAt.HasValue ? comment.PostedAt.Value.ToString("HH:mm:ss") : (string)null;
        }
예제 #20
0
        public McvMildomCommentViewModel(MildomSitePlugin.IMildomComment comment, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            _message = comment;

            _nameItems   = MessagePartFactory.CreateMessageItems(comment.UserName);
            MessageItems = comment.CommentItems;
            Thumbnail    = null;
            Id           = null;
            PostTime     = comment.PostedAt.ToString("HH:mm:ss");
        }
        public OpenrecCommentViewModel(IOpenrecCommentData commentData, ICommentOptions options, IOpenrecSiteOptions siteOptions, ICommentProvider commentProvider, bool isFirstComment, IUser user)
            : base(options, user, commentProvider, isFirstComment)
        {
            MessageType  = MessageType.Comment;
            _options     = options;
            _siteOptions = siteOptions;
            UserId       = commentData.UserId;
            Id           = commentData.Id;
            PostDate     = commentData.PostTime.ToString("HH:mm:ss");
            var elapsed = commentData.Elapsed;

            Elapsed = Tools.ElapsedToString(elapsed);
            IsStamp = commentData.Stamp != null;
            IsYell  = commentData.IsYell;
            if (!string.IsNullOrEmpty(commentData.UserIconUrl))
            {
                Thumbnail = new MessageImage {
                    Url = commentData.UserIconUrl
                };
            }
            if (siteOptions.IsAutoSetNickname)
            {
                var nick = ExtractNickname(commentData.Message.Text);
                if (!string.IsNullOrEmpty(nick))
                {
                    user.Nickname = nick;
                }
            }
            //Name
            {
                var nameItems = new List <IMessagePart>();
                nameItems.Add(MessagePartFactory.CreateMessageText(commentData.Name));
                nameItems.AddRange(commentData.NameIcons);
                NameItemsInternal = nameItems;
            }
            //Message
            {
                var messageItems = new List <IMessagePart>();
                if (commentData.IsYell)
                {
                    MessageType = MessageType.BroadcastInfo;
                    messageItems.Add(MessagePartFactory.CreateMessageText("エールポイント:" + commentData.YellPoints + Environment.NewLine));
                }
                messageItems.Add(commentData.Message);
                if (commentData.Stamp != null)
                {
                    MessageType = MessageType.BroadcastInfo;
                    messageItems.Add(commentData.Stamp);
                }
                MessageItems = messageItems;
            }
            Init();
        }
 public NicoCommentViewModel(NicoSitePlugin.INicoComment comment, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
     : this(comment as NicoSitePlugin.INicoMessage, metadata, methods, connectionStatus, options)
 {
     if (!string.IsNullOrEmpty(comment.UserName))
     {
         _nameItems = MessagePartFactory.CreateMessageItems(comment.UserName);
     }
     MessageItems = MessagePartFactory.CreateMessageItems(comment.Text);
     //Thumbnail = comment.UserIcon;
     Id       = comment.Id;
     PostTime = comment.PostedAt.ToString("HH:mm:ss");
 }
        public McvMirrativCommentViewModel(MirrativSitePlugin.IMirrativItem item, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            var comment = item;

            _message = comment;

            _nameItems   = MessagePartFactory.CreateMessageItems(comment.UserName);
            MessageItems = MessagePartFactory.CreateMessageItems(comment.Text);
            Thumbnail    = null;
            Id           = item.Id;
            PostTime     = comment.PostedAt.ToString("HH:mm:ss");
        }
        public McvMirrativCommentViewModel(MirrativSitePlugin.IMirrativJoinRoom item, IMessageMetadata metadata, IMessageMethods methods, IConnectionStatus connectionStatus, IOptions options)
            : this(metadata, methods, connectionStatus, options)
        {
            var comment = item;

            _message = comment;

            _nameItems   = MessagePartFactory.CreateMessageItems(comment.UserName);
            MessageItems = MessagePartFactory.CreateMessageItems(comment.Text);
            Thumbnail    = comment.UserIcon;
            Id           = null;
            PostTime     = comment.PostTime;
        }
예제 #25
0
        private static List <IMessagePart> GetMessageParts(dynamic ren)
        {
            var messageItems = new List <IMessagePart>();

            if (!ren.ContainsKey("message"))//PaidMessageではコメント無しも可能
            {
                return(messageItems);
            }
            if (ren.message.ContainsKey("runs"))
            {
                foreach (var r in ren.message.runs)
                {
                    if (r.ContainsKey("text"))
                    {
                        var text = (string)r.text;
                        messageItems.Add(MessagePartFactory.CreateMessageText(text));
                    }
                    else if (r.ContainsKey("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.ContainsKey("simpleText"))
            {
                var text = (string)ren.message.simpleText;
                messageItems.Add(MessagePartFactory.CreateMessageText(text));
            }
            else
            {
                throw new ParseException();
            }
            return(messageItems);
        }
 private void P1_MessageReceived(object sender, IInternalMessage e)
 {
     if (e is Kind1Type1 kind1Type1)
     {
         var message        = new PeriscopeComment(kind1Type1);
         var userId         = message.UserId;
         var isFirstComment = _first.IsFirstComment(userId);
         var user           = GetUser(userId);
         user.Name = MessagePartFactory.CreateMessageItems(message.Text);
         var metadata = CreateMessageMetadata(message, user, isFirstComment);
         var methods  = new MessageMethods();
         RaiseMessageReceived(new MessageContext(message, metadata, methods));
     }
     else if (e is Kind2Kind1 kind2kind1)
     {
         if (!_siteOptions.IsShowJoinMessage)
         {
             //取得する必要がないため無視する
             return;
         }
         var message        = new PeriscopeJoin(kind2kind1);
         var userId         = message.UserId;
         var isFirstComment = false;
         var user           = GetUser(userId);
         user.Name = MessagePartFactory.CreateMessageItems(message.DisplayName);
         var metadata = CreateMessageMetadata(message, user, isFirstComment);
         var methods  = new MessageMethods();
         RaiseMessageReceived(new MessageContext(message, metadata, methods));
     }
     else if (e is Kind2Kind2 kind2Kind2)
     {
         if (!_siteOptions.IsShowLeaveMessage)
         {
             //取得する必要がないため無視する
             return;
         }
         var message        = new PeriscopeLeave(kind2Kind2);
         var userId         = message.UserId;
         var isFirstComment = false;
         var user           = GetUser(userId);
         user.Name = MessagePartFactory.CreateMessageItems(message.DisplayName);
         var metadata = CreateMessageMetadata(message, user, isFirstComment);
         var methods  = new MessageMethods();
         RaiseMessageReceived(new MessageContext(message, metadata, methods));
     }
 }
예제 #27
0
        private TwicasMessageContext CreateMessageContext(LowObject.Comment lowComment, bool isInitialComment, string raw)
        {
            var  commentData = Tools.Parse(lowComment);
            var  userId      = commentData.UserId;
            bool isFirstComment;

            if (_userCommentCountDict.ContainsKey(userId))
            {
                _userCommentCountDict[userId]++;
                isFirstComment = false;
            }
            else
            {
                _userCommentCountDict.AddOrUpdate(userId, 1, (s, n) => n);
                isFirstComment = true;
            }
            var user = GetUser(userId);

            var message = new TwicasComment(raw)
            {
                CommentItems = commentData.Message,
                Id           = commentData.Id.ToString(),
                NameItems    = new List <IMessagePart> {
                    MessagePartFactory.CreateMessageText(commentData.Name)
                },
                PostTime = commentData.Date.ToString("HH:mm:ss"),
                UserId   = commentData.UserId,
                UserIcon = new MessageImage
                {
                    Url    = commentData.ThumbnailUrl,
                    Alt    = null,
                    Height = commentData.ThumbnailHeight,
                    Width  = commentData.ThumbnailWidth,
                },
            };
            var metadata = new MessageMetadata(message, _options, _siteOptions, user, _cp, isFirstComment)
            {
                IsInitialComment = isInitialComment,
                SiteContextGuid  = SiteContextGuid,
            };
            var methods        = new TwicasMessageMethods();
            var messageContext = new TwicasMessageContext(message, metadata, methods);

            return(messageContext);
        }
예제 #28
0
        public static INicoItem CreateNicoItem(IChat chat, string roomName, INicoSiteOptions siteOptions)
        {
            //Text
            ///gift takenoko 41600702 "さーら♔" 600 "" "たけのこ" 1

            var content = chat.Text;

            return(new NicoItem(chat.Raw, siteOptions)
            {
                CommentItems = new List <IMessagePart> {
                    MessagePartFactory.CreateMessageText(content)
                },
                NameItems = null,
                PostTime = chat.Date.ToString("HH:mm:ss"),
                UserId = chat.UserId,
                RoomName = roomName,
            });
        }
예제 #29
0
        public void VisibilityTest(bool isNgUser, bool isVisible)
        {
            var commentMock = new Mock <IOpenrecCommentData>();

            commentMock.Setup(s => s.Stamp).Returns(new Mock <IMessageImage>().Object);
            commentMock.Setup(s => s.NameIcons).Returns(new List <IMessagePart>());
            commentMock.Setup(s => s.Message).Returns(MessagePartFactory.CreateMessageText(""));
            var optionsMock     = new Mock <ICommentOptions>();
            var siteOptionsMock = new Mock <IOpenrecSiteOptions>();

            siteOptionsMock.Setup(s => s.IsAutoSetNickname).Returns(true);
            var cpMock   = new Mock <ICommentProvider>();
            var userMock = new Mock <IUser>();

            userMock.Setup(u => u.IsNgUser).Returns(isNgUser);
            var cvm = new OpenrecCommentViewModel(commentMock.Object, optionsMock.Object, siteOptionsMock.Object, cpMock.Object, false, userMock.Object);

            Assert.AreEqual(isVisible, cvm.IsVisible);
        }
        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();
        }