diff --git a/run.py b/run.py index ed840a1..c82b1bf 100644 --- a/run.py +++ b/run.py @@ -1,4 +1,4 @@ -from telegram.ext import Updater, CommandHandler, MessageHandler, Filters +from telegram.ext import Updater, CommandHandler from telegram import ParseMode from block_io import BlockIo, BlockIoAPIError import logging @@ -12,22 +12,28 @@ NETWORK = os.environ['NETWORK'] # Logging logging.basicConfig(level=logging.ERROR, - format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') + format='%(asctime)s - %(name)s - %(levelname)s - \ + %(message)s') # Exceptions + class NoAccountError(Exception): pass + class NotEnoughDoge(Exception): pass + class AccountExisting(Exception): pass + class NotValidUnit(Exception): pass + # BlockIO version = 2 @@ -35,13 +41,16 @@ block_io = BlockIo(BLOCK_IO_API_KEY, BLOCK_IO_PIN, version) # Core functions + def get_balance(account): try: response = block_io.get_address_by(label=account) except BlockIoAPIError: raise NoAccountError(account) else: - return (float(response['data']['available_balance']), float(response['data']['pending_received_balance'])) + return (float(response['data']['available_balance']), + float(response['data']['pending_received_balance'])) + def create_address(account): try: @@ -51,6 +60,7 @@ def create_address(account): else: return response['data']['address'] + def get_address(account): try: response = block_io.get_address_by(label=account) @@ -59,20 +69,28 @@ def get_address(account): else: return response['data']['address'] + def transaction(sender, receiver, amount): try: if get_balance(sender)[0] > amount: - address_receiver = get_address(receiver) - return block_io.withdraw_from_labels(amounts=amount, from_labels=sender, to_labels=receiver, priority="low") + get_address(receiver) + return block_io.withdraw_from_labels(amounts=amount, + from_labels=sender, + to_labels=receiver, + priority="low") else: raise NotEnoughDoge except NoAccountError: raise + def address_transaction(account, address, amount): try: if get_balance(account)[0] > amount: - return block_io.withdraw_from_labels(amounts=amount, from_labels=account, to_addresses=address, priority="low") + return block_io.withdraw_from_labels(amounts=amount, + from_labels=account, + to_addresses=address, + priority="low") else: return NotEnoughDoge except NoAccountError: @@ -80,8 +98,12 @@ def address_transaction(account, address, amount): # Telegram functions + def start(bot, update): - bot.send_message(chat_id=update.message.chat_id, text="Bark ! Je suis un tipbot Dogecoin ! \n\n Pour commencer envoyez moi /register") + bot.send_message(chat_id=update.message.chat_id, + text="Bark ! Je suis un tipbot Dogecoin ! \n\n \ + Pour commencer envoyez moi /register") + def dogetip(bot, update, args): try: @@ -89,11 +111,13 @@ def dogetip(bot, update, args): unit = args[1] destinataire = args[2][1:] except (IndexError, ValueError): - bot.send_message(chat_id=update.message.chat_id, text="Syntaxe : /dogetip xxx doge @destinataire") + bot.send_message(chat_id=update.message.chat_id, + text="Syntaxe : /dogetip xxx doge @destinataire") else: try: if unit == "doge": - response = transaction(update.message.from_user.username, destinataire, montant) + response = transaction(update.message.from_user.username, + destinataire, montant) else: raise NotValidUnit(unit) except NotEnoughDoge: @@ -106,28 +130,42 @@ def dogetip(bot, update, args): else: txid = response['data']['txid'] message = '🚀 Transaction effectuée 🚀\n\n' \ - + str(montant) + ' ' + NETWORK + '\n' \ - + '@' + update.message.from_user.username + ' → @' + destinataire + '\n\n' \ - + 'Voir la transaction' + + str(montant) + ' ' + NETWORK + '\n' \ + + '@' + update.message.from_user.username + ' → @' \ + + destinataire + '\n\n' \ + + 'Voir la transaction' + + bot.send_message(chat_id=update.message.chat_id, + parse_mode=ParseMode.HTML, text=message) - bot.send_message(chat_id=update.message.chat_id, parse_mode=ParseMode.HTML, text=message) def register(bot, update): try: address = create_address(update.message.from_user.username) except AccountExisting: - bot.send_message(chat_id=update.message.chat_id, text="Vous avez déjà un compte") + bot.send_message(chat_id=update.message.chat_id, + text="Vous avez déjà un compte") else: bot.send_message(chat_id=update.message.chat_id, text=address) + def infos(bot, update): try: address = get_address(update.message.from_user.username) - balance, unconfirmed_balance = get_balance(update.message.from_user.username) + balance, unconfirmed_balance = \ + get_balance(update.message.from_user.username) except NoAccountError as e: - bot.send_message(chat_id=update.message.chat_id, text="Vous n'avez pas de compte @" + str(e) + '\n\n' + "Utilisez /register pour démarrer") + bot.send_message(chat_id=update.message.chat_id, + text="Vous n'avez pas de compte @" + str(e) + '\n\n' + + "Utilisez /register pour démarrer") else: - bot.send_message(chat_id=update.message.chat_id, text=address + "\n\n" + str(balance) + " " + NETWORK + "\n" + str(unconfirmed_balance) + " " + NETWORK + " unconfirmed") + bot.send_message(chat_id=update.message.chat_id, + text=address + "\n\n" + + str(balance) + " " + NETWORK + "\n" + + str(unconfirmed_balance) + " " + + NETWORK + " unconfirmed") + def withdraw(bot, update, args): montant = int(args[0]) @@ -135,14 +173,16 @@ def withdraw(bot, update, args): address = args[2] if unit == "doge": - response = address_transaction(update.message.from_user.username, address, montant) + response = address_transaction(update.message.from_user.username, + address, montant) txid = response['data']['txid'] - bot.send_message(chat_id=update.message.chat_id, parse_mode=ParseMode.MARKDOWN, text="Transaction effectuée !\n [tx](https://chain.so/tx/" + NETWORK + "/" + txid + ")") + bot.send_message(chat_id=update.message.chat_id, + parse_mode=ParseMode.MARKDOWN, + text="Transaction effectuée !\n" + + "[tx](https://chain.so/tx/" + NETWORK + "/" + txid + ")") -def testing(bot, update): - bot.send_message(chat_id=update.message.chat_id, parse_mode=ParseMode.MARKDOWN, text="Bonjour @V_IAL") # Telegram initialisation @@ -164,8 +204,5 @@ dispatcher.add_handler(infos_handler) withdraw_handler = CommandHandler('withdraw', withdraw, pass_args=True) dispatcher.add_handler(withdraw_handler) -testing_handler = CommandHandler('testing', testing) -dispatcher.add_handler(testing_handler) - updater.start_polling() updater.idle()