Kaynağa Gözat

Добавил функцию вывода последней выплаты и удаление записей выплат при получении новой #EBT-24

GandonKur 4 yıl önce
ebeveyn
işleme
f8ce7d8e76
1 değiştirilmiş dosya ile 62 ekleme ve 1 silme
  1. 62 1
      EthermineBotTelegram/Program.cs

+ 62 - 1
EthermineBotTelegram/Program.cs

@@ -139,6 +139,11 @@ namespace EthermineBotTelegram
                         case "/help":
                             await SendHelp(e.Message.Chat);
                             break;
+                        
+                        // send last payout
+                        case "/lastpayout":
+                            await GetLastPayout(e.Message.Chat);
+                            break;
 
                         default:
                             //await Usage(message);
@@ -385,6 +390,7 @@ namespace EthermineBotTelegram
                     {
                         Botdb.workers.RemoveRange(Botdb.workers.Where(w=> w.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));
                     }
                     
@@ -520,6 +526,7 @@ namespace EthermineBotTelegram
                                                 //removing old records
                                                 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.payouts.RemoveRange(Botdb.payouts.Where(p=> p.wallet == newPayoutRecord.wallet));
                                             }
                                             else
                                             {
@@ -620,10 +627,64 @@ namespace EthermineBotTelegram
                         +    $"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"
                         +    $"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"
                         +    $"\"/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");
         }
+
+        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);
+            }
+        }
     }
 }