Esempio n. 1
0
        public override CommonMessageResponse Message_Received(CommonMessage messageObj)
        {
            string osuId = Decode(OsuId);

            if (string.IsNullOrEmpty(osuId))
            {
                return(new CommonMessageResponse(LoliReply.ParamMissing, messageObj));
            }

            BllUserRole bllUserRole = new BllUserRole();
            int         userNum     = OldSiteApi.GetUser(OsuId, out var userObj);

            if (userNum == 0)
            {
                return(new CommonMessageResponse(LoliReply.IdNotFound, messageObj, true));
            }
            if (userNum > 1)
            {
                // ignored
            }

            var role = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId));

            if (role.Count != 0)
            {
                if (role[0].CurrentUname == userObj.username)
                {
                    return(new CommonMessageResponse("我早就认识你啦.", messageObj, true));
                }
                string msg = role[0].CurrentUname + ",我早就认识你啦. 有什么问题请找Mother Ship(扔锅)";
                return(new CommonMessageResponse(msg, messageObj, true));
            }

            var newRole = new TblUserRole
            {
                UserId        = long.Parse(userObj.user_id),
                Role          = "creep",
                QQ            = long.Parse(messageObj.UserId),
                LegacyUname   = "[]",
                CurrentUname  = userObj.username,
                IsBanned      = false,
                RepeatCount   = 0,
                SpeakingCount = 0,
                Mode          = 0,
            };
            int c = bllUserRole.InsertUserRole(newRole);

            return(c < 1
                ? new CommonMessageResponse("由于各种强大的原因,绑定失败..", messageObj)
                : new CommonMessageResponse("明白了," + userObj.username + ",多好的名字呢.", messageObj));
        }
Esempio n. 2
0
File: Elo.cs Progetto: Gtsz/Daylily
        public override CommonMessageResponse Message_Received(CommonMessage messageObj)
        {
            string id;
            string uname;

            if (OsuId == null)
            {
                BllUserRole        bllUserRole = new BllUserRole();
                List <TblUserRole> userInfo    = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId));
                if (userInfo.Count == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotBound, messageObj, true));
                }

                id    = userInfo[0].UserId.ToString();
                uname = userInfo[0].CurrentUname;
            }
            else
            {
                int userNum = OldSiteApi.GetUser(OsuId, out var userObj);
                if (userNum == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotFound, messageObj, true));
                }
                if (userNum > 1)
                {
                    // ignored
                }

                id    = userObj.user_id;
                uname = userObj.username;
            }

            var eloInfo = EloApi.GetEloByUid(long.Parse(id));

            switch (eloInfo.Result.ToLower())
            {
            case "fail" when eloInfo.Message.ToLower() == "unranked":
                return(new CommonMessageResponse(uname + "大概没有参加什么mapping赛事..所以没有数据..", messageObj,
                                                 true));

            case "fail":
                return(new CommonMessageResponse("未知错误..查询不到..", messageObj, true));

            default:
                return(new CommonMessageResponse(
                           $"{eloInfo.User.Name},有elo点{Math.Round(eloInfo.User.Elo, 2)},当前#{eloInfo.User.Ranking}.", messageObj, true));
            }
        }
Esempio n. 3
0
        private Beatmapsets[] GetBeatmapsets(string mapperId)
        {
            var mapperName = OldSiteApi.GetUsernameByUid(mapperId);

            Beatmapsets[] mapsets = NewSiteApi
                                    .SearchAllBeatmaps(mapperName,
                                                       new BeatmapsetsSearchOptions {
                Status = BeatmapStatus.Qualified
            })
                                    .Union(NewSiteApi.SearchAllBeatmaps(mapperName,
                                                                        new BeatmapsetsSearchOptions {
                Status = BeatmapStatus.PendingWip
            })).ToArray()
                                    .Union(NewSiteApi.SearchAllBeatmaps(mapperName)).ToArray();

            mapsets = mapsets
                      .Where(i => i.Creator == mapperName)
                      .Where(i =>
                             (i.Status == "qualified" || i.Status == "ranked" || i.Status == "loved") &&
                             DateTime.UtcNow - i.RankedDate < RangeTime ||
                             (i.Status == "pending" || i.Status == "wip") &&
                             DateTime.UtcNow - i.SubmittedDate < RangeTime).ToArray();

            // 先从今日已提醒中筛选此mapper的图
            IEnumerable <SlimBeatmapsets> todayThisCreatorSet = _todaySets.Where(k => k.Creator == mapperName);
            // 从总集合中筛选未提醒过的图
            IEnumerable <Beatmapsets> mapsetsNormal = mapsets.Where(set =>
                                                                    !todayThisCreatorSet.Select(todaySet => todaySet.Id).Contains(set.Id));

            // 从总集合中筛选提醒过,但是状态改变了的图
            Beatmapsets[] mapsetsStatusChanged = mapsets.Where(set =>
            {
                var matchedSet = todayThisCreatorSet.FirstOrDefault(k => k.Id == set.Id);
                return(matchedSet != null && matchedSet.Status != set.Status);
            }).ToArray();
            // 若状态改变,删除之前的已保存信息
            if (mapsetsStatusChanged.Length > 0)
            {
                _todaySets.RemoveAll(s => mapsetsStatusChanged.Select(k => k.Id).Contains(s.Id));
                SaveTodaySettings();
            }

            // 重新集合
            mapsets = mapsetsNormal.Union(mapsetsStatusChanged).ToArray();
            return(mapsets);
        }
