Beispiel #1
0
        private MixerMessageContext CreateMessageContext(ChatMessageData chatData)
        {
            var userId  = chatData.UserId.ToString();
            var isFirst = _first.IsFirstComment(userId);
            var user    = GetUser(userId);
            //var comment = new MirrativComment(message, raw);
            var comment  = new MixerComment(chatData, GetCurrentDateTime());
            var metadata = new CommentMessageMetadata(comment, _options, _siteOptions, user, this, isFirst)
            {
                IsInitialComment = false,
                SiteContextGuid  = SiteContextGuid,
            };
            var methods = new MixerMessageMethods();

            if (_siteOptions.NeedAutoSubNickname)
            {
                var messageText = comment.CommentItems.ToText();
                var nick        = SitePluginCommon.Utils.ExtractNickname(messageText);
                if (!string.IsNullOrEmpty(nick))
                {
                    user.Nickname = nick;
                }
            }
            return(new MixerMessageContext(comment, metadata, methods));
        }
Beispiel #2
0
 public MixerComment(ChatMessageData commentData, DateTime createdAt) : base(commentData.Raw)
 {
     UserId       = commentData.UserId.ToString();
     Id           = commentData.Id;
     CommentItems = commentData.MessageItems;
     UserName     = commentData.UserName;
     PostedAt     = createdAt;
 }
