Exemplo n.º 1
0
        /// <summary>
        /// 通过用户名查询信息,返回字符串(太傻逼了,必须重构)
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        private async Task <(bool success, string info)> ProcessQuery(string username)
        {
            // 和重载 ProcessQuery(long uid, string para = "") 有重复代码,必须择日重构
            var users = await apiClient.GetUserAsync(username, OsuApiClient.UsernameType.Username);

            if (users == null)
            {
                return(false, "网络错误");
            }
            else if (users.Length == 0)
            {
                return(false, "没这个人!");
            }
            else
            {
                try
                {
                    User user    = users[0];
                    var  history = await MotherShipApi.GetUserNearest(user.Id);

                    return(true, BuildQueryMessage(Mode.Unspecified, user, history));
                }
                catch (ArgumentNullException e)
                {
                    Logger.Log("这是非常重要的异常记录!");
                    Logger.LogException(e);
                    Logger.Log(Newtonsoft.Json.JsonConvert.SerializeObject(users[0]));
                    return(false, "未知异常,真的是未知的,咩咩找了好久都没找出来,请联系咩咩并且告诉他最近做了什么操作");
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// (执行)查询玩家信息,返回字符串
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="m">模式,可选0,1,2,3</param>
        /// <returns></returns>
        private async Task <(bool success, string info)> ProcessQuery(long uid, string para = "")
        {
            // 和重载 ProcessQuery(string) 有重复代码,必须择日重构
            bool   success;
            string message;
            var    mode  = Mode.Unspecified;
            var    paras = para.Split();

            if (paras.Any(p => p == "0" || p.ToLowerInvariant() == "std"))
            {
                mode = Mode.Std;
            }
            else if (paras.Any(p => p == "1" || p.ToLowerInvariant() == "taiko"))
            {
                mode = Mode.Taiko;
            }
            else if (paras.Any(p => p == "2" || p.ToLowerInvariant() == "ctb" || p.ToLowerInvariant() == "catch"))
            {
                mode = Mode.Ctb;
            }
            else if (paras.Any(p => p == "3" || p.ToLowerInvariant() == "mania"))
            {
                mode = Mode.Mania;
            }

            var users = await apiClient.GetUserAsync(uid.ToString(), OsuApiClient.UsernameType.User_id, mode);

            if (users == null)
            {
                success = false; message = "网络错误";
            }
            else if (!users.Any())
            {
                success = false; message = "没这个人!";
            }
            else
            {
                try
                {
                    User user    = users[0];
                    var  history = await MotherShipApi.GetUserNearest(uid, mode);

                    message = BuildQueryMessage(mode, user, history);
                    success = true;
                }
                catch (ArgumentNullException e)
                {
                    Logger.Log("这是非常重要的异常记录!");
                    Logger.LogException(e);
                    Logger.Log(Newtonsoft.Json.JsonConvert.SerializeObject(users[0]));
                    return(false, "未知异常,真的是未知的,咩咩找了好久都没找出来,请联系咩咩并且告诉他最近做了什么操作");
                }
            }
            return(success, message);
        }
        /// <summary>
        /// 从 qq 号查找 uid
        /// </summary>
        /// <param name="qq">QQ号</param>
        /// <param name="forceUpdate">强制通过 int100 的API查找</param>
        /// <returns>找不到返回0,网络异常返回null</returns>
        private async Task <long?> FindUid(long qq, bool forceUpdate = false)
        {
            long?  uid       = null;
            bool   isFromApi = false; // 成功从别人的 API 处找到绑定信息
            string fromApi   = string.Empty;

            if (!forceUpdate)
            {
                uid = database.GetUidFromQq(qq);
            }
            if (uid == null)
            {
                uid = await MotherShipApi.GetOsuUidFromQqAsync(qq);

                if (uid == null)
                {
                    Logger.Log($"从妈船找QQ={qq}的绑定信息失败(网络问题)");
                }
                else if (uid.Value != 0)
                {
                    isFromApi = true;
                    fromApi   = "Mother Ship";
                }
            }

            if (uid == null)
            {// 数据库找不到UID,在int的数据库查找
                uid = await Int100ApiClient.GetOsuUidFromQqAsync(qq);

                if (uid == null)
                {
                    Logger.Log($"找QQ={qq}的绑定信息失败");
                    return(null);
                }
                else if (uid.Value != 0)
                {
                    isFromApi = true;
                    fromApi   = "int100";
                }
            }
            // 此时 uid != null
            if (isFromApi)
            {
                database.Bind(qq, uid.Value, fromApi + " (while running)");
            }
            return(uid);
        }
Exemplo n.º 4
0
 public bool ProcessMessage(EndPoint endPoint, MessageSource messageSource, string message)
 {
     message = message.Trim();
     if (message == "妈船?" || message == "妈船?")
     {
         long?uid = Database.Instance.GetUidFromQq(messageSource.FromQq);
         if (!uid.HasValue)
         {
             return(true);
         }
         string url     = MotherShipApi.GetStatUrl(uid.Value);
         var    api     = OsuQqBot.QqApi;
         string content = api.OnlineImage(url, true);
         api.SendMessageAsync(endPoint, content);
     }
     return(false);
 }
Exemplo n.º 5
0
        /// <summary>
        /// (执行)查询玩家信息,返回字符串
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="m">模式,可选0,1,2,3</param>
        /// <returns></returns>
        private async Task <(bool success, string info)> ProcessQuery(long uid, string para = "")
        {
            // 和重载 ProcessQuery(string) 有重复代码,必须择日重构
            bool   success;
            string message;
            var    mode  = Mode.Unspecified;
            var    paras = para.Split();

            if (paras.Any(p => p == "0" || p.ToLowerInvariant() == "std"))
            {
                mode = Mode.Std;
            }
            else if (paras.Any(p => p == "1" || p.ToLowerInvariant() == "taiko"))
            {
                mode = Mode.Taiko;
            }
            else if (paras.Any(p => p == "2" || p.ToLowerInvariant() == "ctb" || p.ToLowerInvariant() == "catch"))
            {
                mode = Mode.Ctb;
            }
            else if (paras.Any(p => p == "3" || p.ToLowerInvariant() == "mania"))
            {
                mode = Mode.Mania;
            }

            var users = await apiClient.GetUserAsync(uid.ToString(), OsuApiClient.UsernameType.User_id, mode);

            if (users == null)
            {
                success = false; message = "网络错误";
            }
            else if (!users.Any())
            {
                success = false; message = "没这个人!";
            }
            else
            {
                User user    = users[0];
                var  history = mode == Mode.Std || mode == Mode.Unspecified ? await MotherShipApi.GetUserNearest(uid) : null;

                message = BuildQueryMessage(mode, user, history);
                success = true;
            }
            return(success, message);
        }
Exemplo n.º 6
0
        /// <summary>
        /// 通过用户名查询信息,返回字符串(太傻逼了,必须重构)
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        private async Task <(bool success, string info)> ProcessQuery(string username)
        {
            // 和重载 ProcessQuery(long uid, string para = "") 有重复代码,必须择日重构
            var users = await apiClient.GetUserAsync(username, OsuApiClient.UsernameType.Username);

            if (users == null)
            {
                return(false, "网络错误");
            }
            else if (users.Length == 0)
            {
                return(false, "没这个人!");
            }
            else
            {
                User user    = users[0];
                var  history = await MotherShipApi.GetUserNearest(user.Id);

                return(true, BuildQueryMessage(Mode.Unspecified, user, history));
            }
        }