import datetime from jinja2 import Template from praw.models import Redditor from tinydb import TinyDB import bot_logger import config import crypto import lang import models import utils # buy an reddit gold account for one month def gold(reddit, msg, tx_queue, failover_time): user = models.User(msg.author.name) if user.is_registered(): gold_month = number_gold_credit() if msg.body.strip() == 'buy': # Number of month quantity = 1 # check if we have enough credits if not gold_month >= quantity: # store in db want an gold, when bot have new credits a PM can be send db = TinyDB(config.DATA_PATH + 'reddit_gold_empty.json') db.insert({ "user": user.username, "quantity": quantity, 'time': datetime.datetime.now().isoformat(), }) db.close() msg.reply(Template(lang.message_gold_no_more).render(username=user.username)) return False # check user confirmed balance is ok if user.get_balance_confirmed() >= config.price_reddit_gold: msg.reply(Template(lang.message_gold_no_enough_doge).render(username=user.username)) return False # send amount of one month of gold to address tx_id = crypto.tip_user(user.address, config.gold_address, config.price_reddit_gold, tx_queue, failover_time) if tx_id: # send gold reddit Redditor(reddit, user.username).gild(months=quantity) # update gold reddit table store_user_buy(user, quantity, tx_id) # update user history models.HistoryStorage.add_to_history(user, sender=user.username, receiver="Reddit", amount=config.price_reddit_gold, action="buy reddit gold") # send succes message msg.reply(Template(lang.message_buy_gold_success).render(username=user.username)) else: # send error message msg.reply(Template(lang.message_buy_gold_error).render(username=user.username)) elif msg.body.strip() == 'remind': # store in db want an gold, when bot have new credits a PM can be send db = TinyDB(config.DATA_PATH + 'reddit_gold_remind.json') db.insert({ "user": user.username, "remind": "True", 'time': datetime.datetime.now().isoformat(), }) db.close() else: # send info on reddit gold msg.reply(Template(lang.message_buy_gold).render(username=user.username, gold_credit=gold_month, price=config.price_reddit_gold)) else: bot_logger.logger.info('user %s not registered (command : donate) ' % user.username) msg.reply(Template(lang.message_need_register + lang.message_footer).render(username=user.username)) def number_gold_credit(): credit = 0 db = TinyDB(config.DATA_PATH + 'reddit_gold.json') data = db.all() db.close() for gold in data: if gold['status'] == "buy": # user have buy credits credit = credit - int(gold['quantity']) if gold['status'] == "refill": # user have buy credits credit = credit + int(gold['quantity']) return credit def store_user_buy(user, quantity, tx_id): db = TinyDB(config.DATA_PATH + 'reddit_gold.json') db.insert({ "user_buyer": user.username, "quantity": quantity, "price": config.price_reddit_gold, "currency": 'doge', "amount": config.price_reddit_gold * quantity, "usd_price": utils.get_coin_value(1, 'doge', 8), "total_price": utils.get_coin_value(config.price_reddit_gold * quantity, 'doge', 2), 'tx_id': tx_id, 'status': "buy", 'time': datetime.datetime.now().isoformat(), }) db.close()