static async Task Main(string[] args) { string key = null; if (args.Length > 0) { key = args[0]; } long qqId = -1; if (args.Length > 1) { qqId = Convert.ToInt64(args[1]); } try { Logger.Instance.AddLog(LogType.Info, "正在加载..."); FileIniDataParser parse = new FileIniDataParser(); if (!File.Exists("config.ini")) { BaseData.Instance.config = new IniData(); foreach (var section in (configType[])Enum.GetValues(typeof(configType))) { BaseData.Instance.config.Sections.AddSection(section.ToString()); } BaseData.InitFirstUse(); parse.WriteFile("config.ini", BaseData.Instance.config, Encoding.Unicode); } BaseData.LoadCOCData(); Logger.Instance.AddLog(LogType.Info, "已加载" + BaseData.Instance.config.Sections.Count + "区域"); if (BaseData.Instance.checkClanWar != null) { BaseData.Instance.checkClanWar.Abort(); BaseData.Instance.checkClanWar = null; } BaseData.ReadGameData(); } catch (Exception ex) { Logger.Instance.AddLog(LogType.Error, ex.Message); } if (key == null) { if (!BaseData.valuePairs(configType.部落冲突).TryGetValue("AuthKey", out key)) { Logger.Instance.AddLog(LogType.Error, "法找到可使用的AuthKey! 请在config.ini的部落冲突栏位添加AuthKey = 相应的AuthKey!"); Console.ReadLine(); return; } } if (qqId == -1) { if (!BaseData.valuePairs(configType.部落冲突).TryGetValue("QQ号", out string qqString)) { Logger.Instance.AddLog(LogType.Error, "无法找到可使用的QQ号! 请在config.ini的部落冲突栏位添加QQ号 = 相应的QQ号!"); Console.ReadLine(); return; } if (!long.TryParse(qqString, out qqId)) { Logger.Instance.AddLog(LogType.Error, "QQ号不正确!请确保QQ号只有纯数字!"); Console.ReadLine(); return; } } LoggedInQQ = qqId; AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; Loop: try { MiraiHttpSessionOptions options = new MiraiHttpSessionOptions("127.0.0.1", 8080, key); await using var session = new MiraiHttpSession(); BaseData.Instance.checkClanWar = new Thread(new Threading(session).CheckClanWar) { IsBackground = true }; BaseData.Instance.checkClanWar.Start(); session.AddPlugin(new GroupMessageHandler()); session.AddPlugin(new GroupRequestHandler()); session.AddPlugin(new GroupExitHandler()); Logger.Instance.AddLog(LogType.Info, "创建Event监听成功!"); Retry: try { await session.ConnectAsync(options, qqId, true); } catch { goto Retry; } Logger.Instance.AddLog(LogType.Info, "监听开始!"); do { var input = Console.ReadLine(); switch (input) { case "/D": if (!Directory.Exists("apk")) { Directory.CreateDirectory("apk"); Logger.Instance.AddLog(LogType.Info, "把部落冲突APK文件放到这个文件夹内后再输入/D"); Process.Start("explorer.exe", Path.Combine(Environment.CurrentDirectory, "apk")); break; } else { foreach (var f in Directory.GetFiles("apk", "*.*", SearchOption.AllDirectories)) { if (!f.EndsWith(".apk")) { File.Delete(f); } } } var files = Directory.GetFiles("apk", "*.apk", SearchOption.TopDirectoryOnly); Array.Sort(files, StringComparer.OrdinalIgnoreCase); var file = files.Last(); var zip = file.Replace(".apk", ".zip"); File.Copy(file, zip); ZipArchive zipFile = ZipFile.OpenRead(zip); zipFile.ExtractToDirectory(Path.Combine(Environment.CurrentDirectory, "apk")); foreach (var f in Directory.GetFiles("apk", "*.csv", SearchOption.AllDirectories)) { File.WriteAllBytes(f, SCDecompress.Decompress(f)); if (f.EndsWith("buildings.csv") || f.EndsWith("characters.csv") || f.EndsWith("heros.csv") || f.EndsWith("spells.csv") || f.EndsWith("texts.csv")) { var local = Path.Combine(Environment.CurrentDirectory, f.Split('\\').Last()); if (File.Exists(local)) { File.Delete(local); } File.Copy(f, local); } } FileIniDataParser parser = new FileIniDataParser(); BaseData.UpdateTownhallINI(parser); BaseData.UpdateTranslate(parser); BaseData.Instance.chains.Clear(); BaseData.Instance.checkClanWar.Abort(); BaseData.Instance.config = null; GC.Collect(); BaseData.LoadCOCData(); break; } }while (true); } catch (Exception ex) { Logger.Instance.AddLog(LogType.Error, ex.ToString()); goto Loop; } }
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)); }