public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/部落成员") { if (BaseData.Instance.config["部落冲突"].ContainsKey(chat.FromGroup.ToString())) { ICocCoreClans players = BaseData.Instance.container.Resolve <ICocCoreClans>(); var player = players.GetClansMembers(BaseData.Instance.config["部落冲突"][chat.FromGroup.ToString()]); if (player != null) { StringBuilder sb = new StringBuilder(); sb.AppendLine("部落成员数量:" + player.Count); sb.AppendLine("成员列表: "); foreach (var p in player) { sb.AppendLine(p.Name + " : " + p.Tag); } return(new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }); } else { return(new IMessageBase[] { new PlainMessage("未知的部落冲突ID,无法搜索该部落资料!") }); } } else { return(new IMessageBase[] { new PlainMessage("请在config.ini设置好Clan_ID后再继续使用此功能") }); } } return(await base.GetReply(chat)); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message.ToLower().StartsWith("/部落资料 #")) { try { var cocid = chat.Message.Split(' ').Where(x => x.Contains("#")).Last().Replace(" ", ""); ICocCoreClans players = BaseData.Instance.container.Resolve <ICocCoreClans>(); var player = players.GetClansMembers(cocid); if (player != null) { StringBuilder sb = new StringBuilder(); sb.AppendLine("部落成员数量:" + player.Count); sb.AppendLine("成员列表: "); foreach (var p in player) { sb.AppendLine(p.Name + " : " + p.Tag); } return(new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }); } else { return(new IMessageBase[] { new PlainMessage("未知的部落冲突ID,无法搜索该部落资料!") }); } } catch (Exception ex) { return(new IMessageBase[] { new PlainMessage("请确保发送/ClanAPI时是/ClanAPI 玩家标签!错误资料:" + ex.Message) }); } } return(await base.GetReply(chat)); }
private void btnGetData_Click(object sender, EventArgs e) { string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6IjI4YTMxOGY3LTAwMDAtYTFlYi03ZmExLTJjNzQzM2M2Y2NhNSJ9.eyJpc3MiOiJzdXBlcmNlbGwiLCJhdWQiOiJzdXBlcmNlbGw6Z2FtZWFwaSIsImp0aSI6IjMwMzc4M2ViLWIyNWYtNDU5MC05M2NmLTFhNmZjMzQ5Yjk1OSIsImlhdCI6MTU5MTMxNTIyMCwic3ViIjoiZGV2ZWxvcGVyLzcyODgzMmI1LTI4NzgtYTJlZi01MTQ0LTUyNTM5N2U3YzI4NiIsInNjb3BlcyI6WyJjbGFzaCJdLCJsaW1pdHMiOlt7InRpZXIiOiJkZXZlbG9wZXIvc2lsdmVyIiwidHlwZSI6InRocm90dGxpbmcifSx7ImNpZHJzIjpbIjk0LjIxLjM0LjEwOSJdLCJ0eXBlIjoiY2xpZW50In1dfQ.OgBZEinxO9LZ51E8mgPZKT_UiWsNt6IvZgr-1wNfZZINkv-vQvtN6vNFaTHXIecCao5RwAh3QHOAWjQS_fhulg"; Funq.Container container = CocCore.Instance(token).Container; ICocCoreClans clansCore = container.Resolve <ICocCoreClans>(); var clan = clansCore.GetClans(txtTag.Text); txtName.Text = clan.Name; txtLocation.Text = clan.Location.Name; txtType.Text = clan.Type; txtClanLevel.Text = clan.ClanLevel.ToString(); txtClanPoints.Text = clan.ClanPoints.ToString(); txtWarWins.Text = clan.WarWins.ToString(); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/部落战剩余进攻") { ICocCoreClans clan = BaseData.Instance.container.Resolve <ICocCoreClans>(); var clanData = clan.GetCurrentWar(BaseData.Instance.config["部落冲突"][chat.FromGroup.ToString()]); if (!string.IsNullOrEmpty(clanData.Reason)) { return(new IMessageBase[] { new PlainMessage("无法获取部落资料!" + clanData.Reason) }); } else { if (clanData.Reason == "inMaintenance") { return(new IMessageBase[] { new AtMessage(chat.FromQQ), new PlainMessage(" 当前服务器在维护!") }); } else if (clanData.State == "inWar") { StringBuilder sb = new StringBuilder(); sb.Append("\n你要的部落战资料:\n"); foreach (var Member in clanData.Clan.Members) { if (Member.Attacks == null) { sb.Append(Member.Name + " " + Member.Tag + "\n"); } } sb.Append("战斗日结束时间:" + clanData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); return(new IMessageBase[] { new AtMessage(chat.FromQQ), BaseData.TextToImg(sb.ToString(), chat.Session) }); } else { return(new IMessageBase[] { new AtMessage(chat.FromQQ), new PlainMessage(" 当前部落不在战斗日!(未开战或准备日)") }); } } } return(await base.GetReply(chat)); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/部落平均") { ICocCoreClans clan = BaseData.Instance.container.Resolve <ICocCoreClans>(); var clanData = clan.GetClans(BaseData.Instance.config["部落冲突"][chat.FromGroup.ToString()]); if (!string.IsNullOrEmpty(clanData.Reason)) { return(new IMessageBase[] { new PlainMessage("无法获取部落资料!" + clanData.Reason) }); } StringBuilder sb = new StringBuilder(); long donated = 0, donationsReceived = 0; foreach (var member in clanData.MemberList) { donated += member.Donations; donationsReceived += member.DonationsReceived; } sb.AppendLine("部落平均胜率: " + ((double)(((double)clanData.WarWins / ((double)clanData.WarWins + (double)clanData.WarLosses + (double)clanData.WarTies)) * 100)).ToString("0.00") + "%"); sb.AppendLine("部落平均捐兵: " + donated / clanData.MemberList.Count); sb.Append("部落平均收兵: " + donationsReceived / clanData.MemberList.Count); return(new IMessageBase[] { new PlainMessage(sb.ToString()) }); } return(await base.GetReply(chat)); }
public void InitializeCore() { ClansCore = CocCore.Instance(TOKEN).Container.Resolve <ICocCoreClans>(); }
public void GetMemberList() { SqlConnection con; // connection variables SqlCommand com; DateTime localDate = DateTime.Now; // date now for loot logging date try // connect to clash API { Console.WriteLine(); Console.Write("Connecting to Clash API..."); // set clash api connection token string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6IjI4YTMxOGY3LTAwMDAtYTFlYi03ZmExLTJjNzQzM2M2Y2NhNSJ9.eyJpc3MiOiJzdXBlcmNlbGwiLCJhdWQiOiJzdXBlcmNlbGw6Z2FtZWFwaSIsImp0aSI6ImFlNjY2YzJmLWUyNGQtNGUwZS1hNzU5LTcyZjU4NjRjODY5NSIsImlhdCI6MTUzMDMxMTE3Niwic3ViIjoiZGV2ZWxvcGVyLzA5MGJlMzBlLWFhNjEtN2Y0YS1iMjY1LTk3Mjg1NmEzZDVhOSIsInNjb3BlcyI6WyJjbGFzaCJdLCJsaW1pdHMiOlt7InRpZXIiOiJkZXZlbG9wZXIvc2lsdmVyIiwidHlwZSI6InRocm90dGxpbmcifSx7ImNpZHJzIjpbIjE4LjE5MS4xMjcuODgiLCI3NS4xMzQuOTYuNDciXSwidHlwZSI6ImNsaWVudCJ9XX0.3-S8KOl2DjyO9dhPq4aNjfpyc3Mfei6a_YevQXV0btVU_-d6bJO1pBfuM-7LEtYN5ypXrjAyY5nDjtrHdbJBuQ"; Funq.Container container = CocCore.Instance(token).Container; // build new container with api token ICocCoreClans clansCore = container.Resolve <ICocCoreClans>(); // CoCNET interface config to clans Console.WriteLine(" Connection Established!"); try // fetch loot data { Console.WriteLine(); Console.Write("Fetching member details..."); var clan = clansCore.GetClans("#99L9R088"); //get JSON data for clan tag foreach (var obj in clan.MemberList) // loop through each members details { Member member = new Member(); member.Tag = obj.Tag; member.Name = obj.Name; member.ExpLevel = obj.ExpLevel; member.LeagueID = obj.League.Id; member.LeagueName = obj.League.Name; member.LeagueIcon = obj.League.IconUrls["small"]; member.Trophies = obj.Trophies; member.Role = obj.Role; member.ClanRank = obj.ClanRank; member.Donations = obj.Donations; member.DonationsReceived = obj.DonationsReceived; member.LocalDate = localDate; myMemberList.Add(member); } //Console.WriteLine(); Console.WriteLine(" Member details fetched!"); } catch (Exception e) { Console.WriteLine(); Console.WriteLine(e.Message); Console.WriteLine("Failed to fetch data"); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to connect to API"); } Console.WriteLine(); //Console.WriteLine(); /* * foreach (var member in myMemberList) * { * Console.WriteLine(member.Name); * } */ try { using (con = new SqlConnection(Properties.Settings.Default.newLootConStr)) // new sql connection using the db connection string { Console.Write("Establishing db connection..."); con.Open(); // open db for use Console.WriteLine(" Connected to db!"); foreach (var member in myMemberList) { //Console.WriteLine(); Console.Write("Creating sql command..."); // build sql insert command with loot values using (com = new SqlCommand("AddMemberDetails", con)) { com.CommandType = CommandType.StoredProcedure; com.Parameters.AddWithValue("@tag", member.Tag); // add values to sql command com.Parameters.AddWithValue("@name", member.Name); // add values to sql command com.Parameters.AddWithValue("@expLevel", member.ExpLevel); // add values to sql command com.Parameters.AddWithValue("@leagueID", member.LeagueID); // add values to sql command com.Parameters.AddWithValue("@leagueName", member.LeagueName); // add values to sql command com.Parameters.AddWithValue("@leagueIcon", member.LeagueIcon); // add values to sql command com.Parameters.AddWithValue("@trophies", member.Trophies); // add values to sql command com.Parameters.AddWithValue("@role", member.Role); // add values to sql command com.Parameters.AddWithValue("@clanRank", member.ClanRank); // add values to sql command com.Parameters.AddWithValue("@donations", member.Donations); // add values to sql command com.Parameters.AddWithValue("@donationsReceived", member.DonationsReceived); // add values to sql command com.Parameters.AddWithValue("@dateNow", member.LocalDate); // add values to sql command Console.WriteLine(" Values added to sql command!"); try { //Console.WriteLine(); Console.Write("Inserting " + member.Name + " member into db..."); com.ExecuteNonQuery(); // execute INSERT command Console.WriteLine(" " + member.Name + " successfully inserted to db!"); } catch (SqlException e) { Console.WriteLine(); Console.WriteLine(e.Message); Console.WriteLine("Failed to insert data to db"); } } } con.Close(); } } catch (SqlException e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to connect to db"); } Console.WriteLine(); Console.WriteLine("Operation Complete"); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/当前联赛") { ICocCoreClans war = BaseData.Instance.container.Resolve <ICocCoreClans>(); var keypairs = BaseData.valuePairs(configType.部落冲突); if (keypairs.ContainsKey(chat.FromGroup.ToString())) { LeagueWar league = war.GetCurrentWarLeague(keypairs[chat.FromGroup.ToString()]); if (league != null && string.IsNullOrEmpty(league.Reason)) { StringBuilder sb = new StringBuilder(); Array.Reverse(league.Rounds); IMessageBase[] result = null; Parallel.ForEach(league.Rounds, (rounds) => { foreach (var warTag in rounds.warTags) { if (warTag != "#0") { if (result != null) { return; } var roundData = war.GetCurrentWarLeagueRound(warTag); if (result != null) { return; } Logger.Instance.AddLog(LogType.Debug, "联赛部落" + roundData.clan.Name + " vs " + roundData.opponent.Name); if (roundData.clan.Tag == keypairs[chat.FromGroup.ToString()].ToUpper()) { if (roundData.state == "inWar") { sb.AppendLine("当前联赛结束时间为: " + roundData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.opponent.Name); sb.AppendLine("当前我方战星: " + roundData.clan.Stars + ", 敌方战星: " + roundData.opponent.Stars); sb.AppendLine("========================"); foreach (var Member in roundData.clan.Members.OrderBy(x => x.MapPosition)) { if (Member.Attacks == null || Member.Attacks.Length < 1) { sb.AppendLine(Member.Name + " : 还未进攻"); } else { sb.AppendLine(Member.Name + " : " + Member.Attacks[0].Stars + "星(摧毁: " + Member.Attacks[0].DestructionPercentage + "%)"); } } result = new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }; } } else if (roundData.opponent.Tag == keypairs[chat.FromGroup.ToString()].ToUpper()) { if (roundData.state == "inWar") { sb.AppendLine("当前联赛结束时间为: " + roundData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.clan.Name); sb.AppendLine("当前我方战星: " + roundData.opponent.Stars + ", 敌方战星: " + roundData.clan.Stars); foreach (var Member in roundData.opponent.Members.OrderBy(x => x.MapPosition)) { if (Member.Attacks == null || Member.Attacks.Length < 1) { sb.AppendLine(Member.Name + " : 还未进攻"); } else { sb.AppendLine(Member.Name + " : " + Member.Attacks[0].Stars + "星(摧毁: " + Member.Attacks[0].DestructionPercentage + "%)"); } } result = new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }; } } } } }); if (result == null) { result = new IMessageBase[] { new PlainMessage("联赛资料获取失败!也许现在不是联赛时间?") }; } return(result); } else { if (league != null) { return(new IMessageBase[] { new PlainMessage("无法获取任何联赛资料,错误详情: " + league.Reason + "!") }); } else { return(new IMessageBase[] { new PlainMessage("无法获取任何联赛资料!") }); } } } else { return(new IMessageBase[] { new PlainMessage("请设置好config.ini后才使用此功能,或者使用</绑定群 #部落标签>后才使用!") }); } } return(await base.GetReply(chat)); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/部落战") { ICocCoreClans clan = BaseData.Instance.container.Resolve <ICocCoreClans>(); var clanData = clan.GetCurrentWar(BaseData.Instance.config["部落冲突"][chat.FromGroup.ToString()]); if (!string.IsNullOrEmpty(clanData.Reason)) { return(new IMessageBase[] { new PlainMessage("无法获取部落资料!" + clanData.Reason) }); } else { if (clanData.State == "inWar") { StringBuilder sb = new StringBuilder(); sb.Append("当前的部落战资料:\n"); sb.Append("当前我方战星: " + clanData.Clan.Stars + "(摧毁:" + clanData.Clan.DestructionPercentage + ")\n"); sb.Append("当前对手战星:" + clanData.Opponent.Stars + "(摧毁:" + clanData.Opponent.DestructionPercentage + ")\n"); sb.AppendLine(); foreach (var Member in clanData.Clan.Members.OrderBy(x => x.MapPosition)) { if (Member.Attacks != null) { sb.Append(Member.Name + "已进攻 " + Member.Attacks.Count + " 次 \n"); int x = 1; foreach (var attack in Member.Attacks) { if (x == 1) { sb.Append("❶"); } else { sb.Append("❷"); } sb.Append("攻击了" + clanData.Opponent.Members.Where(y => y.Tag == attack.DefenderTag).FirstOrDefault().MapPosition + "号获得" + attack.Stars + "星|摧毁:" + attack.DestructionPercentage + "%\n"); x++; } sb.Append("\n"); } else { sb.Append(Member.Name + " " + Member.Tag + " 无进攻次数\n"); } } sb.Append("战斗日结束时间:" + clanData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); return(new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }); } else if (clanData.State == "warEnded") { StringBuilder sb = new StringBuilder(); sb.Append("当前部落战资料:\n"); sb.Append("当前我方战星: " + clanData.Clan.Stars + "(摧毁:" + clanData.Clan.DestructionPercentage + ")\n"); sb.Append("当前对手战星:" + clanData.Opponent.Stars + "(摧毁:" + clanData.Opponent.DestructionPercentage + ")\n"); sb.AppendLine(); foreach (var Member in clanData.Clan.Members.OrderBy(x => x.MapPosition)) { if (Member.Attacks != null) { sb.Append(Member.Name + "已进攻 " + Member.Attacks.Count + " 次 \n"); int x = 1; foreach (var attack in Member.Attacks) { if (x == 1) { sb.Append("❶"); } else { sb.Append("❷"); } sb.Append("攻击了" + clanData.Opponent.Members.Where(y => y.Tag == attack.DefenderTag).FirstOrDefault().MapPosition + "号获得" + attack.Stars + "星|摧毁:" + attack.DestructionPercentage + "%\n"); x++; } sb.Append("\n"); } else { sb.Append(Member.Name + " 无进攻\n"); } } sb.Append("部落战已结束!"); return(new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }); } else if (clanData.State == "preparation") { StringBuilder sb = new StringBuilder(); sb.Append("当前部落战资料:\n"); int x = 1; foreach (var Member in clanData.Clan.Members.OrderBy(y => y.MapPosition)) { sb.AppendLine(x + ". " + Member.Name); x++; } sb.AppendLine("开战时间为: " + clanData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("当前为准备日"); return(new IMessageBase[] { BaseData.TextToImg(sb.ToString(), chat.Session) }); } else if (clanData.Reason == "inMaintenance") { return(new IMessageBase[] { new AtMessage(chat.FromQQ), new PlainMessage(" 当前服务器在维护!") }); } else { return(new IMessageBase[] { new AtMessage(chat.FromQQ), new PlainMessage(" 当前部落无部落战!") }); } } } return(await base.GetReply(chat)); }
public void CheckClanWar() { Logger.Instance.AddLog(LogType.Info, "部落战检测系统启动"); DateTime lastBackup = DateTime.MinValue; computer.Open(); computer.CPUEnabled = true; computer.RAMEnabled = true; do { try { foreach (var hardware in computer.Hardware) { switch (hardware.HardwareType) { case HardwareType.CPU: hardware.Update(); var value = GetLoad(hardware); if (value != null) { BaseData.Instance.cpuUsage = value.Value; } BaseData.Instance.cpuName = hardware.Name; break; case HardwareType.RAM: hardware.Update(); value = GetLoad(hardware); if (value != null) { BaseData.Instance.ramUsage = value.Value; } break; } } Thread.Sleep(1000); if ((DateTime.Now.Minute == 0 || DateTime.Now.Minute == 30) && DateTime.Now.Second == 0) { ICocCoreClans clan = BaseData.Instance.container.Resolve <ICocCoreClans>(); ICocCorePlayers players = BaseData.Instance.container.Resolve <ICocCorePlayers>(); try { foreach (var clanID in BaseData.Instance.config["部落冲突"]) { if (clanID.KeyName.All(char.IsDigit)) { if (lastBackup.Date != DateTime.Now.Date) { try { Logger.Instance.AddLog(LogType.Info, "正在备份资料..."); //BackUp our game Data if (!Directory.Exists("com.coc.groupadmin\\BackUp\\" + clanID.KeyName)) { Directory.CreateDirectory("com.coc.groupadmin\\BackUp\\" + clanID.KeyName); } foreach (var file in Directory.GetFiles("com.coc.groupadmin\\" + clanID.KeyName)) { if (File.Exists(file.Replace("com.coc.groupadmin\\", "com.coc.groupadmin\\BackUp\\"))) { File.Delete(file.Replace("com.coc.groupadmin\\", "com.coc.groupadmin\\BackUp\\")); } File.Copy(file, file.Replace("com.coc.groupadmin\\", "com.coc.groupadmin\\BackUp\\")); } lastBackup = DateTime.Now; } catch { } } try { if (long.TryParse(clanID.KeyName, out long value)) { if (DateTime.Now.Month == 1 && DateTime.Now.Day == 1 && DateTime.Now.Hour == 0 && DateTime.Now.Minute == 0 && DateTime.Now.Second == 0) { //新年快乐 Session.SendGroupMessage(value, new AtAllMessage(), new PlainMessage("我tm祝各位tm的" + DateTime.Now.Year + "新年快乐")); } if (!War.ContainsKey(value) || War[value] == null) { var clanData = clan.GetCurrentWar(clanID.Value); if (clanData.State.ToLower() == "preparation") { //New thread Thread t = new Thread(() => { Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已进入准备日!")); var wait = clanData.EndTime.ToLocalTime() - DateTime.Now - new TimeSpan(23, 0, 0); Logger.Instance.AddLog(LogType.Debug, "部落战当前准备日,还需要等待" + wait.Days + "天" + wait.Hours + "小时" + wait.Minutes + "分钟" + wait.Seconds + "秒"); if (wait.TotalSeconds > 0) { Thread.Sleep(wait); Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已开始!")); } return; }); t.IsBackground = true; if (War.ContainsKey(value)) { War[value] = t; } else { War.Add(value, t); } t.Start(); } else if (clanData.State.ToLower() == "inwar") { Thread t = new Thread(() => { var wait = clanData.EndTime.ToLocalTime() - DateTime.Now; Logger.Instance.AddLog(LogType.Debug, "部落战当前已开始,还需要等待" + wait.Days + "天" + wait.Hours + "小时" + wait.Minutes + "分钟" + wait.Seconds + "秒"); if (wait.TotalSeconds > 0) { Thread.Sleep(wait); Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已结束!")); } return; }); t.IsBackground = true; if (War.ContainsKey(value)) { War[value] = t; } else { War.Add(value, t); } t.Start(); } } else if (War[value].ThreadState == ThreadState.Stopped || War[value].ThreadState == ThreadState.Aborted || War[value].ThreadState == ThreadState.Suspended) { War[value] = null; GC.Collect(); var clanData = clan.GetCurrentWar(clanID.Value); if (clanData.State.ToLower() == "preparation") { //New thread Thread t = new Thread(() => { Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已进入准备日!")); //Weird error which always more 12 hours var wait = clanData.EndTime.ToLocalTime() - DateTime.Now - new TimeSpan(12, 0, 0); Logger.Instance.AddLog(LogType.Debug, "部落战当前准备日,还需要等待" + wait.Days + "天" + wait.Hours + "小时" + wait.Minutes + "分钟" + wait.Seconds + "秒"); if (wait.TotalSeconds > 0) { Thread.Sleep(wait); Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已开始!")); } return; }); t.IsBackground = true; War[value] = t; t.Start(); } else if (clanData.State.ToLower() == "inwar") { Thread t = new Thread(() => { var wait = clanData.EndTime.ToLocalTime() - DateTime.Now; Logger.Instance.AddLog(LogType.Debug, "部落战当前已开始,还需要等待" + wait.Days + "天" + wait.Hours + "小时" + wait.Minutes + "分钟" + wait.Seconds + "秒"); if (wait.TotalSeconds > 0) { Thread.Sleep(wait); Session.SendGroupMessage(Convert.ToInt64(clanID.KeyName), new AtAllMessage(), new PlainMessage("部落战已结束!")); } return; }); t.IsBackground = true; War[value] = t; t.Start(); } } var Members = clan.GetClansMembers(clanID.Value); var GroupMembers = Session.GetGroupMemberListAsync(value).Result; foreach (var member in GroupMembers) { using var api = new GameAPI(value, member.Id, Session); foreach (var cd in api.Member.ClanData) { var m = Members.Where(x => x.Tag == cd.ClanID || x.Tag.Replace("0", "O") == cd.ClanID || x.Tag.Replace("1", "I") == cd.ClanID || x.Tag.Replace("0", "O").Replace("1", "I") == cd.ClanID).FirstOrDefault(); if (m != null) { cd.InClan = true; cd.Name = m.Name; cd.LastSeenInClan = DateTime.Now; } else { cd.InClan = false; } } if (api.Member.ClanData.Count == 1 && DateTime.Now.Hour == 0) { Player player = players.GetPlayer(api.Member.ClanData.First().ClanID); if (api.Member.Member.Card != BaseData.Instance.THLevels[player.TownHallLevel] + "本-" + player.Name) { Session.ChangeGroupMemberInfo(api.Member.Member.QQId, value, new GroupMemberCardInfo(BaseData.Instance.THLevels[player.TownHallLevel] + "本-" + player.Name, null)); } } } } else { Logger.Instance.AddLog(LogType.Error, "群号无法加载,资料出现错误"); } } catch (Exception ex) { Logger.Instance.AddLog(LogType.Error, clanID.KeyName + ": " + ex.Message); } } } } catch { } } } catch (Exception ex) { Logger.Instance.AddLog(LogType.Error, "部落战检测出现错误: " + ex.ToString()); } }while (true); }
public void GetClanDetails() { SqlConnection con; // connection variables SqlCommand com; DateTime localDate = DateTime.Now; // date now for loot logging date try // connect to clash API { Console.Write("Connecting to Clash API..."); // set clash api connection token string token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiIsImtpZCI6IjI4YTMxOGY3LTAwMDAtYTFlYi03ZmExLTJjNzQzM2M2Y2NhNSJ9.eyJpc3MiOiJzdXBlcmNlbGwiLCJhdWQiOiJzdXBlcmNlbGw6Z2FtZWFwaSIsImp0aSI6ImFlNjY2YzJmLWUyNGQtNGUwZS1hNzU5LTcyZjU4NjRjODY5NSIsImlhdCI6MTUzMDMxMTE3Niwic3ViIjoiZGV2ZWxvcGVyLzA5MGJlMzBlLWFhNjEtN2Y0YS1iMjY1LTk3Mjg1NmEzZDVhOSIsInNjb3BlcyI6WyJjbGFzaCJdLCJsaW1pdHMiOlt7InRpZXIiOiJkZXZlbG9wZXIvc2lsdmVyIiwidHlwZSI6InRocm90dGxpbmcifSx7ImNpZHJzIjpbIjE4LjE5MS4xMjcuODgiLCI3NS4xMzQuOTYuNDciXSwidHlwZSI6ImNsaWVudCJ9XX0.3-S8KOl2DjyO9dhPq4aNjfpyc3Mfei6a_YevQXV0btVU_-d6bJO1pBfuM-7LEtYN5ypXrjAyY5nDjtrHdbJBuQ"; Funq.Container container = CocCore.Instance(token).Container; // build new container with api token ICocCoreClans clansCore = container.Resolve <ICocCoreClans>(); // CoCNET interface config to clans Console.WriteLine(" Connection Established!"); try // fetch loot data { Console.Write("Fetching clan details..."); var clan = clansCore.GetClans("#99L9R088"); //get JSON data for clan tag tag = clan.Tag; name = clan.Name; badgeUrls = clan.BadgeUrls["large"]; clanLevel = clan.ClanLevel; clanPoints = clan.ClanPoints; members = clan.Members; warWinStreak = clan.WarWinStreak; warWins = clan.WarWins; description = clan.Decsription; type = clan.Type; requiredTrophies = clan.RequiredTrophies; warFrequency = clan.WarFrequency; Console.WriteLine("Clan details fetched!"); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to fetch data"); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to connect to API"); } try { using (con = new SqlConnection(Properties.Settings.Default.newLootConStr)) // new sql connection using the db connection string { Console.Write("Establishing db connection..."); con.Open(); // open db for use Console.WriteLine(" Connected to db!"); Console.Write("Creating sql command..."); // build sql insert command with loot values using (com = new SqlCommand("AddClanDetails", con)) { com.CommandType = CommandType.StoredProcedure; com.Parameters.AddWithValue("@tag", tag); // add values to sql command com.Parameters.AddWithValue("@name", name); com.Parameters.AddWithValue("@badgeUrls", badgeUrls); com.Parameters.AddWithValue("@clanLevel", clanLevel); com.Parameters.AddWithValue("@clanPoints", clanPoints); com.Parameters.AddWithValue("@members", members); com.Parameters.AddWithValue("@warWinStreak", warWinStreak); com.Parameters.AddWithValue("@warWins", warWins); com.Parameters.AddWithValue("@description", description); com.Parameters.AddWithValue("@type", type); com.Parameters.AddWithValue("@requiredTrophies", requiredTrophies); com.Parameters.AddWithValue("@warFrequency", warFrequency); com.Parameters.AddWithValue("@dateNow", localDate); Console.WriteLine("Values added to sql command!"); try { Console.Write("Inserting data into db..."); com.ExecuteNonQuery(); // execute INSERT command Console.WriteLine(" Loot data successfully inserted to db!"); con.Close(); } catch (SqlException e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to insert data to db"); } } } } catch (SqlException e) { Console.WriteLine(e.Message); Console.WriteLine("Failed to connect to db"); } Console.WriteLine(); Console.WriteLine("Operation Complete"); }
public override async Task <IEnumerable <IMessageBase> > GetReply(ChainEventArgs chat) { if (chat.Message == "/联赛") { ICocCoreClans war = BaseData.Instance.container.Resolve <ICocCoreClans>(); var keypairs = BaseData.valuePairs(configType.部落冲突); if (keypairs.ContainsKey(chat.FromGroup.ToString())) { List <IMessageBase> result = new List <IMessageBase>(); LeagueWar league = war.GetCurrentWarLeague(keypairs[chat.FromGroup.ToString()]); if (league != null && string.IsNullOrEmpty(league.Reason)) { StringBuilder sb = new StringBuilder(); sb.AppendLine("============"); foreach (var clan in league.Clans) { sb.AppendLine("部落名: " + clan.Name); sb.AppendLine("参赛成员:" + clan.Members.Length); sb.AppendLine("-----------"); for (int x = 4; x <= 13; x++) { int count = clan.Members.Count(m => m.TownhallLevel == x); if (count > 0) { sb.AppendLine("拥有" + BaseData.Instance.THLevels[x] + "本 x" + count); } } sb.AppendLine("============"); } result.Add(BaseData.TextToImg(sb.ToString(), chat.Session)); sb.Clear(); Array.Reverse(league.Rounds); Parallel.ForEach(league.Rounds, (rounds) => { Parallel.ForEach(rounds.warTags, (warTag) => { if (warTag != "#0") { var roundData = war.GetCurrentWarLeagueRound(warTag); Logger.Instance.AddLog(LogType.Debug, "联赛部落" + roundData.clan.Name + " vs " + roundData.opponent.Name); if (roundData.clan.Tag == keypairs[chat.FromGroup.ToString()].ToUpper()) { if (roundData.state == "preparation") { sb.AppendLine("下场联赛开战时间为: " + roundData.StartTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.opponent.Name); result.Add(BaseData.TextToImg(sb.ToString(), chat.Session)); sb.Clear(); } else if (roundData.state == "inWar") { sb.AppendLine("当前联赛结束时间为: " + roundData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.opponent.Name); sb.AppendLine("当前我方战星: " + roundData.clan.Stars + ", 敌方战星: " + roundData.opponent.Stars); result.Add(BaseData.TextToImg(sb.ToString(), chat.Session)); } } else if (roundData.opponent.Tag == keypairs[chat.FromGroup.ToString()].ToUpper()) { if (roundData.state == "preparation") { sb.AppendLine("下场联赛开战时间为: " + roundData.StartTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.clan.Name); result.Add(BaseData.TextToImg(sb.ToString(), chat.Session)); sb.Clear(); } else if (roundData.state == "inWar") { sb.AppendLine("当前联赛结束时间为: " + roundData.EndTime.ToLocalTime().ToString("dd/MM/yyyy hh:mm:ss tt")); sb.AppendLine("对手为" + roundData.clan.Name); sb.AppendLine("当前我方战星: " + roundData.opponent.Stars + ", 敌方战星: " + roundData.clan.Stars); result.Add(BaseData.TextToImg(sb.ToString(), chat.Session)); } } } }); }); return(result); } else if (!string.IsNullOrEmpty(league.Reason)) { if (league.Reason == "inMaintenance") { return(new IMessageBase[] { new PlainMessage(" 当前服务器在维护!") }); } } else { return(new IMessageBase[] { new PlainMessage("请在config.ini设置好Clan_ID后再继续使用此功能或者当前不在联赛时间") }); } } else { return(new IMessageBase[] { new PlainMessage("请在config.ini设置好Clan_ID后再继续使用此功能") }); } } return(await base.GetReply(chat)); }