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); }
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); } }