def self_checks(self): """ Run self-checks before starting the bot """ # Ensure bot is a registered user b = ctb_user.CtbUser(name=self.conf.reddit.auth.user.lower(), ctb=self) if not b.is_registered(): b.register() #self.bot = b # Ensure (total pending tips) < (CointipBot's balance) for c in self.coins: ctb_balance = b.get_balance(coin=c, kind='givetip') pending_tips = float(0) actions = ctb_action.get_actions(atype='givetip', state='pending', coin=c, ctb=self) for a in actions: pending_tips += a.coinval if (ctb_balance - pending_tips) < -0.000001: raise Exception( "CointipBot::self_checks(): CointipBot's %s balance (%s) < total pending tips (%s)" % (c.upper(), ctb_balance, pending_tips)) # Ensure coin balances are positive for c in self.coins: b = float(self.coins[c].conn.getbalance()) if b < 0: raise Exception( "CointipBot::self_checks(): negative balance of %s: %s" % (c, b)) # Ensure user accounts are intact and balances are not negative sql = "SELECT username FROM t_users ORDER BY username" for mysqlrow in self.db.execute(sql): u = ctb_user.CtbUser(name=mysqlrow['username'], ctb=self) if not u.is_registered(): raise Exception( "CointipBot::self_checks(): user %s is_registered() failed" % mysqlrow['username']) # for c in vars(self.coins): # if u.get_balance(coin=c, kind='givetip') < 0: # raise Exception("CointipBot::self_checks(): user %s %s balance is negative" % (mysqlrow['username'], c)) return True
def expire_pending_tips(self): """ Decline any pending tips that have reached expiration time limit """ # Calculate timestamp seconds = int(self.conf.misc.times.expire_pending_hours * 3600) created_before = time.mktime(time.gmtime()) - seconds counter = 0 # Get expired actions and decline them for a in ctb_action.get_actions(atype='givetip', state='pending', created_utc='< ' + str(created_before), ctb=self): a.expire() counter += 1 # Done return (counter > 0)
def self_checks(self): """ Run self-checks before starting the bot """ # Ensure bot is a registered user b = ctb_user.CtbUser(name=self.conf.reddit.auth.user.lower(), ctb=self) if not b.is_registered(): b.register() # Ensure (total pending tips) < (CointipBot's balance) for c in self.coins: ctb_balance = b.get_balance(coin=c, kind="givetip") pending_tips = float(0) actions = ctb_action.get_actions(atype="givetip", state="pending", coin=c, ctb=self) for a in actions: pending_tips += a.coinval if (ctb_balance - pending_tips) < -0.000001: raise Exception( "CointipBot::self_checks(): CointipBot's %s balance (%s) < total pending tips (%s)" % (c.upper(), ctb_balance, pending_tips) ) # Ensure coin balances are positive for c in self.coins: b = float(self.coins[c].conn.getbalance()) if b < 0: raise Exception("CointipBot::self_checks(): negative balance of %s: %s" % (c, b)) # Ensure user accounts are intact and balances are not negative sql = "SELECT username FROM t_users ORDER BY username" for mysqlrow in self.db.execute(sql): u = ctb_user.CtbUser(name=mysqlrow["username"], ctb=self) if not u.is_registered(): raise Exception("CointipBot::self_checks(): user %s is_registered() failed" % mysqlrow["username"]) # for c in vars(self.coins): # if u.get_balance(coin=c, kind='givetip') < 0: # raise Exception("CointipBot::self_checks(): user %s %s balance is negative" % (mysqlrow['username'], c)) return True