예제 #1
0
        public async Task RunBots()
        {
            users = GetUsers(pathToUsers);

            SessionInfo sessionInfo = new SessionInfo(DateTime.Now);

            //Running bots
            using (HttpClient http = new HttpClient())
            {
                foreach (User user in users)
                {
                    LTCBot ltcBot = new LTCBot(user, http);
                    await ltcBot.ConnectAsync();

                    await CheckAuthorization(ltcBot);

                    //Check timeouts of bot
                    if (!IsTimeoutsGood(user))
                    {
                        continue;
                    }

                    BotStateInfo result = new BotStateInfo();

                    try
                    {
                        OnUserStarted?.Invoke(user);
                        SubscribeOnBotEvents(ltcBot);
                        result = await ltcBot.Start();
                        await TryToWithdraw(ltcBot, result);
                    }
                    catch (Exception e)
                    {
                        OnBotException?.Invoke(e);
                    }

                    SaveUsers();

                    OnUserCompleted?.Invoke(result);
                    UpdateSessionInfo(sessionInfo, result);

                    //Timeout before starting next bot
                    if (users.Last() != user)
                    {
                        await Task.Delay(60000);
                    }
                }
            }

            if (sessionInfo.CountOfUsers > 0)
            {
                sessionInfo.DurationInMinutes = (DateTime.Now - sessionInfo.Date).TotalMinutes;
                SaveSession(sessionInfo);
            }

            OnSessionCompleted?.Invoke(sessionInfo);
        }
예제 #2
0
        public LTCBot(User user, HttpClient httpClient, string sessionPath = "Sessions", int captchaLimit = 3)
        {
            User            = user;
            this.httpClient = httpClient;
            currentState    = new BotStateInfo(captchaLimit: captchaLimit);

            if (!Directory.Exists(sessionPath))
            {
                Directory.CreateDirectory(sessionPath);
            }

            client = new TelegramClient(User.ApiId, User.ApiHash, new FileSessionStore(new DirectoryInfo(sessionPath)), User.Phone);
        }
예제 #3
0
        private async Task TryToWithdraw(LTCBot ltcBot, BotStateInfo result)
        {
            if (result.BalanceOfBot > 0.0004m)
            {
                try
                {
                    await ltcBot.Withdraw();

                    OnWithdrawed?.Invoke(result.BalanceOfBot);
                    withdrowedFromSession += result.BalanceOfBot;
                    result.BalanceOfBot    = 0;
                }
                catch (Exception e)
                {
                    OnBotException?.Invoke(e);
                }
            }
        }
예제 #4
0
 private void UpdateSessionInfo(SessionInfo sessionInfo, BotStateInfo result)
 {
     sessionInfo.CountOfUsers++;
     sessionInfo.Earning        += result.EarningFromBotSession;
     sessionInfo.WithdrawedCount = withdrowedFromSession;
 }
예제 #5
0
 private static void BotHolder_OnShowBotResult(BotStateInfo result)
 {
     WriteWithColor("Stop reason: " + result.StopReason, ConsoleColor.Green);
     WriteWithColor("Count of processed sites: " + result.SiteCount.ToString(), ConsoleColor.Green);
     WriteWithColor("Balance: " + result.BalanceOfBot.ToString(), ConsoleColor.Green);
 }