Exemplo n.º 1
0
        /// <summary>
        /// Show User Balance
        /// </summary>
        /// <param name="sender"></param>
        /// <returns></returns>
        private async Task cmd_ShowUserBalance(ApplicationUser sender)
        {
            try
            {
                await _botService.Client.SendChatActionAsync(sender.TelegramId, ChatAction.Typing);

                coinQuoteCol = _appdb.CoinQuotes.Where(x => x.TimeStamp >= DateTime.Now.AddDays(-1)).ToList();
                var quote = LastAllQuote();

                if (!string.IsNullOrEmpty(sender.Address))
                {
                    RiseManager rm          = new RiseManager();
                    var         balance     = Math.Round(await rm.AccountBalanceAsync(sender.Address), 4);
                    var         strResponse = "<b>Current Balance for </b>@" + sender.UserName + Environment.NewLine +
                                              "Address: <b>" + sender.Address + "</b>" + Environment.NewLine +
                                              "Balance: <b>" + balance + " RISE </b>" + Environment.NewLine +
                                              "USD: <b>" + Math.Round(balance * quote.USDPrice, 4) + "$</b>";

                    if (string.IsNullOrEmpty(sender.UserName))
                    {
                        strResponse += Environment.NewLine + " Note: Please configure your Telegram UserName if you want to Receive <b>RISE</b>";
                    }

                    await _botService.Client.SendTextMessageAsync(sender.TelegramId, strResponse, ParseMode.Html);
                }
            }
            catch (Exception ex)
            {
                var log = new Log();
                log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                _appdb.Logger.Add(log);
                _appdb.SaveChangesAsync().Wait();
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// The ExecuteAsync
        /// </summary>
        /// <param name="cancellationToken">The cancellationToken<see cref="CancellationToken"/></param>
        /// <returns>The <see cref="Task"/></returns>
        public async Task ExecuteAsync(CancellationToken cancellationToken)
        {
            try
            {
                using (var scope = _scopeFactory.CreateScope())
                {
                    var dbContext = scope.ServiceProvider.GetRequiredService <ApplicationDbContext>();

                    var UsersLst = dbContext.ApplicationUsers.ToList <ApplicationUser>();
                    TipAccountStats.UsersCount = UsersLst.Count();

                    // List all account address
                    TipAccountStats.AddressLst = dbContext.ApplicationUsers.Select(x => x.Address).ToList();

                    // Reset the balance
                    double TotalBalance            = 0;
                    int    TotalTransactions       = 0;
                    long   TotalAmountTransactions = 0;

                    foreach (var account in UsersLst)
                    {
                        if (account.Address != null)
                        {
                            RiseManager rm = new RiseManager();

                            TotalBalance += await rm.AccountBalanceAsync(account.Address);

                            var tx = TransactionsFetcher.FetchAllUserTransactions(account.Address).Result.transactions.ToList();
                            TotalTransactions       += tx.Count();
                            TotalAmountTransactions += tx.Sum(x => x.amount / 100000000);

                            if (tx == null && account.UserName == null)
                            {
                                dbContext.Users.Remove(account);
                                dbContext.SaveChanges();
                            }
                        }
                    }

                    TipAccountStats.TotalBalance            = TotalBalance;
                    TipAccountStats.TotalTransactions       = TotalTransactions;
                    TipAccountStats.TotalAmountTransactions = TotalAmountTransactions;
                    TipAccountStats.LastGenerated           = DateTime.Now;
                }
            }
            catch (Exception e)
            {
                Console.Write(e.InnerException);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// Check Before Sending
        /// </summary>
        /// <param name="amount"></param>
        /// <param name="command"></param>
        /// <param name="numReceivers"></param>
        /// <param name="chatId"></param>
        /// <param name="appuser"></param>
        /// <returns></returns>
        private async Task <bool> cmd_preSend(double amount, string command, int numReceivers, long chatId, ApplicationUser appuser)
        {
            try
            {
                if (numReceivers > 30)
                {
                    await _botService.Client.SendTextMessageAsync(chatId, Emoji.Point_Up + " Please use a maximum of 30 users!", ParseMode.Html);

                    return(false);
                }

                if (numReceivers == 0)
                {
                    await _botService.Client.SendTextMessageAsync(chatId, Emoji.No_Good + " Sorry I did not find any user to send RISE :(", ParseMode.Html);

                    return(false);
                }

                if (amount <= 0.1)
                {
                    await _botService.Client.SendTextMessageAsync(chatId, Emoji.Scream_Cat + "It make no sense to " + command + " amount lower than 0.1! (network fees are 0.1 RISE!!)", ParseMode.Html);

                    return(false);
                }

                RiseManager rm = new RiseManager();

                var balance = await rm.AccountBalanceAsync(appuser.Address);

                if (balance < ((0.1 * numReceivers) + amount))
                {
                    await _botService.Client.SendTextMessageAsync(chatId, Emoji.Astonished + " Not enough RISE to " + command + " " + amount + " RISE to " + numReceivers + " users. RISE Balance:" + balance, ParseMode.Html);

                    return(false);
                }
            }
            catch (Exception ex)
            {
                var log = new Log();
                log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                _appdb.Logger.Add(log);
                _appdb.SaveChangesAsync().Wait();
                return(false);
            }

            return(true);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Withdraw coin
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="amount"></param>
        /// <param name="recipientId"></param>
        /// <returns></returns>
        private async Task cmd_Withdraw(ApplicationUser sender, double amount, string recipientId)
        {
            RiseManager rm = new RiseManager();

            try
            {
                if (amount > 0 && !string.IsNullOrEmpty(recipientId))
                {
                    await _botService.Client.SendChatActionAsync(sender.TelegramId, ChatAction.Typing);

                    var balance = await rm.AccountBalanceAsync(sender.Address);

                    if (balance >= (amount + 0.1))
                    {
                        var tx = await rm.CreatePaimentAsync(amount * 100000000, sender.GetSecret(), recipientId);

                        if (tx.success)
                        {
                            await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Successfully sent <b>" + amount + "</b> RISE to " + recipientId, ParseMode.Html);

                            var keyboard = new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("See Transaction", "https://explorer.rise.vision/tx/" + tx.transactionId));
                            await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Transaction Id:" + tx.transactionId + "", replyMarkup : keyboard);
                        }
                        else
                        {
                            await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Error withdrawing <b>" + amount + "</b> RISE to " + recipientId + " try to reduce the amount...", ParseMode.Html);
                        }
                    }
                    else
                    {
                        await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Not enough RISE to Withdraw <b>" + amount + "</b> RISE balance" + balance + " RISE", ParseMode.Html);
                    }
                }
                else
                {
                    await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Please specify amount and address ex: !withdraw 10 5953135380169360325R", ParseMode.Html);
                }
            }
            catch (Exception ex)
            {
                var log = new Log();
                log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                _appdb.Logger.Add(log);
                _appdb.SaveChangesAsync().Wait();
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Send Coin
        /// </summary>
        /// <param name="message"></param>
        /// <param name="sender"></param>
        /// <param name="amount"></param>
        /// <param name="destusers"></param>
        /// <param name="bannerMsg"></param>
        /// <returns></returns>
        private async Task cmd_Send(Message message, ApplicationUser sender, double amount, IReadOnlyCollection <ApplicationUser> destusers, string bannerMsg = "")
        {
            await _botService.Client.SendChatActionAsync(sender.TelegramId, ChatAction.Typing);

            var amountToSend = amount / destusers.Count;

            foreach (var destuser in destusers.Where(x => x.Address != null))
            {
                try
                {
                    var         secret = sender.GetSecret();
                    RiseManager rm     = new RiseManager();

                    var tx = await rm.CreatePaimentAsync(amountToSend * 100000000, secret, destuser.Address);

                    if (tx != null && tx.success)
                    {
                        await _botService.Client.SendTextMessageAsync(destuser.TelegramId, "You received " + amountToSend + " from @" + sender.UserName, ParseMode.Html);

                        var keyboard = new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("See Transaction", "https://explorer.rise.vision/tx/" + tx.transactionId));
                        await _botService.Client.SendTextMessageAsync(destuser.TelegramId, "Transaction Id:" + tx.transactionId, replyMarkup : keyboard);
                    }
                    else
                    {
                        var log = new Log();
                        log.LogMessage("Error processing transaction for " + destuser.UserName + " Id:" + destuser.TelegramId);
                        _appdb.Logger.Add(log);
                        _appdb.SaveChangesAsync().Wait();
                    }
                }
                catch (Exception ex)
                {
                    var log = new Log();
                    log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                    _appdb.Logger.Add(log);
                    _appdb.SaveChangesAsync().Wait();
                }
            }

            var destUsersUsername = string.Join(",", destusers.Select(x => "@" + x.UserName));
            await _botService.Client.SendTextMessageAsync(message.Chat.Id, destUsersUsername + " " + bannerMsg + "  @" + sender.UserName + " sent you <b>" + Math.Round(amountToSend, 3) + " RISE</b> :)", ParseMode.Html);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Withdraw coin
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="amount"></param>
        /// <param name="recipientId"></param>
        /// <returns></returns>
        private async Task cmd_Vote(ApplicationUser sender)
        {
            if (sender.UserName == "Dwildcash")
            {
                RiseManager rm = new RiseManager();

                try
                {
                    var balance = await rm.AccountBalanceAsync(sender.Address);

                    if (balance >= (1.1))
                    {
                        var tx = await rm.DelegateVoteAsync(sender.GetSecret());

                        if (tx.success)
                        {
                            await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Successfully voted for dtpool, thanks you!", ParseMode.Html);
                        }
                        else
                        {
                            await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Error voting...", ParseMode.Html);
                        }
                    }
                    else
                    {
                        await _botService.Client.SendTextMessageAsync(sender.TelegramId, "Not enough RISE to vote <b>1 requited</b> RISE balance: <b>" + balance + "</b>", ParseMode.Html);
                    }
                }
                catch (Exception ex)
                {
                    var log = new Log();
                    log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                    _appdb.Logger.Add(log);
                    _appdb.SaveChangesAsync().Wait();
                }
            }
        }
        /// <summary>
        /// Get user Async
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="telegramId"></param>
        /// <param name="flagMsgUpdate"></param>
        /// <returns></returns>
        public async Task <ApplicationUser> GetUserAsync(string userName, long telegramId = 0, bool flagMsgUpdate = false)
        {
            ApplicationUser appuser = null;

            try
            {
                if (telegramId != 0)
                {
                    appuser = _appdb.Users.OfType <ApplicationUser>().FirstOrDefault(x => x.TelegramId == telegramId);

                    try
                    {
                        // New user detected
                        if (appuser == null)
                        {
                            // Create new user
                            appuser = new ApplicationUser {
                                UserName = userName, TelegramId = telegramId, Role = "Member"
                            };
                            _appdb.Users.Add(appuser);
                        }
                    }
                    catch (Exception ex)
                    {
                        var log = new Log();
                        log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                        _appdb.Logger.Add(log);
                        _appdb.SaveChangesAsync().Wait();
                        return(null);
                    }

                    // Update Username
                    if (userName != appuser?.UserName)
                    {
                        appuser.UserName = userName;
                    }

                    // Create a wallet for everyone
                    if (appuser.Address == null)
                    {
                        RiseManager rm = new RiseManager();

                        // Create a Wallet for user
                        var accountresult = await rm.CreateAccount();

                        if (accountresult.success)
                        {
                            appuser.Address   = accountresult.account.Address;
                            appuser.Secret    = CryptoManager.EncryptStringAES(accountresult.account.secret, AppSettingsProvider.EncryptionKey);
                            appuser.PublicKey = accountresult.account.PublicKey;
                        }
                    }

                    // Flag update message
                    if (flagMsgUpdate)
                    {
                        appuser.MessageCount++;
                        appuser.LastMessage = DateTime.Now;
                    }

                    _appdb.SaveChanges();
                }
                else
                {
                    appuser = _appdb.Users.OfType <ApplicationUser>().FirstOrDefault(x => x.UserName == userName);
                }
            }
            catch (Exception ex)
            {
                var log = new Log();
                log.LogMessage(ex.Message + " " + ex.StackTrace + " " + ex.InnerException);
                _appdb.Logger.Add(log);
                _appdb.SaveChangesAsync().Wait();
            }

            return(appuser);
        }