diff --git a/files/classes/__init__.py b/files/classes/__init__.py
index 750723a77b..dabc3c0e06 100644
--- a/files/classes/__init__.py
+++ b/files/classes/__init__.py
@@ -9,10 +9,6 @@ from .userblock import *
from .submission import *
from .votes import *
from .domains import *
-from .slots import *
-from .blackjack import *
-from .wordle import *
-from .treasure import *
from .subscriptions import *
from files.__main__ import app
from .mod_logs import *
diff --git a/files/classes/blackjack.py b/files/classes/blackjack.py
deleted file mode 100644
index 0b0689d1d2..0000000000
--- a/files/classes/blackjack.py
+++ /dev/null
@@ -1,150 +0,0 @@
-from json.encoder import INFINITY
-import random
-from math import floor
-
-deck_count = 4
-ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K", "A"]
-suits = ["♠️", "♥️", "♣️", "♦️"]
-
-
-def shuffle(x):
- random.shuffle(x)
- return x
-
-
-def deal_initial_cards():
- deck = shuffle([rank + suit for rank in ranks for suit in suits for _ in range(deck_count)])
- p1, d1, p2, d2, *rest_of_deck = deck
- return [p1, p2], [d1, d2], rest_of_deck
-
-
-def get_card_value(card):
- rank = card[0]
- return 0 if rank == "A" else min(ranks.index(rank) + 2, 10)
-
-
-def get_hand_value(hand):
- without_aces = sum(map(get_card_value, hand))
- ace_count = sum("A" in c for c in hand)
- possibilities = []
-
- for i in range(ace_count + 1):
- value = without_aces + (ace_count - i) + i * 11
- possibilities.append(-1 if value > 21 else value)
-
- return max(possibilities)
-
-
-def format_cards(hand):
- return map(lambda x: "".join(x), hand)
-
-
-def format_all(player_hand, dealer_hand, deck, status, wager, kind):
- formatted_player_hand = format_cards(player_hand)
- formatted_dealer_hand = format_cards(dealer_hand)
- formatted_deck = format_cards(deck)
-
- return f'{"/".join(formatted_player_hand)}_{"/".join(formatted_dealer_hand)}_{"/".join(formatted_deck)}_{status}_{wager}_{kind}'
-
-
-class Blackjack:
- coins_command_word = "!blackjack"
- marseybucks_command_word = "!blackjackmb"
-
- minimum_bet = 100
- maximum_bet = INFINITY
-
- def __init__(self, g):
- self.db = g.db
-
- def check_for_blackjack_commands(self, in_text, from_user, from_comment):
- for command_word in (self.coins_command_word, self.marseybucks_command_word):
- currency_prop = "coins" if command_word == self.coins_command_word else "procoins"
- currency_value = getattr(from_user, currency_prop, 0)
-
- if command_word in in_text:
- for word in in_text.split():
- if command_word in word:
- try:
- wager = word[len(command_word):]
- wager_value = int(wager)
- except: break
-
- if (wager_value < self.minimum_bet): break
- elif (wager_value > self.maximum_bet): break
- elif (wager_value <= currency_value):
-
- setattr(from_user, currency_prop, currency_value - wager_value)
-
- player_hand, dealer_hand, rest_of_deck = deal_initial_cards()
- status = 'active'
- player_value = get_hand_value(player_hand)
- dealer_value = get_hand_value(dealer_hand)
-
- if player_value == 21 and dealer_value == 21:
- status = 'push'
- self.apply_game_result(from_comment, wager, status, currency_prop)
- elif player_value == 21:
- status = 'blackjack'
- self.apply_game_result(from_comment, wager, status, currency_prop)
- elif dealer_value == 21:
- status = 'lost'
- self.apply_game_result(from_comment, wager, status, currency_prop)
-
- from_comment.blackjack_result = format_all(player_hand, dealer_hand, rest_of_deck, status, wager, currency_prop)
-
- def player_hit(self, from_comment):
- player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_")
- player_hand = player_hand.split("/")
- dealer_hand = dealer_hand.split("/")
- deck = deck.split("/")
- player_hand.append(deck.pop(0))
- player_value = get_hand_value(player_hand)
-
- if player_value == -1:
- status = 'bust'
- self.apply_game_result(from_comment, wager, status, kind)
-
- from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind)
-
- if (player_value == 21): self.player_stayed(from_comment)
-
- def player_stayed(self, from_comment):
- player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_")
- player_hand = player_hand.split("/")
- player_value = get_hand_value(player_hand)
- dealer_hand = dealer_hand.split("/")
- dealer_value = get_hand_value(dealer_hand)
- deck = deck.split("/")
-
- while dealer_value < 17 and dealer_value != -1:
- next = deck.pop(0)
- dealer_hand.append(next)
- dealer_value = get_hand_value(dealer_hand)
-
- if player_value > dealer_value or dealer_value == -1: status = 'won'
- elif dealer_value > player_value: status = 'lost'
- else: status = 'push'
-
- from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind)
-
- self.apply_game_result(from_comment, wager, status, kind)
-
- def apply_game_result(self, from_comment, wager, result, kind):
- wager_value = int(wager)
- user = from_comment.author
- reward = -1
-
- if result == 'push': reward = 0
- elif result == 'won': reward = wager_value
- elif result == 'blackjack': reward = floor(wager_value * 3/2)
-
- if (reward > -1):
- currency_value = int(getattr(user, kind, 0))
-
- setattr(user, kind, currency_value + wager_value + reward)
-
- user.winnings += reward
-
- self.db.add(user)
- self.db.commit()
\ No newline at end of file
diff --git a/files/classes/slots.py b/files/classes/slots.py
deleted file mode 100644
index 03baf98abe..0000000000
--- a/files/classes/slots.py
+++ /dev/null
@@ -1,121 +0,0 @@
-from json.encoder import INFINITY
-import random
-from files.helpers.const import *
-
-def shuffle(stuff):
- random.shuffle(stuff)
- return stuff
-
-class Slots:
- command_word = "!slots"
- casino_word = "!slotsmb"
- if SITE_NAME == 'Drama': minimum_bet = 100
- else: minimum_bet = 10
- 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):
- in_text = in_text.lower()
- 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)
- except: break
-
- if (wager_value < self.minimum_bet): break
- elif (wager_value > self.maximum_bet): break
- elif (wager_value > from_user.coins): break
-
- from_user.coins -= wager_value
- from_user.winnings -= wager_value
-
- payout = self.determine_payout()
- symbols = self.build_symbols(payout)
- text = self.build_text(wager_value, payout, from_user, "Coins")
- reward = wager_value * payout
-
- from_user.coins += reward
- from_user.winnings += reward
-
- from_comment.slots_result = f'{symbols} {text}'
-
- if self.casino_word in in_text:
- for word in in_text.split():
- if self.casino_word in word:
- try:
- wager = word[len(self.casino_word):]
- wager_value = int(wager)
- except: break
-
- if (wager_value < self.minimum_bet): break
- elif (wager_value > self.maximum_bet): break
- elif (wager_value > from_user.procoins): break
-
- from_user.procoins -= wager_value
- from_user.winnings -= wager_value
-
- payout = self.determine_payout()
- symbols = self.build_symbols(payout)
- text = self.build_text(wager_value, payout, from_user, "Marseybux")
- reward = wager_value * payout
-
- from_user.procoins += reward
- from_user.winnings += reward
-
- from_comment.slots_result = f'{symbols} {text}'
-
-
- def determine_payout(self):
- value = random.randint(1, 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 = indices[0]
- match_b = indices[1]
- nonmatch = indices[2]
- matching_symbol = all_symbols[0]
- other_symbol = all_symbols[1]
- 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, currency):
- if result == 0: return f'Lost {wager_value} {currency}'
- elif result == 1: return 'Broke Even'
- elif result == 12: return f'Jackpot! Won {wager_value * (result-1)} {currency}'
- else: return f'Won {wager_value * (result-1)} {currency}'
\ No newline at end of file
diff --git a/files/classes/treasure.py b/files/classes/treasure.py
deleted file mode 100644
index 8d23df9f41..0000000000
--- a/files/classes/treasure.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import random
-
-class Treasure:
- special_min = 100
- special_max = 1000
- standard_min = 10
- standard_max = 100
-
- def __init__(self, g):
- self.db = g.db
-
- def check_for_treasure(self, in_text, from_comment):
- if '!slots' not in in_text and '!blackjack' not in in_text and '!wordle' not in in_text:
- seed = random.randint(1, 1000)
- is_special = seed == 1000
- is_standard = seed >= 990
- amount = 0
-
- if is_special:
- amount = random.randint(self.special_min, self.special_max)
- elif is_standard:
- amount = random.randint(self.standard_min, self.standard_max)
- if random.randint(1, 100) > 75: amount = -amount
-
- if amount != 0:
- user = from_comment.author
- user.coins += amount
-
- if user.coins < 0: user.coins = 0
-
- from_comment.treasure_amount = str(amount)
-
- self.db.add(user)
- self.db.add(from_comment)
- self.db.commit()
\ No newline at end of file
diff --git a/files/classes/wordle.py b/files/classes/wordle.py
deleted file mode 100644
index 2ffd7a5750..0000000000
--- a/files/classes/wordle.py
+++ /dev/null
@@ -1,52 +0,0 @@
-import random
-from os import environ
-
-def format_guesses(guesses):
- return " -> ".join(guesses)
-
-def format_all(guesses, status, answer):
- formatted_guesses = format_guesses(guesses)
- return f'{formatted_guesses}_{status}_{answer}'
-
-class Wordle:
- def __init__(self, g):
- self.word_list = environ.get('WORDLE').split(' ')
- self.command_word = "!wordle"
- self.db = g.db
-
- def check_for_wordle_commands(self, in_text, from_user, from_comment):
- word_list = self.word_list
- command_word = self.command_word
- if command_word in in_text:
- answer = random.choice(word_list) # choose a random word from word list
- guesses = []
- status = 'active'
- from_comment.wordle_result = format_all(guesses, status, answer)
-
- def check_guess(self,from_comment, guess):
- guesses, status, answer = from_comment.wordle_result.split("_")
- guesses = guesses.split(" -> ")
- if (guesses[0] == ""):
- guesses = []
- count = len(guesses)
-
- if (guess != None and len(guess) == 5 and status == "active"):
- result = ["🟥"]*5
- pos = 0 # letter position
- guess = guess.lower()
- for i in guess:
- result[pos] = i.upper()
- if i == answer[pos]:
- result[pos] = result[pos] + "🟩" # green
- elif i in answer:
- result[pos] = result[pos] + "🟨" # yellow
- else:
- result[pos] = result[pos] + "🟥" # red
- pos += 1 # add 1 to the letter position
- guesses.append("/".join(result))
-
-
- if (guess.lower() == answer): status = "won"
- elif (count == 5): status = "lost"
-
- from_comment.wordle_result = format_all(guesses, status, answer)
\ No newline at end of file
diff --git a/files/helpers/blackjack.py b/files/helpers/blackjack.py
new file mode 100644
index 0000000000..a95eb28a58
--- /dev/null
+++ b/files/helpers/blackjack.py
@@ -0,0 +1,140 @@
+from json.encoder import INFINITY
+import random
+from math import floor
+
+deck_count = 4
+ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K", "A"]
+suits = ["♠️", "♥️", "♣️", "♦️"]
+coins_command_word = "!blackjack"
+marseybucks_command_word = "!blackjackmb"
+minimum_bet = 100
+maximum_bet = INFINITY
+
+def shuffle(x):
+ random.shuffle(x)
+ return x
+
+
+def deal_initial_cards():
+ deck = shuffle([rank + suit for rank in ranks for suit in suits for _ in range(deck_count)])
+ p1, d1, p2, d2, *rest_of_deck = deck
+ return [p1, p2], [d1, d2], rest_of_deck
+
+
+def get_card_value(card):
+ rank = card[0]
+ return 0 if rank == "A" else min(ranks.index(rank) + 2, 10)
+
+
+def get_hand_value(hand):
+ without_aces = sum(map(get_card_value, hand))
+ ace_count = sum("A" in c for c in hand)
+ possibilities = []
+
+ for i in range(ace_count + 1):
+ value = without_aces + (ace_count - i) + i * 11
+ possibilities.append(-1 if value > 21 else value)
+
+ return max(possibilities)
+
+
+def format_cards(hand):
+ return map(lambda x: "".join(x), hand)
+
+
+def format_all(player_hand, dealer_hand, deck, status, wager, kind):
+ formatted_player_hand = format_cards(player_hand)
+ formatted_dealer_hand = format_cards(dealer_hand)
+ formatted_deck = format_cards(deck)
+
+ return f'{"/".join(formatted_player_hand)}_{"/".join(formatted_dealer_hand)}_{"/".join(formatted_deck)}_{status}_{wager}_{kind}'
+
+
+def check_for_blackjack_commands(in_text, from_user, from_comment):
+ for command_word in (coins_command_word, marseybucks_command_word):
+ currency_prop = "coins" if command_word == coins_command_word else "procoins"
+ currency_value = getattr(from_user, currency_prop, 0)
+
+ if command_word in in_text:
+ for word in in_text.split():
+ if command_word in word:
+ try:
+ wager = word[len(command_word):]
+ wager_value = int(wager)
+ except: break
+
+ if (wager_value < minimum_bet): break
+ elif (wager_value > maximum_bet): break
+ elif (wager_value <= currency_value):
+
+ setattr(from_user, currency_prop, currency_value - wager_value)
+
+ player_hand, dealer_hand, rest_of_deck = deal_initial_cards()
+ status = 'active'
+ player_value = get_hand_value(player_hand)
+ dealer_value = get_hand_value(dealer_hand)
+
+ if player_value == 21 and dealer_value == 21:
+ status = 'push'
+ apply_game_result(from_comment, wager, status, currency_prop)
+ elif player_value == 21:
+ status = 'blackjack'
+ apply_game_result(from_comment, wager, status, currency_prop)
+ elif dealer_value == 21:
+ status = 'lost'
+ apply_game_result(from_comment, wager, status, currency_prop)
+
+ from_comment.blackjack_result = format_all(player_hand, dealer_hand, rest_of_deck, status, wager, currency_prop)
+
+def player_hit(from_comment):
+ player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_")
+ player_hand = player_hand.split("/")
+ dealer_hand = dealer_hand.split("/")
+ deck = deck.split("/")
+ player_hand.append(deck.pop(0))
+ player_value = get_hand_value(player_hand)
+
+ if player_value == -1:
+ status = 'bust'
+ apply_game_result(from_comment, wager, status, kind)
+
+ from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind)
+
+ if (player_value == 21): player_stayed(from_comment)
+
+def player_stayed(from_comment):
+ player_hand, dealer_hand, deck, status, wager, kind = from_comment.blackjack_result.split("_")
+ player_hand = player_hand.split("/")
+ player_value = get_hand_value(player_hand)
+ dealer_hand = dealer_hand.split("/")
+ dealer_value = get_hand_value(dealer_hand)
+ deck = deck.split("/")
+
+ while dealer_value < 17 and dealer_value != -1:
+ next = deck.pop(0)
+ dealer_hand.append(next)
+ dealer_value = get_hand_value(dealer_hand)
+
+ if player_value > dealer_value or dealer_value == -1: status = 'won'
+ elif dealer_value > player_value: status = 'lost'
+ else: status = 'push'
+
+ from_comment.blackjack_result = format_all(player_hand, dealer_hand, deck, status, wager, kind)
+
+ apply_game_result(from_comment, wager, status, kind)
+
+def apply_game_result(from_comment, wager, result, kind):
+ wager_value = int(wager)
+ user = from_comment.author
+ reward = -1
+
+ if result == 'push': reward = 0
+ elif result == 'won': reward = wager_value
+ elif result == 'blackjack': reward = floor(wager_value * 3/2)
+
+ if (reward > -1):
+ currency_value = int(getattr(user, kind, 0))
+
+ setattr(user, kind, currency_value + wager_value + reward)
+
+ user.winnings += reward
\ No newline at end of file
diff --git a/files/helpers/slots.py b/files/helpers/slots.py
new file mode 100644
index 0000000000..e684047984
--- /dev/null
+++ b/files/helpers/slots.py
@@ -0,0 +1,117 @@
+from json.encoder import INFINITY
+import random
+from .const import *
+
+command_word = "!slots"
+casino_word = "!slotsmb"
+if SITE_NAME == 'Drama': minimum_bet = 100
+else: minimum_bet = 10
+maximum_bet = INFINITY
+payout_to_symbols = {
+ 2: ["👣", "🍀", "🌈", "⭐️"],
+ 3: ["🍎", "🔞", "⚛️", "☢️"],
+ 5: ["✡️", "⚔️", "🍆", "🍒"],
+ 12: ["🐱"]
+}
+
+def shuffle(stuff):
+ random.shuffle(stuff)
+ return stuff
+
+def check_for_slots_command(in_text, from_user, from_comment):
+ in_text = in_text.lower()
+ if command_word in in_text:
+ for word in in_text.split():
+ if command_word in word:
+ try:
+ wager = word[len(command_word):]
+ wager_value = int(wager)
+ except: break
+
+ if (wager_value < minimum_bet): break
+ elif (wager_value > maximum_bet): break
+ elif (wager_value > from_user.coins): break
+
+ from_user.coins -= wager_value
+ from_user.winnings -= wager_value
+
+ payout = determine_payout()
+ symbols = build_symbols(payout)
+ text = build_text(wager_value, payout, from_user, "Coins")
+ reward = wager_value * payout
+
+ from_user.coins += reward
+ from_user.winnings += reward
+
+ from_comment.slots_result = f'{symbols} {text}'
+
+ if casino_word in in_text:
+ for word in in_text.split():
+ if casino_word in word:
+ try:
+ wager = word[len(casino_word):]
+ wager_value = int(wager)
+ except: break
+
+ if (wager_value < minimum_bet): break
+ elif (wager_value > maximum_bet): break
+ elif (wager_value > from_user.procoins): break
+
+ from_user.procoins -= wager_value
+ from_user.winnings -= wager_value
+
+ payout = determine_payout()
+ symbols = build_symbols(payout)
+ text = build_text(wager_value, payout, from_user, "Marseybux")
+ reward = wager_value * payout
+
+ from_user.procoins += reward
+ from_user.winnings += reward
+
+ from_comment.slots_result = f'{symbols} {text}'
+
+
+def determine_payout():
+ value = random.randint(1, 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(for_payout):
+ all_symbols = []
+
+ for payout in payout_to_symbols:
+ for symbol in 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 = indices[0]
+ match_b = indices[1]
+ nonmatch = indices[2]
+ matching_symbol = all_symbols[0]
+ other_symbol = all_symbols[1]
+ symbol_set[match_a] = matching_symbol
+ symbol_set[match_b] = matching_symbol
+ symbol_set[nonmatch] = other_symbol
+
+ return "".join(symbol_set)
+ else:
+ relevantSymbols = shuffle(payout_to_symbols[for_payout])
+ symbol = relevantSymbols[0]
+
+ return "".join([symbol, symbol, symbol])
+
+def build_text(wager_value, result, user, currency):
+ if result == 0: return f'Lost {wager_value} {currency}'
+ elif result == 1: return 'Broke Even'
+ elif result == 12: return f'Jackpot! Won {wager_value * (result-1)} {currency}'
+ else: return f'Won {wager_value * (result-1)} {currency}'
\ No newline at end of file
diff --git a/files/helpers/treasure.py b/files/helpers/treasure.py
new file mode 100644
index 0000000000..d5e9e293bb
--- /dev/null
+++ b/files/helpers/treasure.py
@@ -0,0 +1,27 @@
+import random
+
+special_min = 100
+special_max = 1000
+standard_min = 10
+standard_max = 100
+
+def check_for_treasure(in_text, from_comment):
+ if '!slots' not in in_text and '!blackjack' not in in_text and '!wordle' not in in_text:
+ seed = random.randint(1, 1000)
+ is_special = seed == 1000
+ is_standard = seed >= 990
+ amount = 0
+
+ if is_special:
+ amount = random.randint(special_min, special_max)
+ elif is_standard:
+ amount = random.randint(standard_min, standard_max)
+ if random.randint(1, 100) > 90: amount = -amount
+
+ if amount != 0:
+ user = from_comment.author
+ user.coins += amount
+
+ if user.coins < 0: user.coins = 0
+
+ from_comment.treasure_amount = str(amount)
\ No newline at end of file
diff --git a/files/routes/comments.py b/files/routes/comments.py
index 6a19894599..fa2ce0906e 100644
--- a/files/routes/comments.py
+++ b/files/routes/comments.py
@@ -3,6 +3,9 @@ from files.helpers.filters import *
from files.helpers.alerts import *
from files.helpers.images import *
from files.helpers.const import *
+from files.helpers.slots import *
+from files.helpers.blackjack import *
+from files.helpers.treasure import *
from files.classes import *
from files.routes.front import comment_idlist
from files.routes.static import marsey_list
@@ -21,6 +24,7 @@ if PUSHER_ID: beams_client = PushNotifications(instance_id=PUSHER_ID, secret_key
CF_KEY = environ.get("CF_KEY", "").strip()
CF_ZONE = environ.get("CF_ZONE", "").strip()
CF_HEADERS = {"Authorization": f"Bearer {CF_KEY}", "Content-Type": "application/json"}
+WORD_LIST = tuple(set(environ.get("WORDLE").split(" ")))
@app.get("/comment/
Cost: {{v.subs_created * 25}} coins
+Cost: {{v.subs_created * 50}} coins