/// <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, "未知异常,真的是未知的,咩咩找了好久都没找出来,请联系咩咩并且告诉他最近做了什么操作"); } } }
/// <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); }
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); }
/// <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); }
/// <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)); } }