コード例 #1
0
ファイル: Subscribe.cs プロジェクト: lsahi/Daylily
        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);
        }
コード例 #2
0
ファイル: Subscribe.cs プロジェクト: lsahi/Daylily
        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));
        }