def execute(self, bot, update, args): username = update.effective_user.username if not Bismuth.wallet_exists(username): msg = "Accept terms and create a wallet first with:\n/accept" update.message.reply_text(msg) return if len(args) < 2 or len(args) > 4: update.message.reply_text(text=f"Usage:\n{self.get_usage()}", parse_mode=ParseMode.MARKDOWN) return send_to = args[0] amount = args[1] operation = "" if len(args) > 2: operation = args[2] data = "" if len(args) > 3: data = args[3] if not BismuthUtil.valid_address(send_to): update.message.reply_text( text=f"{emo.ERROR} Bismuth address is not valid", parse_mode=ParseMode.MARKDOWN) return if not utl.is_numeric(amount) or float(amount) < 0: update.message.reply_text( text=f"{emo.ERROR} Specified amount is not valid", parse_mode=ParseMode.MARKDOWN) return message = update.message.reply_text(text=f"{emo.WAIT} Sending...", parse_mode=ParseMode.MARKDOWN) bis = Bismuth(username) bis.load_wallet() trx = bis.send(send_to, amount, operation, data) url = f"{self.BLCK_EXPL_URL}{utl.encode_url(trx)}" if trx: bot.edit_message_text( chat_id=message.chat_id, message_id=message.message_id, text=f"{emo.DONE} Done!\n[View on Block Explorer]({url})\n" f"(Available after ~1 minute)", parse_mode=ParseMode.MARKDOWN) else: bot.edit_message_text( chat_id=message.chat_id, message_id=message.message_id, text=f"{emo.ERROR} Not able to send Transaction")
def _callback(self, bot, update): query = update.callback_query username = update.effective_user["username"] sql = self.get_resource("select_bisurl.sql") res = self.execute_sql(sql, query.data) user = res["data"][0][1] address = res["data"][0][2] amount = res["data"][0][3] operation = res["data"][0][4] message = res["data"][0][5] if user == username: msg = f"{emo.WAIT} Processing..." bot.answer_callback_query(query.id, msg) bis = Bismuth(user) bis.load_wallet() try: # Execute sending transaction via BISURL trx = bis.send(address, amount, operation, message) except Exception as e: error = f"Error sending via BISURL {amount} BIS " \ f"from @{user} " \ f"to {address} " \ f"with operation '{operation}' " \ f"and message '{message}': {e}" logging.error(error) trx = None if trx: logging.debug(f"Sent via BISURL {amount} BIS " f"from @{user} " f"to {address} " f"with operation '{operation}' " f"and message '{message}'") url = f"{self.BLCK_EXPL_URL}{utl.encode_url(trx)}" # Send success message query.edit_message_text( f"{emo.DONE} DONE!\n[View on Block Explorer]({url})\n" f"(Available after ~1 minute)", parse_mode=ParseMode.MARKDOWN) else: # Send error message query.edit_message_text( f"{emo.ERROR} Sending via BISURL not executed. Something went wrong..." ) else: msg = f"{emo.ERROR} Wrong user" bot.answer_callback_query(query.id, msg)
def execute(self, bot, update, args): user = update.effective_user.username if len(args) < 2 or len(args) > 4: update.message.reply_text(text=f"Usage:\n{self.get_usage()}", parse_mode=ParseMode.MARKDOWN) return address = args[0] amount = args[1] operation = "" if len(args) > 2: operation = args[2] data = "" if len(args) > 3: data = args[3] # Check if provided amount is valid if not utl.is_numeric(amount) or float(amount) < 0: update.message.reply_text( text=f"{emo.ERROR} Specified amount is not valid", parse_mode=ParseMode.MARKDOWN) return # Check if provided address is valid if not BismuthUtil.valid_address(address): update.message.reply_text( text=f"{emo.ERROR} Provided address is not valid", parse_mode=ParseMode.MARKDOWN) return # Check if user has a wallet if not Bismuth.wallet_exists(user): msg = "Accept terms and create a wallet first with:\n/accept" update.message.reply_text(msg) return message = update.message.reply_text(text=f"{emo.WAIT} Processing...", parse_mode=ParseMode.MARKDOWN) bis = Bismuth(user) bis.load_wallet() balance = bis.get_balance() total = float(amount) + BismuthUtil.fee_for_tx(data) # Check for sufficient funds if not utl.is_numeric(balance) or float(balance) < total: bot.edit_message_text(chat_id=message.chat_id, message_id=message.message_id, text=f"{emo.ERROR} Not enough funds") return try: # Execute withdrawing trx = bis.send(address, amount, operation, data) except Exception as e: error = f"Error withdrawing {amount} BIS " \ f"from @{user} " \ f"to {address} " \ f"with '{operation}' " \ f"and '{data}': {e}" logging.error(error) self.notify(error) trx = None if trx: logging.debug(f"Withdraw {amount} BIS " f"from @{user} " f"to {address} " f"with '{operation}' " f"and '{data}'") # Save withdrawing to database insert = self.get_resource("insert_withdraw.sql") self.execute_sql(insert, user, address, amount) url = f"{self.BLCK_EXPL_URL}{utl.encode_url(trx)}" # Send success message bot.edit_message_text( chat_id=message.chat_id, message_id=message.message_id, text=f"{emo.DONE} DONE!\n[View on Block Explorer]({url})\n" f"(Available after ~1 minute)", parse_mode=ParseMode.MARKDOWN) else: # Send error message bot.edit_message_text( chat_id=message.chat_id, message_id=message.message_id, text= f"{emo.ERROR} Withdrawing not executed. Something went wrong..." )