Esempio n. 4
0
        public override CommonMessageResponse Message_Received(CommonMessage messageObj)
        {
            string userName, userId;

            if (OsuId == null)
            {
                BllUserRole        bllUserRole = new BllUserRole();
                List <TblUserRole> userInfo    = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId));
                if (userInfo.Count == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotBound, messageObj, true));
                }
                userId   = userInfo[0].UserId.ToString();
                userName = userInfo[0].CurrentUname;
            }
            else
            {
                int userNum = OldSiteApi.GetUser(OsuId, out var userObj);
                if (userNum == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotFound, messageObj, true));
                }
                if (userNum > 1)
                {
                    // ignored
                }

                userId   = userObj.user_id;
                userName = userObj.username;
            }

            var jsonString = HttpClientUtil.HttpGet("https://syrin.me/pp+/u/" + userId);

            if (jsonString == null)
            {
                return(new CommonMessageResponse("PP+获取超时,请重试…", messageObj, true));
            }

            StringFinder sf = new StringFinder(jsonString);

            sf.FindNext("<div class=\"performance-table\">", false);
            sf.FindNext("</div>");

            string    innerText = sf.Cut().Trim('\n').Trim('\r');
            HtmlTable htmlTable = new HtmlTable(innerText);

            string[,] array = htmlTable.GetArray();

            Dictionary <string, int> dValue = new Dictionary <string, int>();

            for (var i = 0; i < array.GetLength(0); i++)
            {
                for (var j = 0; j < array.GetLength(1); j += 2)
                {
                    string key   = array[i, j].Trim(':').Replace("Aim (", "").Replace(")", "");
                    int    value = int.Parse(array[i, j + 1].Replace(",", "").Trim('p'));
                    dValue.Add(key, value);
                }
            }

            var cqImg = new FileImage(Draw(userName, dValue)).ToString();

            return(new CommonMessageResponse(cqImg, messageObj));
        }
