internal void UnregisterAccount(Message message, string text)
        {
            Bot = new TelegramBot(accessToken: ConfigurationManager.AppSettings[name: "accessKey"]);

            // set up regex sequence matcher
            var address = new Regex(
                pattern: @"[Nn]{1,1}[a-zA-Z0-9]{39,39}");

            // extract any valid addresses
            var result = address.Matches(input: StringUtils.GetResultsWithoutHyphen(text)).Cast <Match>().Select(selector: m => m.Value).ToList();

            var userNodes = NodeUtils.GetNodeByUser(chatId: message.Chat.Id);

            foreach (var acc in result)
            {
                SummaryUtils.DeleteHbSummaryForUser(account: acc, chatId: message.Chat.Id);
                SummaryUtils.DeleteTxSummaryForUser(account: acc, chatId: message.Chat.Id);
            }

            // delete any valid addresses
            AccountUtils.DeleteAccount(chatId: message.Chat.Id,
                                       accounts: result.Where(predicate: x => userNodes.All(predicate: y => y.IP != x))
                                       .ToList());

            // notify user
            var reqAction = new SendMessage(chatId: message.Chat.Id, text: result.Aggregate(seed: "Addresses unregistered: \n", func: (current, n) => current + StringUtils.GetResultsWithHyphen(n) + "\n"));

            Bot.MakeRequestAsync(request: reqAction);
        }
 private void btnFindDB_Click(object sender, EventArgs e)
 {
     SummaryUtils.FindDatDB(lvDatFiles);
 }
 private void btnRenameDat_Click(object sender, EventArgs e)
 {
     SummaryUtils.RenameAsMgf(lvDatFiles);
 }
 private void btnMgfFiles_Click(object sender, EventArgs e)
 {
     SummaryUtils.FindMgf(lvDatFiles);
 }
 private void btnRenameDat_Click(object sender, EventArgs e)
 {
     SummaryUtils.RenameAsXtandemSourceXml(lvDatFiles);
 }
 private void btnMgfFiles_Click(object sender, EventArgs e)
 {
     SummaryUtils.FindXtandemSourceXml(lvDatFiles);
 }
