public async Task ProcessAsync(Message message, Sisters.WudiLib.HttpApiClient api)
        {
            long id = message.UserId;

            var(networkSuccess, osuResult) = await DataProvider.GetBindingIdAsync(id);

            ExecutingException.Ensure(networkSuccess, "无法查询绑定账号。");
            ExecutingException.Ensure(osuResult != null, "未绑定 osu! 游戏账号。");

            var osuId  = osuResult.Value;
            var recent = (await OsuApi.GetRecentlyAsync(osuId, OsuMixedApi.Mode.Standard, 1)).FirstOrDefault();

            if (recent == null)
            {
                await api.SendMessageAsync(message.Endpoint, "没打图!");

                return;
            }

            var reply = new List <string> {
                "/np 给 bleatingsheep,查询更方便!"
            };

            try
            {
                var ppBeatmap = await s_spider.GetBeatmapPlusAsync(recent.BeatmapId);

                if (ppBeatmap == null)
                {
                    reply.Add("很抱歉,无法查询 Loved 图。也有可能是 PP+ 没有这张图的数据。");
                    return;
                }
                reply.Add($"https://syrin.me/pp+/b/{ppBeatmap.Id}/");
                reply.Add("Stars: " + ppBeatmap.Stars);
                reply.Add("Aim (Jump): " + ppBeatmap.AimJump);
                reply.Add("Aim (Flow): " + ppBeatmap.AimFlow);
                reply.Add("Precision: " + ppBeatmap.Precision);
                reply.Add("Speed: " + ppBeatmap.Speed);
                reply.Add("Stamina: " + ppBeatmap.Stamina);
                reply.Add("Accuracy: " + ppBeatmap.Accuracy);
                reply.Add("数据来自 PP+。");
            }
            catch (ExceptionPlus)
            {
                reply.Add("访问 PP+ 网站失败。");
            }
            finally
            {
                await api.SendMessageAsync(message.Endpoint, string.Join("\r\n", reply));
            }
        }