diff --git a/files/classes/slots.py b/files/classes/slots.py index aa867ff60..43795f81e 100644 --- a/files/classes/slots.py +++ b/files/classes/slots.py @@ -2,107 +2,107 @@ from json.encoder import INFINITY import random def shuffle(stuff): - random.shuffle(stuff) - return stuff + random.shuffle(stuff) + return stuff class Slots: - command_word = "!slots" - minimum_bet = 5 - maximum_bet = INFINITY - payout_to_symbols = { - 2: ["👣", "🍀", "🌈", "⭐️"], - 3: ["🍎", "🔞", "⚛️", "☢️"], - 5: ["✡️", "⚔️", "🍆", "🍒"], - 12: ["🐱"] - } + command_word = "!slots" + minimum_bet = 5 + maximum_bet = INFINITY + payout_to_symbols = { + 2: ["👣", "🍀", "🌈", "⭐️"], + 3: ["🍎", "🔞", "⚛️", "☢️"], + 5: ["✡️", "⚔️", "🍆", "🍒"], + 12: ["🐱"] + } - def __init__(self, g): - self.db = g.db - - def check_for_slots_command(self, in_text, from_user, from_comment): - if self.command_word in in_text: - for word in in_text.split(): - if self.command_word in word: - try: - wager = word[len(self.command_word):] - wager_value = int(wager, base=10) + def __init__(self, g): + self.db = g.db + + def check_for_slots_command(self, in_text, from_user, from_comment): + if self.command_word in in_text: + for word in in_text.split(): + if self.command_word in word: + try: + wager = word[len(self.command_word):] + wager_value = int(wager, base=10) - if self.wager_is_valid(from_user, wager_value): - from_user.coins -= wager_value + if self.wager_is_valid(from_user, wager_value): + from_user.coins -= wager_value - payout = self.determine_payout() - symbols = self.build_symbols(payout) - text = self.build_text(wager_value, payout) - reward = wager_value * payout + payout = self.determine_payout() + symbols = self.build_symbols(payout) + text = self.build_text(wager_value, payout, from_user) + reward = wager_value * payout - from_user.coins += reward - self.db.add(from_user) + from_user.coins += reward + self.db.add(from_user) - from_comment.slots_result = f'{symbols} {text}' - self.db.add(from_comment) - - self.db.commit() - except: break + from_comment.slots_result = f'{symbols} {text}' + self.db.add(from_comment) + except: break - def wager_is_valid(self, from_user, wager): - if (wager < self.minimum_bet): - return False - elif (wager > self.maximum_bet): - return False - elif (wager > from_user.coins): - return False - else: - return True + def wager_is_valid(self, from_user, wager): + if (wager < self.minimum_bet): + return False + elif (wager > self.maximum_bet): + return False + elif (wager > from_user.coins): + return False + else: + return True - def determine_payout(self): - value = random.randint(0, 100) - - if value == 100: - return 12 - elif value >= 96: - return 5 - elif value >= 88: - return 3 - elif value >= 72: - return 2 - elif value >= 61: - return 1 - else: - return 0 + def determine_payout(self): + value = random.randint(0, 100) + + if value == 100: + return 12 + elif value >= 96: + return 5 + elif value >= 88: + return 3 + elif value >= 72: + return 2 + elif value >= 61: + return 1 + else: + return 0 - def build_symbols(self, for_payout): - all_symbols = [] - - for payout in self.payout_to_symbols: - for symbol in self.payout_to_symbols[payout]: - all_symbols.append(symbol) - - shuffle(all_symbols) - - if for_payout == 0: - return "".join([all_symbols[0], all_symbols[1], all_symbols[2]]) - elif for_payout == 1: - indices = shuffle([0, 1, 2]) - symbol_set = ["", "", ""] - [match_a, match_b, nonmatch] = indices - [matching_symbol, other_symbol] = all_symbols - symbol_set[match_a] = matching_symbol - symbol_set[match_b] = matching_symbol - symbol_set[nonmatch] = other_symbol - - return "".join(symbol_set) - else: - relevantSymbols = shuffle(self.payout_to_symbols[for_payout]) - symbol = relevantSymbols[0] - return "".join([symbol, symbol, symbol]) - - def build_text(self, wager_value, result): - if result == 0: - return f'Lost {wager_value} Coins' - elif result == 1: - return 'Broke Even' - elif result == 12: - return f'Jackpot! Won {wager_value * result} Coins' - else: - return f'Won {wager_value * result} Coins' - \ No newline at end of file + def build_symbols(self, for_payout): + all_symbols = [] + + for payout in self.payout_to_symbols: + for symbol in self.payout_to_symbols[payout]: + all_symbols.append(symbol) + + shuffle(all_symbols) + + if for_payout == 0: + return "".join([all_symbols[0], all_symbols[1], all_symbols[2]]) + elif for_payout == 1: + indices = shuffle([0, 1, 2]) + symbol_set = ["", "", ""] + [match_a, match_b, nonmatch] = indices + [matching_symbol, other_symbol] = all_symbols + symbol_set[match_a] = matching_symbol + symbol_set[match_b] = matching_symbol + symbol_set[nonmatch] = other_symbol + + return "".join(symbol_set) + else: + relevantSymbols = shuffle(self.payout_to_symbols[for_payout]) + symbol = relevantSymbols[0] + return "".join([symbol, symbol, symbol]) + + def build_text(self, wager_value, result, user): + if result == 0: + user.winnings -= wager_value + return f'Lost {wager_value} Coins' + elif result == 1: + return 'Broke Even' + elif result == 12: + user.winnings += wager_value * result + return f'Jackpot! Won {wager_value * result} Coins' + else: + user.winnings += wager_value * result + return f'Won {wager_value * result} Coins' \ No newline at end of file diff --git a/files/classes/user.py b/files/classes/user.py index 0fd6260bf..c86be7017 100644 --- a/files/classes/user.py +++ b/files/classes/user.py @@ -50,6 +50,7 @@ class User(Base): verifiedcolor = Column(String) marseyawarded = Column(Integer) longpost = Column(Integer) + winnings = Column(Integer, default=0) unblockable = Column(Boolean) bird = Column(Integer) email = deferred(Column(String)) diff --git a/files/routes/users.py b/files/routes/users.py index 959abc6dd..3ffddb52e 100644 --- a/files/routes/users.py +++ b/files/routes/users.py @@ -358,7 +358,15 @@ def leaderboard(v): pos13 = (pos13+1, users13[pos13][1]) except: pos13 = (len(users13)+1, 0) - return render_template("leaderboard.html", v=v, users1=users1, pos1=pos1, users2=users2, pos2=pos2, users3=users3, pos3=pos3, users4=users4, pos4=pos4, users5=users5, pos5=pos5, users6=users6, pos6=pos6, users7=users7, pos7=pos7, users9=users9_25, pos9=pos9, users10=users10, pos10=pos10, users11=users11, pos11=pos11, users12=users12, pos12=pos12, users13=users13_25, pos13=pos13) + users14 = users.order_by(User.winnings.desc()).limit(25).all() + sq = g.db.query(User.id, func.rank().over(order_by=User.winnings.desc()).label("rank")).subquery() + pos14 = g.db.query(sq.c.id, sq.c.rank).filter(sq.c.id == v.id).limit(1).one()[1] + + users15 = users.order_by(User.winnings).limit(25).all() + sq = g.db.query(User.id, func.rank().over(order_by=User.winnings).label("rank")).subquery() + pos15 = g.db.query(sq.c.id, sq.c.rank).filter(sq.c.id == v.id).limit(1).one()[1] + + return render_template("leaderboard.html", v=v, users1=users1, pos1=pos1, users2=users2, pos2=pos2, users3=users3, pos3=pos3, users4=users4, pos4=pos4, users5=users5, pos5=pos5, users6=users6, pos6=pos6, users7=users7, pos7=pos7, users9=users9_25, pos9=pos9, users10=users10, pos10=pos10, users11=users11, pos11=pos11, users12=users12, pos12=pos12, users13=users13_25, pos13=pos13, users14=users14, pos14=pos14, users15=users15, pos15=pos15) @app.get("/@/css") def get_css(username): diff --git a/files/templates/comments.html b/files/templates/comments.html index 1d93cab77..3f2fd30c7 100644 --- a/files/templates/comments.html +++ b/files/templates/comments.html @@ -231,7 +231,7 @@ {% endif %} {% if c.slots_result %} - {{c.slots_result.split(' ')[0]}} {{c.slots_result.split(' ')[1]}} + {{c.slots_result}} {% endif %} {% if c.active_flags %} diff --git a/files/templates/leaderboard.html b/files/templates/leaderboard.html index 1b4c6c575..4212f0948 100644 --- a/files/templates/leaderboard.html +++ b/files/templates/leaderboard.html @@ -419,6 +419,68 @@ {% endif %} +
Top 25 by slot winnings
+

+
+ + + + + + + +{% for user in users14 %} + + + + + +{% endfor %} +{% if pos14 > 25 %} + + + + + +{% endif %} +
#NameSlot winnings
{{loop.index}}@{{user.username}}'s profile picture{{user.username}}{{user.winnings}}
{{pos1}}@{{v.username}}'s profile picture{{v.username}}{{v.winnings}}
+ + +
+
+
+
+
Bottom 25 by slot winnings
+

+
+ + + + + + + +{% for user in users15 %} + + + + + +{% endfor %} +{% if pos15 > 25 %} + + + + + +{% endif %} +
#NameWinnings
{{loop.index}}@{{user.username}}'s profile picture{{user.username}}{{user.winnings}}
{{pos1}}@{{v.username}}'s profile picture{{v.username}}{{v.winnings}}
+ + +
+
+
+