Beispiel #7
0
        private static async void ScanTransactions(Account userAccount)
        {
            try
            {
                var tClient = new TransactionDataClient(Con);

                var request = tClient.BeginGetAllTransactions(ar =>
                {
                    try
                    {
                        var txs = ar.Content.data.Where(e => e.transaction?.otherTrans?.type == 257 || e.transaction?.type == 257).ToList();


                        foreach (var t in txs)
                        {
                            if (userAccount.LastTransactionHash == txs?[0]?.meta.innerHash?.data || userAccount.LastTransactionHash == txs?[0]?.meta?.hash?.data)
                            {
                                userAccount.LastTransactionHash = txs?[0].transaction.type == 4100 ? txs?[0]?.meta.innerHash?.data : txs?[0]?.meta?.hash?.data;

                                break;
                            }


                            if (userAccount.LastTransactionHash == t.meta?.hash?.data || userAccount.LastTransactionHash == t.meta.innerHash.data)
                            {
                                userAccount.LastTransactionHash = txs?[0].transaction.type == 4100 ? txs?[0]?.meta.innerHash?.data : txs?[0]?.meta?.hash?.data;
                                AccountUtils.UpdateAccount(usrAcc: userAccount);

                                break;
                            }

                            if (!userAccount.CheckTxs)
                            {
                                continue;
                            }

                            try
                            {
                                var summary = new AccountTxSummary
                                {
                                    AmountIn         = t.transaction.recipient == userAccount.EncodedAddress ? t.transaction.amount : 0,
                                    AmountOut        = t.transaction.recipient != userAccount.EncodedAddress ? t.transaction.amount : 0,
                                    MonitoredAccount = userAccount.EncodedAddress,
                                    Recipient        = t.transaction.type == 257 ? t.transaction.recipient : t.transaction.otherTrans.recipient,
                                    Sender           = AddressEncoding.ToEncoded(network: 0x68, publicKey: new PublicKey(key: t.transaction.type == 257 ? t.transaction.signer : t.transaction.otherTrans.signer)),
                                    DateOfInput      = DateTime.Now,
                                    OwnedByUser      = userAccount.OwnedByUser
                                };

                                Notify(a: userAccount, t: t);

                                SummaryUtils.AddTxSummary(s: summary);
                            }
                            catch (Exception e)
                            {
                                if (e.Message.Contains("blocked"))
                                {
                                    AccountUtils.DeleteAccountsByUser(userAccount.OwnedByUser);

                                    NodeUtils.DeleteUserNodes(userAccount.OwnedByUser);

                                    UserUtils.DeleteUser(userAccount.OwnedByUser);
                                }
                                else
                                {
                                    Console.WriteLine("Trans scanner line 112: " + e.StackTrace);
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(value: e);

                        if (e.Message.Contains("blocked"))
                        {
                            AccountUtils.DeleteAccountsByUser(userAccount.OwnedByUser);

                            NodeUtils.DeleteUserNodes(userAccount.OwnedByUser);

                            UserUtils.DeleteUser(userAccount.OwnedByUser);
                        }
                    }
                }, userAccount.EncodedAddress);

                request.AsyncWaitHandle.WaitOne();
            }
            catch (Exception e)
            {
                Console.WriteLine("Transaction scanner line 136: " + e.StackTrace);
            }
        }
        private static void ScanBlocks(Account userAccount)
        {
            try
            {
                var aClient = new AccountClient(Con);

                aClient.BeginGetHarvestingInfo(ar =>
                {
                    try
                    {
                        if (ar.Content.data != null)
                        {
                            foreach (var t in ar.Content.data)
                            {
                                if (ar.Content.data.Count <= 0 || userAccount.LastBlockHarvestedHeight >= t?.height)
                                {
                                    continue;
                                }

                                userAccount.LastBlockHarvestedHeight = t?.height;

                                AccountUtils.UpdateAccount(
                                    usrAcc: userAccount);

                                var hb = new AccountHarvestedSummary()
                                {
                                    BlockHeight      = t.height,
                                    FeesEarned       = t.totalFee,
                                    MonitoredAccount = userAccount.EncodedAddress,
                                    DateOfInput      = DateTime.Now,
                                    OwnedByUser      = userAccount.OwnedByUser
                                };

                                try
                                {
                                    if (userAccount.CheckBlocks)
                                    {
                                        SummaryUtils.AddHBSummary(s: hb);
                                        Notify(usrAcc: userAccount, hrvData: t);
                                    }
                                }
                                catch (Exception e)
                                {
                                    if (e.Message.Contains("blocked"))
                                    {
                                        AccountUtils.DeleteAccountsByUser(userAccount.OwnedByUser);

                                        NodeUtils.DeleteUserNodes(userAccount.OwnedByUser);

                                        UserUtils.DeleteUser(userAccount.OwnedByUser);
                                    }

                                    break;
                                }
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(value: e);
                    }
                }, userAccount.EncodedAddress);
            }
            catch (Exception e)
            {
                Console.WriteLine(value: e);
            }
        }
 private void btnFindDatabase_Click(object sender, EventArgs e)
 {
     SummaryUtils.FindPFindDatabase(lvDatFiles);
 }
        internal void GetSummary(string text, Chat chat)
        {
            int days;

            switch (text)
            {
            case "/dailySummary":
                days = 1;
                break;

            case "/sevenDaySummary":
                days = 7;
                break;

            case "/thirtyOneDaySummary":
                days = 31;
                break;

            default:
                try
                {
                    days = int.Parse(s: Regex.Replace(input: text.Substring(startIndex: text.LastIndexOf(value: ':') + 1), pattern: @"[\s]+", replacement: string.Empty));

                    break;
                }
                catch (Exception)
                {
                    var reqAction = new SendMessage(chatId: chat.Id, text: "Please insert the number of days for which you want a summary. eg. \"/customSummary: 4\"");

                    var Bot = new TelegramBot(accessToken: ConfigurationManager.AppSettings[name: "accessKey"]);

                    Bot.MakeRequestAsync(request: reqAction);

                    return;
                }
            }

            var acc = AccountUtils.GetAccountByUser(chatId: chat.Id);

            var nodes = NodeUtils.GetAllNodes();

            foreach (var address in acc)
            {
                SuperNode nodeAlias = null;

                try
                {
                    nodeAlias = nodes.Single(predicate: x => x.DepositAddress == address.EncodedAddress);
                }
                catch (Exception)
                {
                }


                var txsummaries = SummaryUtils.GetTxSummary(account: address.EncodedAddress, days: days, chatId: chat.Id);

                var txIn = txsummaries.Count(predicate: e => address.EncodedAddress == e.Recipient);

                var txOut = txsummaries.Count(predicate: e => address.EncodedAddress != e.Recipient);

                var txValueIn = txsummaries.Where(predicate: x => txsummaries.Any(predicate: y => y.AmountIn > 0)).ToList()
                                .Select(selector: e => e.AmountIn)
                                .Sum() / 1000000;

                var txValueOut = txsummaries.Where(predicate: x => txsummaries.Any(predicate: y => y.AmountIn > 0)).ToList()
                                 .Select(selector: e => e.AmountOut)
                                 .Sum() / 1000000;

                var snPayout = txsummaries.Where(predicate: x => txsummaries.Any(predicate: y => y.AmountIn > 0)).ToList()
                               .Select(selector: e => e.AmountIn)
                               .Where(
                    predicate: x =>
                    txsummaries.Any(
                        predicate: y =>
                        y.Sender ==
                        AddressEncoding.ToEncoded(network: 0x68,
                                                  publicKey: new PublicKey(
                                                      key: "d96366cdd47325e816ff86039a6477ef42772a455023ccddae4a0bd5d27b8d23"))))
                               .Sum() / 1000000;

                var accountBalanceDifference = txValueIn - txValueOut;
                var totalTxs = txIn + txOut;

                var hbsummaries = SummaryUtils.GetHBSummary(account: address.EncodedAddress, days: days, chatId: chat.Id);

                var totalFees = hbsummaries.Where(predicate: x => hbsummaries.Any(predicate: y => y.FeesEarned > 0)).ToList()
                                .Select(selector: e => e.FeesEarned)
                                .Sum() / 1000000;

                var totalBlocks = hbsummaries.Count(predicate: e => address.EncodedAddress == e.MonitoredAccount);

                var reqAction = new SendMessage(chatId: chat.Id,
                                                text: "Summary for account: \n" + StringUtils.GetResultsWithHyphen(address.EncodedAddress) + "\n" +
                                                (nodeAlias != null ? ("Deposit address for node: " + nodeAlias.Alias + "\n") : "") +
                                                "Transactions in: " + txIn + "\n" +
                                                "Transactions out: " + txOut + "\n" +
                                                "Total transactions: " + totalTxs + "\n" +
                                                "Transactions value in: " + txValueIn + " XEM\n" +
                                                "Transactions value out: " + txValueOut + " XEM\n" +
                                                "Transactions value total: " + (txValueIn - txValueOut) + " XEM\n" +
                                                "Total supernode payout: " + snPayout + " XEM\n" +
                                                "Harvested blocks: " + totalBlocks + "\n" +
                                                "Total harvested fees: " + totalFees + " XEM\n" +
                                                "Change in balance: " + (accountBalanceDifference + totalFees) + " XEM\n" +
                                                "Final balance: " + aClient.EndGetAccountInfo(aClient.BeginGetAccountInfoFromAddress(address.EncodedAddress))
                                                .Account.Balance / 1000000 + "\n" +
                                                "http://explorer.ournem.com/#/s_account?account=" +
                                                address.EncodedAddress
                                                );

                var Bot = new TelegramBot(accessToken: ConfigurationManager.AppSettings[name: "accessKey"]);

                Bot.MakeRequestAsync(request: reqAction);
            }
        }