Ejemplo n.º 1
0
        private MirrativMessageContext CreateMessageContext(Message message, bool isInitialComment, string raw)
        {
            var userId   = message.UserId;
            var isFirst  = _first.IsFirstComment(userId);
            var user     = GetUser(userId);
            var comment  = new MirrativComment(message, raw);//InitialCommentにギフトが含まれている場合があったらバグ。
            var metadata = new CommentMessageMetadata(comment, _options, _siteOptions, user, this, isFirst)
            {
                IsInitialComment = isInitialComment,
                SiteContextGuid  = SiteContextGuid,
            };
            var methods = new MirrativMessageMethods();

            if (_siteOptions.NeedAutoSubNickname)
            {
                var messageText = message.Comment;
                var nick        = SitePluginCommon.Utils.ExtractNickname(messageText);
                if (!string.IsNullOrEmpty(nick))
                {
                    user.Nickname = nick;
                }
            }
            return(new MirrativMessageContext(comment, metadata, methods));
        }
Ejemplo n.º 2
0
        internal static IMirrativMessage ParseMessage(string data, Action <string, InfoType> SendInfo)
        {
            IMirrativMessage mirrativMessage;
            var json = Codeplex.Data.DynamicJson.Parse(data);

            if (json.IsDefined("t"))
            {
                var type = (int)json["t"];
                switch (type)
                {
                case 1:    //コメント
                {
                    Message message = Tools.ParseType1Data(json);
                    var     comment = new MirrativComment(message, data);
                    mirrativMessage = comment;
                }
                break;

                case 3:    //入室メッセージ
                {
                    try
                    {
                        var message = new Message
                        {
                            Comment   = json["ac"] + "が入室しました",
                            CreatedAt = (long)json["created_at"],
                            Type      = MessageType.BroadcastInfo,
                            UserId    = json["u"],
                            Username  = json["ac"],
                        };
                        SetLinkedLiveOwnerName(message, json);
                        var joinRoom = new MirrativJoinRoom(message, data)
                        {
                            OnlineViewerNum = (int)json["online_viewer_num"],
                        };
                        mirrativMessage = joinRoom;

                        //MetadataUpdated?.Invoke(this, new Metadata
                        //{
                        //    CurrentViewers = (json["online_viewer_num"]).ToString(),
                        //});
                    }
                    catch (Exception ex)
                    {
                        throw new ParseException(data, ex);
                    }
                }
                break;

                //case 4://Followed
                //    {
                //        Debug.WriteLine(data);
                //        mirrativMessage = null;
                //    }
                //    break;
                case 7:
                    Debug.WriteLine(data);
                    SendInfo(data, InfoType.Debug);
                    mirrativMessage = null;
                    break;

                case 8:
                {
                    var message = new MirrativDisconnected(data);
                    mirrativMessage = message;
                }
                break;

                //case 16://Shared
                //    {
                //        Debug.WriteLine(data);
                //        mirrativMessage = null;
                //    }
                //    break;
                //case 34:
                //    mirrativMessage = null;
                //    break;
                case 35:
                {
                    //{"gift_title":"かわいいエモモスナップ(300)","photo_gift_id":"9162721","burl":"","coins":"300","gift_small_image_url":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/assets\/img\/gift\/small_64.png?v=5","u":"4353835","nameplate_enabled":"1","t":35,"avatar_user_ids":"4072373,4383477,6221780,4353835,2921078,664329","count":1,"is_photo_gift":1,"ac":"matsu【\ud83c\udfa8定期組】\ud83c\udf77\ud83c\udccf\ud83d\udc9c ","total_gift_coins":"25972","iurl":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/image\/profile_image\/5b4ceb7de739f19491efe17165c7fa2f8c065170ef2b0c1ff039e96c48c6125e_m.jpeg?1552123860","gift_id":"64","pause_duration":"0","orientations":"0","gift_large_image_url":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/assets\/img\/gift\/large_64.png?v=5","photo_gift_image_url":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/image\/photo_gift:1552124210:4353835:26477211\/5b4ceb7de739f19491efe17165c7fa2f8c065170ef2b0c1ff039e96c48c6125e_origin.png?1552124211","share_text":"@KURORO966_Blackさん,@akatukihawk3さん,@usausa_otomeさん,@0609_spitzさん,@uru_umiさん,カルルンバ\ud83c\udfa8さんとの  #エモモスナップ! #エモモ #ミラティブ"}
                    //{"count":"8","gift_title":"小さな星","total_gift_coins":"26306","ac":"\ud83d\udc3e真顔ちゃん'-'\ud83c\udf4a\ud83c\udf4c\ud83d\udd4a\ud83d\udc36\ud83c\udf31\ud83c\udf75","burl":"","iurl":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/image\/profile_image\/fa3a29a81ece745badebc1fee44071997da131414ee7d53e2bb5228f2adf23cd_m.jpeg?1551797451","coins":"1","gift_small_image_url":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/assets\/img\/gift\/small_1.png?v=2","u":"5101297","gift_id":"1","nameplate_enabled":"1","pause_duration":"0","gift_large_image_url":"https:\/\/cdn.mirrativ.com\/mirrorman-prod\/assets\/img\/gift\/large_1.png?v=2","t":35}

                    if (json.IsDefined("photo_gift_id"))
                    {
                        var message = new Message
                        {
                            Type      = MessageType.BroadcastInfo,
                            CreatedAt = GetCurrentUnixTime(),
                            UserId    = json["u"],
                            Username  = json["ac"],
                            Comment   = json["share_text"],
                        };
                        var item = new MirrativPhotoGift(message, data)
                        {
                            GiftTitle = json["gift_title"],
                            Coins     = int.Parse(json["coins"]),
                            ShareText = json["share_text"],
                        };
                        mirrativMessage = item;
                    }
                    else
                    {
                        var message = new Message
                        {
                            Type      = MessageType.BroadcastInfo,
                            CreatedAt = GetCurrentUnixTime(),
                            UserId    = json["u"],
                            Username  = json["ac"],
                        };
                        var countRaw = json["count"];
                        int itemCount;
                        switch (countRaw)
                        {
                        case string s:
                            itemCount = int.Parse((string)s);
                            break;

                        case double n:
                            itemCount = (int)n;
                            break;

                        default:
                            throw new ParseException(data);
                        }
                        if (itemCount == 1)
                        {
                            message.Comment = json["ac"] + "が" + json["gift_title"] + "を贈りました";
                        }
                        else
                        {
                            message.Comment = json["ac"] + "が" + json["gift_title"] + $"を{itemCount}個贈りました";
                        }
                        var item = new MirrativGift(message, data)
                        {
                            Count = itemCount,
                        };
                        mirrativMessage = item;
                    }
                }
                break;

                //case 38:
                //    mirrativMessage = null;
                //    break;
                default:
                    //{"u":"1895964","ac":"キザシ","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/bdbf7a85cf950b9fb058e58f0d476d90674843ef6b4952d95db0010e64e26c35_m.jpeg?1551359805","owner_name":"トオるん@火星人(本物)","target_live_id":"bT6KzStu8H0B5-dYa7la4A","t":9}
                    //{"users":[{"u":"4715932","ac":"プーのクマさん🐱💛","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/7f56101d8c1129b9c82ae4d9d7191e64fb55ea9eac3159bfe008791927c8e4b7_m.jpeg?1546437257"},{"u":"5428825","ac":"おとうふ (無職)🐰","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/d78aa116f61804ed94f9fd43745141b5a7cac66ff5773be03d6a16d6cc160294_m.jpeg?1546346805"},{"u":"4956040","ac":"飛べない・涼・🐱💛™️😻","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/7073ad377f51ddea20ce1d97312e6d2888d2b25d820e33beb5f7e90075935aee_m.jpeg?1545913736"}],"t":38}
                    //{"users":[{"u":"4715932","ac":"プーのクマさん🐱💛","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/7f56101d8c1129b9c82ae4d9d7191e64fb55ea9eac3159bfe008791927c8e4b7_m.jpeg?1546437257"},{"u":"5428825","ac":"おとうふ (無職)🐰","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/d78aa116f61804ed94f9fd43745141b5a7cac66ff5773be03d6a16d6cc160294_m.jpeg?1546346805"},{"u":"4956040","ac":"飛べない・涼・🐱💛™️😻","burl":"","iurl":"https://cdn.mirrativ.com/mirrorman-prod/image/profile_image/7073ad377f51ddea20ce1d97312e6d2888d2b25d820e33beb5f7e90075935aee_m.jpeg?1545913736"}],"t":38}
                    //{"avatar":{"wipe_position":"0","is_fullscreen":"0","background":{"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/backgrounds/0087_icon.png?v=4","updated_at":"1545894000","url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/backgrounds/0087.png?v=4&v=2","id":"87"},"asset_bundle_url":"https://www.mirrativ.com/assets/avatar/AssetBundlesOpenBeta/Android/","camera":"orth,1.41,0.45","body":{"head":{"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/heads/0002.png?v=4","updated_at":0,"id":"2"},"icon_url":"https://www.mirrativ.com/assets/img/avatar/sex_female.png","hair_color":{"gradient":["14521944",14796465]},"skin_color":"16577775","asset_bundle_name":"body_f_0001","clothes":{"color":{"setup":{"asset_bundle_prefab_name":"setup_f_0036_01.prefab","asset_bundle_name":"setup_f_0036"},"value":"16777215"},"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/clothes/setup_f_0036_01.png?v=4","id":"3601"},"eye":{"color":{"asset_bundle_prefab_postfix":"_08_01.prefab","value":"6704704"},"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/eyes/0008.png?v=4","id":"8"},"asset_bundle_prefab_name":"body_f_0001_01.prefab","proportion":{"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/proportions/tall.png?v=4","updated_at":0,"id":"tall"},"id":"female","mouth":{"asset_bundle_prefab_postfix":"_02.prefab","icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/mouths/0002.png?v=4","updated_at":0,"id":"2"},"hair":{"icon_url":"https://cdn.mirrativ.com/mirrorman-prod/assets/avatar/img/bodies/female/hairs/0001.png?v=4","updated_at":0,"asset_bundle_prefab_name":"hair_f_0001.prefab","id":"1","asset_bundle_name":"hair_f_0001"},"hair_color_percentage":"0.16666669386593413"},"wipe_cameras":{"1":"orth,1.52,0.275","0":"orth,1.41,0.45","2":"orth,1.52,0.275"},"enabled":1},"t":34}
                    Debug.WriteLine(data);
                    SendInfo(data, InfoType.Debug);
                    //throw new ParseException(data);
                    mirrativMessage = new UnknownMessage {
                        Raw = data
                    };
                    break;
                }
            }
            else
            {
                SendInfo(data, InfoType.Debug);
                throw new ParseException(data);
            }
            return(mirrativMessage);
        }