Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
 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));
 }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
 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));
 }
Ejemplo n.º 5
0
 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));
 }
Ejemplo n.º 6
0
 public void InitializeCore()
 {
     ClansCore = CocCore.Instance(TOKEN).Container.Resolve <ICocCoreClans>();
 }
Ejemplo n.º 7
0
        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");
        }
Ejemplo n.º 8
0
 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));
 }
Ejemplo n.º 9
0
 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));
 }
Ejemplo n.º 10
0
        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);
        }
Ejemplo n.º 11
0
        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");
        }
Ejemplo n.º 12
0
 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));
 }