コード例 #1
0
        public async Task ProcessAsync(Sisters.WudiLib.Posts.Message message, HttpApiClient api)
        {
            // TODO 验证用户名是否合法
            var(success, userInfo) = await OsuApi.GetUserInfoAsync(_userName, OsuMixedApi.Mode.Standard);

            if (!success)
            {
                await api.SendMessageAsync(message.Endpoint, "网络错误。");

                return;
            }
            if (userInfo == null)
            {
                await api.SendMessageAsync(message.Endpoint, "没有此用户。");

                return;
            }
            var dbResult = await Database.AddNewBindAsync(message.UserId, userInfo.Id, userInfo.Name, "自己绑定", message.UserId, userInfo.Name);

            if (dbResult.Success)
            {
                await api.SendMessageAsync(message.Endpoint, $"成功绑定为{userInfo.Name}。");
            }
            else if (dbResult.Exception is DbUpdateException && dbResult.Exception.InnerException?.Message.Contains("Duplicate", StringComparison.Ordinal) == true)
            {
                await api.SendMessageAsync(message.Endpoint, "在已绑定的情况下不允许修改,如需修改请联系 bleatingsheep。");
            }
            else
            {
                await api.SendMessageAsync(message.Endpoint, "数据库访问错误。");

                FLogger.LogException(dbResult.Exception);
            }
        }
コード例 #2
0
        public async Task RunAsync(HttpApiClient api)
        {
            var result = await Database.GetPlusRecordedUsersAsync();

            if (!result.Success)
            {
                FLogger.LogInBackground("更新 PP+ 数据时访问数据库失败。");
                FLogger.LogException(result.Exception);
                return;
            }

            IEnumerable <int> todo = result.Result;

            Logger.Info($"找到{todo.Count()}个查询过的玩家。");
            int retry = 10;

            do
            {
                const int threads = 10;
                Logger.Debug($"开始查询,线程数为{threads.ToString(CultureInfo.InvariantCulture)}");
                var failed  = new ConcurrentBag <int>();
                var results = new ConcurrentBag <IUserPlus>();

                Parallel.ForEach(todo, new ParallelOptions
                {
                    MaxDegreeOfParallelism = threads,
                }, userId =>
                {
                    try
                    {
                        var user = s_spider.GetUserPlusAsync(userId).ConfigureAwait(false).GetAwaiter().GetResult();
                        if (user != null)
                        {
                            results.Add(user);
                        }
                    }
                    catch (Exception)
                    {
                        failed.Add(userId);
                    }
                });
                Logger.Info($"查询成功{results.Count}条。");
                Logger.Info($"失败{failed.Count}条,首个失败是{failed.FirstOrDefault()}");
                var addResult = await Database.AddPlusHistoryRangeAsync(results);

                if (!addResult.Success)
                {
                    FLogger.LogInBackground("添加新的 PP+ 数据失败。");
                    FLogger.LogException(addResult.Exception);
                }

                todo = failed.ToList();
                await Task.Delay(600_000);

                retry--;
            } while (todo.Any() && retry > 0);
        }
コード例 #3
0
        public async Task ProcessAsync(Sisters.WudiLib.Posts.Message message, HttpApiClient api)
        {
            dynamic query;

            if (!string.IsNullOrWhiteSpace(queryUser))
            {
                bool success;
                (success, query) = await GetUserKey(queryUser);

                if (!success)
                {
                    await api.SendMessageAsync(message.Endpoint, "查询失败。");

                    return;
                }
                if (query is null)
                {
                    await api.SendMessageAsync(message.Endpoint, "查无此人。");

                    return;
                }
            }
            else
            {
                var(success, userId) = await DataProvider.GetBindingIdAsync(message.UserId);

                if (!success)
                {
                    await api.SendMessageAsync(message.Endpoint, "查询绑定账号失败。");

                    return;
                }
                if (userId == null)
                {
                    await api.SendMessageAsync(message.Endpoint, "未绑定。请发送“绑定”后跟你的用户名进行绑定。");

                    return;
                }
                query = userId.Value;
            }
            try
            {
                var userPlus = (UserPlus)await s_spider.GetUserPlusAsync(query);

                if (userPlus == null)
                {
                    await api.SendMessageAsync(message.Endpoint, string.IsNullOrWhiteSpace(queryUser)? "被办了。" : "查无此人。");

                    return;
                }

                var oldQuery = await Database.GetRecentPlusHistory(userPlus.Id);

                if (!oldQuery.Success)
                {
                    await api.SendMessageAsync(message.Endpoint, "无法找到历史数据。");

                    FLogger.LogException(oldQuery.Exception);
                }

                var old = oldQuery.EnsureSuccess().Result;

                var responseMessage = old == null
                    ? $@"{userPlus.Name} 的 PP+ 数据
Performance: {userPlus.Performance}
Aim (Jump): {userPlus.AimJump}
Aim (Flow): {userPlus.AimFlow}
Precision: {userPlus.Precision}
Speed: {userPlus.Speed}
Stamina: {userPlus.Stamina}
Accuracy: {userPlus.Accuracy}"
                    : $@"{userPlus.Name} 的 PP+ 数据
Performance: {userPlus.Performance}{userPlus.Performance - old.Performance: (+#); (-#); ;}
Aim (Jump): {userPlus.AimJump}{userPlus.AimJump - old.AimJump: (+#); (-#); ;}
Aim (Flow): {userPlus.AimFlow}{userPlus.AimFlow - old.AimFlow: (+#); (-#); ;}
Precision: {userPlus.Precision}{userPlus.Precision - old.Precision: (+#); (-#); ;}
Speed: {userPlus.Speed}{userPlus.Speed - old.Speed: (+#); (-#); ;}
Stamina: {userPlus.Stamina}{userPlus.Stamina - old.Stamina: (+#); (-#); ;}
Accuracy: {userPlus.Accuracy}{userPlus.Accuracy - old.Accuracy: (+#); (-#); ;}";
                if (message is GroupMessage g && g.GroupId == 758120648)
                {
                    //responseMessage += $"\r\n化学式没付钱指数:{C8Mod.CostOf(userPlus):0.0}";
                    responseMessage = C8Mod.ModPerformancePlus(responseMessage, old, userPlus);
                }
                await api.SendMessageAsync(message.Endpoint, responseMessage);

                if (old == null)
                {
                    var addResult = await Database.AddPlusHistoryAsync(userPlus);

                    if (!addResult.Success)
                    {
                        FLogger.LogException(addResult.Exception);
                    }
                }
            }
            catch (ExceptionPlus)
            {
                await api.SendMessageAsync(message.Endpoint, "查询PP+失败。");

                return;