Esempio n. 5
0
        public override CommonMessageResponse Message_Received(CommonMessage messageObj)
        {
            string subId;

            switch (messageObj.MessageType)
            {
            case MessageType.Private:
                subId = messageObj.UserId;
                break;

            case MessageType.Discuss:
                subId = messageObj.DiscussId;
                break;

            case MessageType.Group:
            default:
                subId = messageObj.GroupId;
                break;
            }

            if (List)
            {
                List <string> subedId = GetSubscribed(messageObj.MessageType, subId).ToList();
                subedId.Sort();
                int    subedCount = subedId.Count;
                string subject    = messageObj.MessageType == MessageType.Private ? "你" : "本群";
                return(subedCount == 0
                    ? new CommonMessageResponse($"{subject}没有订阅任何mapper。", messageObj)
                    : new CommonMessageResponse(
                           string.Format("以下是{0}的订阅名单,共计{1}个:\r\n{2}", subject, subedCount,
                                         string.Join("\r\n", OldSiteApi.GetUsernameByUid(subedId))),
                           messageObj));
            }

            if (SubscribeMapper != null)
            {
                if (messageObj.MessageType == MessageType.Group && messageObj.PermissionLevel == PermissionLevel.Public)
                {
                    return(new CommonMessageResponse(LoliReply.AdminOnly + "个人推送请私聊.", messageObj));
                }

                List <string> subedId = GetSubscribed(messageObj.MessageType, subId).ToList();
                subedId.Sort();
                int subedCount = subedId.Count;
                if (messageObj.MessageType == MessageType.Private && subedCount >= PrivateMax)
                {
                    return(new CommonMessageResponse(
                               string.Format("你已经订阅了{0}个mapper啦,人家已经装不下的说:{1}", subedCount,
                                             string.Join(", ", OldSiteApi.GetUsernameByUid(subedId))), messageObj));
                }

                if (messageObj.MessageType != MessageType.Private && subedCount >= GroupMax)
                {
                    return(new CommonMessageResponse(
                               string.Format("这个群已经订阅了{0}个mapper啦,人家已经装不下的说:{1}", subedCount,
                                             string.Join(", ", OldSiteApi.GetUsernameByUid(subedId))), messageObj));
                }

                int count = OldSiteApi.GetUser(SubscribeMapper, out var userObj);
                if (count == 0)
                {
                    return(new CommonMessageResponse("找不到指定mapper..", messageObj));
                }

                if (count > 1)
                {
                    return(new CommonMessageResponse($"找到{count}个mapper..", messageObj));
                }

                string mapperId   = userObj.user_id;
                string mapperName = userObj.username;

                if (!_userDic.ContainsKey(mapperId))
                {
                    _userDic.TryAdd(mapperId, new List <UserInfo>());
                }
                if (_userDic[mapperId].Contains(new UserInfo(subId, messageObj.MessageType)))
                {
                    string subject = messageObj.MessageType == MessageType.Private ? "你" : "本群";
                    return(new CommonMessageResponse($"{subject}已经订阅过{mapperName}啦..", messageObj));
                }

                _userDic[mapperId].Add(new UserInfo(subId, messageObj.MessageType));
                SaveSettings(_userDic, "userDictionary");
                string sub = messageObj.MessageType == MessageType.Private ? "私聊提醒你" : "在本群提醒";
                return(new CommonMessageResponse($"{mapperName}订阅成功啦!今后他qualified、rank或love或上传图后会主动{sub}。", messageObj));
            }

            if (UnsubscribeMapper != null)
            {
                if (messageObj.MessageType == MessageType.Group && messageObj.PermissionLevel == PermissionLevel.Public)
                {
                    return(new CommonMessageResponse(LoliReply.AdminOnly + "个人推送请私聊.", messageObj));
                }

                int count = OldSiteApi.GetUser(UnsubscribeMapper, out var userObj);
                if (count == 0)
                {
                    return(new CommonMessageResponse("找不到指定mapper..", messageObj));
                }

                if (count > 1)
                {
                    return(new CommonMessageResponse($"找到{count}个mapper..", messageObj));
                }

                string mapperId   = userObj.user_id;
                string mapperName = userObj.username;
                if (!_userDic.ContainsKey(mapperId) || !_userDic[mapperId].Contains(new UserInfo(subId, messageObj.MessageType)))
                {
                    string subject = messageObj.MessageType == MessageType.Private ? "你" : "本群";
                    return(new CommonMessageResponse($"目前这个mapper没有被{subject}订阅..", messageObj));
                }

                _userDic[mapperId].Remove(new UserInfo(subId, messageObj.MessageType));
                if (_userDic[mapperId].Count == 0)
                {
                    _userDic.Remove(mapperId, out _);
                }

                SaveSettings(_userDic, "userDictionary");
                string sub = messageObj.MessageType == MessageType.Private ? "为你" : "在本群";
                return(new CommonMessageResponse($"订阅取消成功,今后不再{sub}推送{mapperName}的有关动态。", messageObj));
            }

            return(new CommonMessageResponse(LoliReply.ParamMissing, messageObj));
        }
Esempio n. 6
0
        public override CommonMessageResponse Message_Received(CommonMessage messageObj)
        {
            string id;
            string uname;

            if (OsuId == null)
            {
                BllUserRole        bllUserRole = new BllUserRole();
                List <TblUserRole> userInfo    = bllUserRole.GetUserRoleByQq(long.Parse(messageObj.UserId));
                if (userInfo.Count == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotBound, messageObj, true));
                }

                id    = userInfo[0].UserId.ToString();
                uname = userInfo[0].CurrentUname;
            }
            else
            {
                int userNum = OldSiteApi.GetUser(OsuId, out var userObj);
                if (userNum == 0)
                {
                    return(new CommonMessageResponse(LoliReply.IdNotFound, messageObj, true));
                }
                if (userNum > 1)
                {
                    // ignored
                }

                id    = userObj.user_id;
                uname = userObj.username;
            }

            List <KudosuInfo> totalList = new List <KudosuInfo>();
            List <KudosuInfo> tmpList;
            int       page  = 0;
            const int count = 20;

            do
            {
                string json =
                    HttpClientUtil.HttpGet("https://osu.ppy.sh/users/" + id + "/kudosu?offset=" + page + "&limit=" +
                                           count);
                Logger.Debug("GET JSON");

                tmpList = JsonConvert.DeserializeObject <List <KudosuInfo> >(json);
                totalList.AddRange(tmpList);
                page += count;

                if (totalList.Count != 0)
                {
                    continue;
                }

                return(new CommonMessageResponse("此人一张图都没摸过……", messageObj, true));
            } while (tmpList.Count != 0);

            List <KdInfo> kdInfoList = new List <KdInfo>();
            int           pastMonth  = -1;
            KdInfo        info       = null;

            totalList.Reverse();
            foreach (var item in totalList)
            {
                if (item.Created_At.Month != pastMonth)
                {
                    if (pastMonth != -1)
                    {
                        kdInfoList.Add(info);
                    }
                    info = new KdInfo
                    {
                        Time = item.Created_At
                    };
                    pastMonth = item.Created_At.Month;
                }

                if (info != null)
                {
                    info.Count++;
                }
            }

            if (info != null)
            {
                kdInfoList.Add(info);
            }

            var cqImg = new FileImage(Draw(kdInfoList, uname)).ToString();

            return(new CommonMessageResponse(cqImg, messageObj));
        }