From cb0778bbc29a7e9fee08bddb00d29a2694cc0fc4 Mon Sep 17 00:00:00 2001 From: BigGamerGary Date: Mon, 28 Nov 2022 20:04:16 +1000 Subject: [PATCH] Ledger reimplemented with SQLite3 --- Acronymbot.py | 12 +++++- BlackJack.py | 42 ++++++++---------- Ledger.py | 59 +++++++++++++++----------- __pycache__/BlackJack.cpython-310.pyc | Bin 6332 -> 5139 bytes __pycache__/Ledger.cpython-310.pyc | Bin 0 -> 2129 bytes ledger.db | Bin 0 -> 8192 bytes 6 files changed, 63 insertions(+), 50 deletions(-) create mode 100644 __pycache__/Ledger.cpython-310.pyc create mode 100644 ledger.db diff --git a/Acronymbot.py b/Acronymbot.py index e77ad1b..13006c5 100644 --- a/Acronymbot.py +++ b/Acronymbot.py @@ -1,7 +1,9 @@ import discord +import sqlite3 from discord import app_commands from BlackJack import BlackJack + botIntents = discord.Intents.all() client = discord.Client(intents=botIntents) @@ -75,7 +77,7 @@ async def bj(interaction: discord.Interaction): discoutput = lambda m: discordOutput(interaction, m) blackJack = BlackJack(discinput, discoutput) await interaction.response.send_message("Let's play Black Jack!") - await blackJack.play_game(interaction.user, 100) + await blackJack.play_game(interaction.user.id, 100) async def discordInput(interaction: discord.Interaction, message:str): response = HitOrStand() @@ -86,6 +88,14 @@ async def discordInput(interaction: discord.Interaction, message:str): async def discordOutput(interaction: discord.Interaction, message): await interaction.followup.send(message) +@tree.command(description="Find your Balance") +async def bal(interaction: discord.Interaction): + conn = sqlite3.connect("ledger.db") + cur = conn.cursor() + ID = interaction.user.id + data = cur.execute("SELECT * FROM ledger WHERE USERID = ?", (ID,)) + await interaction.response.send_message(data) + """ #### Fin #### """ diff --git a/BlackJack.py b/BlackJack.py index 160c2da..94ebf8a 100644 --- a/BlackJack.py +++ b/BlackJack.py @@ -48,7 +48,10 @@ def generateHand(hand, deck, handSize = 2): addCardToHand(hand, deck) i += 1 -def handNumbersToCards(hand): return [convertNumberToCard(a) for a in hand] +def handNumbersToCards(hand): + cards = "" + for card in hand: + cards += convertNumberToCard(card) def getHandTotal(hand): cardValue = lambda c: min(c % 13 + 1, 10) @@ -60,23 +63,7 @@ def getHandTotal(hand): if (i + card) > 21: card = 1 i += card - return i - -class BlackJackLedger(Ledger): - def __init__(self) -> None: - super().__init__() - - def updateLedger(self, data, oldData): - ID, money, wins, losses = oldData - _, newMoney, newWins, newLosses = data - - wins += newWins - losses += newLosses - money += newMoney - data = [ID, money, wins, losses] - return data - - + return i class BlackJack: def __init__(self, recv, send): @@ -91,7 +78,7 @@ class BlackJack: self.recv = recv self.send = send - ledger = BlackJackLedger() + self.ledger = Ledger.Ledger() def getPH(self): return self.playerHand @@ -152,9 +139,10 @@ class BlackJack: validInput = False gameOver = False playerStood = False - playerStats = self.readLedger(ID) + playerStats = self.ledger.readLedger(ID) if playerStats is None: - playerStats = (ID, 100, 0, 0) + self.ledger.writeLedger(ID) + playerStats = self.ledger.readLedger while not gameOver: playerWinState = self.checkHandState(self.playerHand) @@ -199,13 +187,17 @@ class BlackJack: "\n" + "Dealers hand = " + str(getHandTotal(self.dealerHand)) + ": " + handNumbersToCards(self.dealerHand)) if playerWinState == "w": await self.send("You won!") - # self.writeLedger(ID, 2*bet, True) + win = (2*bet, 1, 0, ID) + self.ledger.updateLedger(playerStats, win) elif playerWinState == "l": await self.send("You busted!") - # self.writeLedger(ID, -bet, False) + loss = (-bet, 0, 1, ID) + self.ledger.updateLedger(playerStats, loss) elif dealerWinState == "w": await self.send("The Dealer reached 21 before you!") - # self.writeLedger(ID, -bet, False) + loss = (-bet, 0, 1, ID) + self.ledger.updateLedger(playerStats, loss) elif dealerWinState == "l": await self.send("The Dealer busted before you!") - # self.writeLedger(ID, 2*bet, True) + win = (2*bet, 1, 0, ID) + self.ledger.updateLedger(playerStats, win) diff --git a/Ledger.py b/Ledger.py index fd1ccb9..fc0fe72 100644 --- a/Ledger.py +++ b/Ledger.py @@ -2,39 +2,50 @@ import sqlite3 class Ledger(): def __init__(self) -> None: - self.data = [] - self.indexes = {} # ID: Index + self.db = sqlite3.connect("ledger.db") + self.data = self.db.cursor() + self.data.execute(""" CREATE TABLE IF NOT EXISTS ledger ( + ID integer PRIMARY KEY, + USERID integer, + MONEY integer DEFAULT 100, + WINS integer DEFAULT 0, + LOSSES integer DEFAULT 0 + ); """) def readLedger(self, ID): - data = None - index = self.indexes.get(ID, None) - if index is not None: - data = self.data[index] + self.data.execute("""SELECT USERID, MONEY, WINS, LOSSES FROM ledger WHERE USERID = ?""", (ID,)) + data = self.data.fetchone() return data - def writeLedger(self, ID, data): - oldData = self.readLedger(ID) - if oldData is not None: - data = self.updateLedger(data, oldData) - index = self.indexes[ID] - self.data[index] = data - else: - self.data.append(data) - index = len(self.data) - 1 - self.indexes.update({ID: index}) - - self.saveLedger() + def writeLedger(self, ID): + query = """ INSERT INTO ledger(USERID) + VALUES(?) """ + self.data.execute(query, (ID,)) + self.db.commit() def updateLedger(self, data, newData): - return data + query = """ UPDATE ledger + SET MONEY = ?, + WINS = ?, + LOSSES = ?, + WHERE USERID = ?""" + data = [data[i] + newData[i] for i in range(len(data))] + self.data.execute(query, data) def main(): - conn = sqlite3.connect("ledger.db") - cur = conn.cursor() - table = """ CREATE TABLE IF NOT EXISTS + ledger = Ledger() + ledger.writeLedger(10121) + ID = 10121 + data = ledger.readLedger(ID) - """ - cur.execute(table) + ID = 2 + playerStats = ledger.readLedger(ID) + if playerStats is None: + print("Not real") + ledger.writeLedger(ID) + playerStats = ledger.readLedger(ID) + + print(playerStats) if __name__ == "__main__": main() \ No newline at end of file diff --git a/__pycache__/BlackJack.cpython-310.pyc b/__pycache__/BlackJack.cpython-310.pyc index fbb709fdb15eea1e6f234d21d5d3f8015503eee8..e1858c454110560b1d553ce531b3bd7e9616ff2e 100644 GIT binary patch delta 2341 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