Beispiel #3
0
        /// <summary>
        /// websocketで送られてきたEventメッセージの生データをIInternalMessageに変換する
        /// </summary>
        /// <param name="raw"></param>
        /// <param name="d"></param>
        /// <returns></returns>
        private static IInternalMessage ParseEvent(string raw, dynamic d)
        {
            IInternalMessage ret;

            switch (d.@event)
            {
            case "WelcomeEvent":
            {
                ret = new WelcomeEvent(d.data.server);
            }
            break;

            case "ChatMessage":
            {
                try
                {
                    var data         = d.data;
                    var messageItems = new List <IMessagePart>();
                    foreach (var item in d.data.message.message)
                    {
                        switch (item.type)
                        {
                        case "text":
                            messageItems.Add(Common.MessagePartFactory.CreateMessageText(item.text));
                            break;

                        case "emoticon":
                            if (item.source == "external")
                            {
                                //{{"type":"emoticon","source":"external","pack":"https:\/\/uploads.mixer.com\/emoticons\/nmxv2s5c-276399.png","coords":{"x":72,"y":24,"width":24,"height":24},"text":":covent"}}
                                messageItems.Add(new Common.MessageImage
                                    {
                                        Alt    = item.text,
                                        Url    = item.pack,
                                        X      = (int)item.coords.x,
                                        Y      = (int)item.coords.y,
                                        Width  = (int)item.coords.width,
                                        Height = (int)item.coords.height,
                                    });
                            }
                            break;

                        case "link":
                            //{"type":"event","event":"ChatMessage","data":{"channel":523004,"id":"bac9e0a0-f9b5-11e9-8cfb-998f98ddb9b5","user_name":"reinyanBOT","user_id":12006809,"user_roles":["ChannelEditor","Mod","Subscriber","User"],"user_level":85,"user_avatar":"https://uploads.mixer.com/avatar/rnjnv7aa-12006809.jpg","message":{"message":[{"type":"text","data":"。私のYouTubeでは過去の放送がアップロードされています。チャンネル登録してくれるとテンション上がります>>>","text":"。私のYouTubeでは過去の放送がアップロードされています。チャンネル登録してくれるとテンション上がります>>>"},{"type":"link","url":"https://www.youtube.com/c/ReinyaNchannel","text":"https://www.youtube.com/c/ReinyaNchannel"}],"meta":{}},"user_ascension_level":99}}
                            //{"type":"link","url":"https://www.youtube.com/c/ReinyaNchannel","text":"https://www.youtube.com/c/ReinyaNchannel"}
                            messageItems.Add(new MessageLink {
                                    Text = item.text, Url = item.url
                                });
                            break;

                        case "tag":
                            //{"type":"event","event":"ChatMessage","data":{"channel":103551540,"id":"708b9560-f9ba-11e9-8041-79222f5b1a18","user_name":"IIwhite_LordII","user_id":7646222,"user_roles":["Subscriber","User"],"user_level":56,"user_avatar":"https://uploads.beam.pro/avatar/7945o1k4-7646222.jpg","message":{"message":[{"type":"text","data":"Twitch ","text":"Twitch "},{"text":"@ReaperDB","type":"tag","username":"******","id":30380194},{"type":"text","data":" ","text":" "}],"meta":{"shouldDrop":false}},"user_ascension_level":21}}
                            messageItems.Add(Common.MessagePartFactory.CreateMessageText(item.text));
                            break;

                        case "image":
                            //{"type":"event","event":"ChatMessage","data":{"channel":103551540,"id":"bef052d7-fc75-11e9-a950-000d3a0360b5","user_id":44745820,"user_name":"MembreSolide162","user_roles":["Subscriber","User"],"user_level":68,"user_ascension_level":34,"user_avatar":null,"message":{"message":[{"type":"image","data":"Shroud W","text":"Shroud W","url":"https://xforgeassets002.xboxlive.com/serviceid-562a2165-bb5d-46f6-828c-2acdc8b22eb9/90d5e009-9c1f-4a5b-80c3-7757724e27c9/114211413_63707467539294.5.png"},{"type":"text","data":"Escape from tarkov back to back in arrow again try it😁👍","text":"Escape from tarkov back to back in arrow again try it😁👍"}],"meta":{"images":{},"is_skill":true,"skill":{"skill_id":"ed062a17-3d4e-4501-ac0c-b2b63f73d670","skill_name":"Shroud W","execution_id":"bef052d7-fc75-11e9-a950-000d3a0360b5","icon_url":"https://xforgeassets002.xboxlive.com/serviceid-562a2165-bb5d-46f6-828c-2acdc8b22eb9/90d5e009-9c1f-4a5b-80c3-7757724e27c9/114211413_63707467539294.5.png","cost":50,"currency":"Embers"}}}}}
                            messageItems.Add(new Common.MessageImage
                                {
                                    Alt    = item.text,
                                    Url    = item.url,
                                    X      = null,
                                    Y      = null,
                                    Width  = 60,
                                    Height = 60,
                                });
                            break;

                        case "inaspacesuit":
                            //{"type":"event","event":"ChatMessage","data":{"channel":90571077,"id":"2180c9b0-fcfb-11e9-83c2-9197da9e9973","user_name":"TDOT_DEEJAY","user_id":46376566,"user_roles":["Subscriber","User"],"user_level":108,"user_avatar":"https://uploads.mixer.com/avatar/avb6tagt-46376566.jpg","message":{"message":[{"type":"text","data":" ","text":" "},{"type":"inaspacesuit","username":"******","userId":101052282,"text":":ninjainaspacesuit"}],"meta":{"shouldDrop":false}},"user_ascension_level":34}}
                            break;

                        default:
                            throw new ParseException(raw);
                        }
                    }
                    var roles = new List <string>();
                    foreach (var item in data.user_roles)
                    {
                        roles.Add(item);
                    }
                    bool shouldDrop;
                    if (data.message.meta.IsDefined("shouldDrop"))
                    {
                        shouldDrop = data.message.meta.shouldDrop;
                    }
                    else
                    {
                        shouldDrop = false;
                    }
                    //2019/11/03 botにはuser_levelが無いっぽい
                    //{"type":"event","event":"ChatMessage","data":{"channel":276399,"id":"de9b5c10-fe16-11e9-81be-47a1ca288e23","user_name":"HypeBot","user_roles":["Mod","User"],"user_id":696,"message":{"message":[{"data":"","text":"","type":"text"},{"type":"tag","username":"******","text":"@americanskull22","id":129123117},{"data":" is now hosting you!","text":" is now hosting you!","type":"text"}],"meta":{}}}}
                    var userLevel = data.IsDefined("user_level") ? (int)data.user_level : (int?)null;
                    var a         = new ChatMessageData
                    {
                        Raw          = raw,
                        Channel      = (long)data.channel,
                        Id           = data.id,
                        UserName     = data.user_name,
                        UserId       = (long)data.user_id,
                        MessageItems = messageItems,
                        UserLevel    = userLevel,
                        UserRoles    = roles.ToArray(),
                        ShouldDrop   = shouldDrop,
                    };
                    ret = a;
                }
                catch (Exception)
                {
                    ret = new UnknownMessage(raw);
                }
            }
            break;

            case "UserUpdate":
            {
                //{"type":"event","event":"UserUpdate","data":{"roles":["Subscriber","User"],"user":121885488}}
                var userId = (long)d.data.user;
                var roles  = (string[])d.data.roles;
                ret = new UserUpdateEvent(userId, roles);
            }
            break;

            case "DeleteMessage":
            {
                //    //{"type":"event","event":"DeleteMessage","data":{"moderator":{"user_name":"Nostie","user_id":58111179,"user_roles":["Mod","Subscriber","User"],"user_level":51},"id":"ed0e6e50-f9ba-11e9-a062-d152ba44aeae"}}
                var id     = (string)d.data.id;
                var name   = (string)d.data.moderator.user_name;
                var userid = (long)d.data.moderator.user_id;
                var roles  = (string[])d.data.moderator.user_roles;
                var level  = (long)d.data.moderator.user_level;
                ret = new DeleteMessageEvent(id, new User(name, userid, roles, level));
            }
            break;

            case "PurgeMessage":
                //    //{"type":"event","event":"PurgeMessage","data":{"moderator":{"user_name":"MCS_Kilo","user_id":31621807,"user_roles":["GlobalMod","User"],"user_level":97},"user_id":18740075}}
                //    //{"type":"event","event":"PurgeMessage","data":{"user_id":18740075}}
                ret = new UnknownMessage(raw);
                break;

            case "UserJoin":
            {
                //{"type":"event","event":"UserJoin","data":{"originatingChannel":276399,"username":"******","roles":["User"],"id":131608671}}

                var channel  = (long)d.data.originatingChannel;
                var username = (string)d.data.username;
                var roles    = (string[])d.data.roles;
                var id       = (long)d.data.id;
                ret = new UserJoinEvent(channel, username, roles, id);
            }
            break;

            case "UserLeave":
            {
                //{"type":"event","event":"UserLeave","data":{"originatingChannel":276399,"username":"******","roles":["User"],"id":125523573}}
                var channel  = (long)d.data.originatingChannel;
                var username = (string)d.data.username;
                var roles    = (string[])d.data.roles;
                var id       = (long)d.data.id;
                ret = new UserLeaveEvent(channel, username, roles, id);
            }
            break;

            default:
                ret = new UnknownMessage(raw);
                break;
            }

            return(ret);
        }