|
@@ -139,6 +139,11 @@ namespace EthermineBotTelegram
|
|
case "/help":
|
|
case "/help":
|
|
await SendHelp(e.Message.Chat);
|
|
await SendHelp(e.Message.Chat);
|
|
break;
|
|
break;
|
|
|
|
+
|
|
|
|
+ // send last payout
|
|
|
|
+ case "/lastpayout":
|
|
|
|
+ await GetLastPayout(e.Message.Chat);
|
|
|
|
+ break;
|
|
|
|
|
|
default:
|
|
default:
|
|
//await Usage(message);
|
|
//await Usage(message);
|
|
@@ -385,6 +390,7 @@ namespace EthermineBotTelegram
|
|
{
|
|
{
|
|
Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.wallet == deletableWallet));
|
|
Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.wallet == deletableWallet));
|
|
Botdb.miners.RemoveRange(Botdb.miners.Where(m=> m.wallet == deletableWallet));
|
|
Botdb.miners.RemoveRange(Botdb.miners.Where(m=> m.wallet == deletableWallet));
|
|
|
|
+ Botdb.payouts.RemoveRange(Botdb.payouts.Where(p=> p.wallet == deletableWallet));
|
|
Botdb.users.RemoveRange(Botdb.users.Where(u=> u.chat_id == e.Id));
|
|
Botdb.users.RemoveRange(Botdb.users.Where(u=> u.chat_id == e.Id));
|
|
}
|
|
}
|
|
|
|
|
|
@@ -520,6 +526,7 @@ namespace EthermineBotTelegram
|
|
//removing old records
|
|
//removing old records
|
|
Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.wallet == newPayoutRecord.wallet && w.time < newPayoutRecord.time));
|
|
Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.wallet == newPayoutRecord.wallet && w.time < newPayoutRecord.time));
|
|
Botdb.miners.RemoveRange(Botdb.miners.Where(m=> m.wallet == newPayoutRecord.wallet && m.time < newPayoutRecord.time));
|
|
Botdb.miners.RemoveRange(Botdb.miners.Where(m=> m.wallet == newPayoutRecord.wallet && m.time < newPayoutRecord.time));
|
|
|
|
+ Botdb.payouts.RemoveRange(Botdb.payouts.Where(p=> p.wallet == newPayoutRecord.wallet));
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
@@ -620,10 +627,64 @@ namespace EthermineBotTelegram
|
|
+ $"1) \"/start\" - it will add you to database\n"
|
|
+ $"1) \"/start\" - it will add you to database\n"
|
|
+ $"2) \"/setwallet <wallet>\" - it will set wallet for tracking, bot will start to add info about your miner and workers to database\n"
|
|
+ $"2) \"/setwallet <wallet>\" - it will set wallet for tracking, bot will start to add info about your miner and workers to database\n"
|
|
+ $"3) \"/actual\" - it will send you up to date data about your worker\n"
|
|
+ $"3) \"/actual\" - it will send you up to date data about your worker\n"
|
|
- + $"4) \"/stop\" - it will clear all data about you from database\n"
|
|
|
|
|
|
+ + $"4) \"/lastpayout\" - it will send you last payout data with calculated worker unpaid for that period if avaliable\n"
|
|
|
|
+ + $"5) \"/stop\" - it will clear all data about you from database\n"
|
|
+ $"Additional commands:\n"
|
|
+ $"Additional commands:\n"
|
|
+ $"\"/rate\" - get actual ETH and BTC rate from ethermine\n"
|
|
+ $"\"/rate\" - get actual ETH and BTC rate from ethermine\n"
|
|
+ $"\"/actual <wallet>\" - get up to date data about any wallet without unpaid per worker\n");
|
|
+ $"\"/actual <wallet>\" - get up to date data about any wallet without unpaid per worker\n");
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public static async Task GetLastPayout(Chat e)
|
|
|
|
+ {
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ var wallet = Botdb.users.Where(u => u.chat_id == e.Id).Select(u => u.wallet).FirstOrDefault();
|
|
|
|
+ if (wallet != null)
|
|
|
|
+ {
|
|
|
|
+ var payoutTime = Botdb.payouts.Where(p => p.wallet == wallet).OrderByDescending(p => p.time)
|
|
|
|
+ .Select(p => p.time).DefaultIfEmpty(0).Max();
|
|
|
|
+ var dbPayoutRecords = Botdb.payouts.Where(p => p.wallet == wallet && p.time == payoutTime)
|
|
|
|
+ .OrderByDescending(p => p.time);
|
|
|
|
+ if (dbPayoutRecords.FirstOrDefault() != null)
|
|
|
|
+ {
|
|
|
|
+ string message = "Payout date: " +
|
|
|
|
+ DateTimeOffset.FromUnixTimeSeconds(dbPayoutRecords.First().time).LocalDateTime
|
|
|
|
+ .ToString("f") + "\n" + "Amount: " +
|
|
|
|
+ Math.Round(dbPayoutRecords.First().amount / 1000000000000000000D, 5) + " ETH\n";
|
|
|
|
+ foreach (var payoutRecord in dbPayoutRecords)
|
|
|
|
+ {
|
|
|
|
+ message +=
|
|
|
|
+ $"Worker {payoutRecord.worker} paid: {Math.Round(payoutRecord.worker_amount / 1000000D, 3)} ETH\n";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ message += "Data source: Bot database \n";
|
|
|
|
+ await botClient.SendTextMessageAsync(
|
|
|
|
+ chatId: e,
|
|
|
|
+ text: message);
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ var url = AppSettings.poolApiUrl + "/miner/" + wallet + "/payouts";
|
|
|
|
+ var payouts = JsonDownloader._download_serialized_json_data<JsonPayouts>(url);
|
|
|
|
+
|
|
|
|
+ await botClient.SendTextMessageAsync(
|
|
|
|
+ chatId: e,
|
|
|
|
+ text: "Payout date: " + DateTimeOffset.FromUnixTimeSeconds(payouts.data[0].paidOn).LocalDateTime.ToString("f") + "\n"
|
|
|
|
+ + "Amount: " + Math.Round(payouts.data[0].amount / 1000000000000000000D, 5) + " ETH\n"
|
|
|
|
+ + "Data source: Ethermine API \n");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ await botClient.SendTextMessageAsync(
|
|
|
|
+ chatId: e,
|
|
|
|
+ text: "Set wallet at first! Use /setwallet");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ catch (Exception exception)
|
|
|
|
+ {
|
|
|
|
+ await Console.Out.WriteLineAsync(exception.Message + "\n" + exception.StackTrace + "\n" + exception.StackTrace);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|