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); }
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)); }