Spaces:
Building
Building
Update sportbet.py
Browse files- sportbet.py +33 -24
sportbet.py
CHANGED
@@ -35,7 +35,7 @@ class TeamSelect(discord.ui.Select):
|
|
35 |
super().__init__(placeholder="Select a team to bet on", options=options)
|
36 |
|
37 |
class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
38 |
-
bet_amount = discord.ui.TextInput(label="Bet Amount", placeholder="Enter bet amount")
|
39 |
|
40 |
def __init__(self, team, user_id, game_data):
|
41 |
super().__init__()
|
@@ -53,7 +53,7 @@ class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
|
53 |
|
54 |
user_cash[self.user_id] -= bet_amount
|
55 |
await interaction.response.send_message(f"Bet placed on {self.team} for ${bet_amount}")
|
56 |
-
|
57 |
user = await interaction.client.fetch_user(self.user_id)
|
58 |
embed = discord.Embed(title="Bet Placed", color=0x787878)
|
59 |
embed.add_field(name="Team", value=self.team, inline=False)
|
@@ -67,16 +67,19 @@ class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
|
67 |
user_bets[self.user_id].append({
|
68 |
"team": self.team,
|
69 |
"amount": bet_amount,
|
70 |
-
"game_data": self.game_data
|
|
|
71 |
})
|
72 |
-
|
73 |
asyncio.create_task(self.monitor_game(interaction, bet_amount))
|
74 |
except ValueError as e:
|
75 |
await interaction.response.send_message(str(e), ephemeral=True)
|
76 |
|
77 |
async def monitor_game(self, interaction, bet_amount):
|
78 |
game_start = datetime.fromisoformat(self.game_data['eventTime'].replace('Z', '+00:00'))
|
79 |
-
|
|
|
|
|
80 |
|
81 |
user = await interaction.client.fetch_user(self.user_id)
|
82 |
await user.send(f"Your team {self.team} has started playing!")
|
@@ -85,23 +88,27 @@ class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
|
85 |
|
86 |
while True:
|
87 |
scores = await fetch_nhl_scores()
|
88 |
-
|
|
|
89 |
g['upperTeam']['name'] == self.game_data['upperTeam']['name']), None)
|
90 |
|
91 |
-
if game is None or game['eventStatus']
|
92 |
await asyncio.sleep(60)
|
93 |
continue
|
94 |
|
95 |
-
current_scores = {
|
96 |
-
|
|
|
|
|
|
|
97 |
for team in [self.game_data['lowerTeam']['name'], self.game_data['upperTeam']['name']]:
|
98 |
if current_scores[team] > previous_scores[team]:
|
99 |
team_name = self.game_data['lowerTeam']['longName'] if team == self.game_data['lowerTeam']['name'] else self.game_data['upperTeam']['longName']
|
100 |
await user.send(f"{team_name} SCORED! Current score: {current_scores[self.game_data['lowerTeam']['name']]} - {current_scores[self.game_data['upperTeam']['name']]}")
|
101 |
-
|
102 |
previous_scores = current_scores.copy()
|
103 |
-
|
104 |
-
if game['eventStatus'] ==
|
105 |
winner = self.game_data['lowerTeam']['name'] if current_scores[self.game_data['lowerTeam']['name']] > current_scores[self.game_data['upperTeam']['name']] else self.game_data['upperTeam']['name']
|
106 |
if winner == self.team:
|
107 |
winnings = bet_amount * 2
|
@@ -109,10 +116,10 @@ class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
|
109 |
await user.send(f"Congratulations! Your team won. You won ${winnings}!")
|
110 |
else:
|
111 |
await user.send(f"Sorry, your team lost. Better luck next time!")
|
112 |
-
|
113 |
user_bets[self.user_id] = [bet for bet in user_bets[self.user_id] if bet['game_data'] != self.game_data]
|
114 |
break
|
115 |
-
|
116 |
await asyncio.sleep(60) # Check for updates every minute
|
117 |
|
118 |
class SportBetView(discord.ui.View):
|
@@ -129,7 +136,8 @@ class SportBetView(discord.ui.View):
|
|
129 |
|
130 |
async def show_game_selection(interaction: discord.Interaction):
|
131 |
scores = await fetch_nhl_scores()
|
132 |
-
|
|
|
133 |
|
134 |
if not upcoming_games:
|
135 |
await interaction.response.send_message("No games available for betting.")
|
@@ -166,9 +174,10 @@ async def show_current_bets(interaction: discord.Interaction):
|
|
166 |
|
167 |
embed = discord.Embed(title="Your Current Bets", color=0x787878)
|
168 |
scores = await fetch_nhl_scores()
|
169 |
-
|
|
|
170 |
for i, bet in enumerate(user_bets[user_id]):
|
171 |
-
game = next((g for g in
|
172 |
g['upperTeam']['name'] == bet['game_data']['upperTeam']['name']), None)
|
173 |
|
174 |
start_time = datetime.fromisoformat(bet['game_data']['eventTime'].replace('Z', '+00:00'))
|
@@ -178,16 +187,16 @@ async def show_current_bets(interaction: discord.Interaction):
|
|
178 |
status = f"Starts <t:{int(start_time.timestamp())}:R>"
|
179 |
score = "N/A"
|
180 |
else:
|
181 |
-
status = game['eventStatus']
|
182 |
score = f"{game.get('lowerTeam', {}).get('score', 'Unknown')} - {game.get('upperTeam', {}).get('score', 'Unknown')}" if game else "Unknown"
|
183 |
|
184 |
embed.add_field(name=f"Bet {i+1}", value=(
|
185 |
-
f"Team
|
186 |
-
f"Amount
|
187 |
-
f"Game
|
188 |
-
f"Status
|
189 |
-
f"Current Score
|
190 |
-
f"Start Time
|
191 |
), inline=False)
|
192 |
|
193 |
view = discord.ui.View()
|
|
|
35 |
super().__init__(placeholder="Select a team to bet on", options=options)
|
36 |
|
37 |
class BetModal(discord.ui.Modal, title="Place Your Bet"):
|
38 |
+
bet_amount = discord.ui.TextInput(label="Bet Amount", placeholder="Enter bet amount", required=True)
|
39 |
|
40 |
def __init__(self, team, user_id, game_data):
|
41 |
super().__init__()
|
|
|
53 |
|
54 |
user_cash[self.user_id] -= bet_amount
|
55 |
await interaction.response.send_message(f"Bet placed on {self.team} for ${bet_amount}")
|
56 |
+
|
57 |
user = await interaction.client.fetch_user(self.user_id)
|
58 |
embed = discord.Embed(title="Bet Placed", color=0x787878)
|
59 |
embed.add_field(name="Team", value=self.team, inline=False)
|
|
|
67 |
user_bets[self.user_id].append({
|
68 |
"team": self.team,
|
69 |
"amount": bet_amount,
|
70 |
+
"game_data": self.game_data,
|
71 |
+
"bet_time": datetime.now(timezone.utc)
|
72 |
})
|
73 |
+
|
74 |
asyncio.create_task(self.monitor_game(interaction, bet_amount))
|
75 |
except ValueError as e:
|
76 |
await interaction.response.send_message(str(e), ephemeral=True)
|
77 |
|
78 |
async def monitor_game(self, interaction, bet_amount):
|
79 |
game_start = datetime.fromisoformat(self.game_data['eventTime'].replace('Z', '+00:00'))
|
80 |
+
sleep_duration = (game_start - datetime.now(timezone.utc)).total_seconds()
|
81 |
+
if sleep_duration > 0:
|
82 |
+
await asyncio.sleep(sleep_duration)
|
83 |
|
84 |
user = await interaction.client.fetch_user(self.user_id)
|
85 |
await user.send(f"Your team {self.team} has started playing!")
|
|
|
88 |
|
89 |
while True:
|
90 |
scores = await fetch_nhl_scores()
|
91 |
+
events = scores.get('sectionList', [])[0].get('events', [])
|
92 |
+
game = next((g for g in events if g['lowerTeam']['name'] == self.game_data['lowerTeam']['name'] and
|
93 |
g['upperTeam']['name'] == self.game_data['upperTeam']['name']), None)
|
94 |
|
95 |
+
if game is None or game['eventStatus'] < 2:
|
96 |
await asyncio.sleep(60)
|
97 |
continue
|
98 |
|
99 |
+
current_scores = {
|
100 |
+
game['lowerTeam']['name']: game.get('score', 0),
|
101 |
+
game['upperTeam']['name']: game.get('score', 0)
|
102 |
+
}
|
103 |
+
|
104 |
for team in [self.game_data['lowerTeam']['name'], self.game_data['upperTeam']['name']]:
|
105 |
if current_scores[team] > previous_scores[team]:
|
106 |
team_name = self.game_data['lowerTeam']['longName'] if team == self.game_data['lowerTeam']['name'] else self.game_data['upperTeam']['longName']
|
107 |
await user.send(f"{team_name} SCORED! Current score: {current_scores[self.game_data['lowerTeam']['name']]} - {current_scores[self.game_data['upperTeam']['name']]}")
|
108 |
+
|
109 |
previous_scores = current_scores.copy()
|
110 |
+
|
111 |
+
if game['eventStatus'] == 3:
|
112 |
winner = self.game_data['lowerTeam']['name'] if current_scores[self.game_data['lowerTeam']['name']] > current_scores[self.game_data['upperTeam']['name']] else self.game_data['upperTeam']['name']
|
113 |
if winner == self.team:
|
114 |
winnings = bet_amount * 2
|
|
|
116 |
await user.send(f"Congratulations! Your team won. You won ${winnings}!")
|
117 |
else:
|
118 |
await user.send(f"Sorry, your team lost. Better luck next time!")
|
119 |
+
|
120 |
user_bets[self.user_id] = [bet for bet in user_bets[self.user_id] if bet['game_data'] != self.game_data]
|
121 |
break
|
122 |
+
|
123 |
await asyncio.sleep(60) # Check for updates every minute
|
124 |
|
125 |
class SportBetView(discord.ui.View):
|
|
|
136 |
|
137 |
async def show_game_selection(interaction: discord.Interaction):
|
138 |
scores = await fetch_nhl_scores()
|
139 |
+
events = scores.get('sectionList', [])[0].get('events', [])
|
140 |
+
upcoming_games = [game for game in events if game['eventStatus'] == 2]
|
141 |
|
142 |
if not upcoming_games:
|
143 |
await interaction.response.send_message("No games available for betting.")
|
|
|
174 |
|
175 |
embed = discord.Embed(title="Your Current Bets", color=0x787878)
|
176 |
scores = await fetch_nhl_scores()
|
177 |
+
events = scores.get('sectionList', [])[0].get('events', [])
|
178 |
+
|
179 |
for i, bet in enumerate(user_bets[user_id]):
|
180 |
+
game = next((g for g in events if g['lowerTeam']['name'] == bet['game_data']['lowerTeam']['name'] and
|
181 |
g['upperTeam']['name'] == bet['game_data']['upperTeam']['name']), None)
|
182 |
|
183 |
start_time = datetime.fromisoformat(bet['game_data']['eventTime'].replace('Z', '+00:00'))
|
|
|
187 |
status = f"Starts <t:{int(start_time.timestamp())}:R>"
|
188 |
score = "N/A"
|
189 |
else:
|
190 |
+
status = "FINAL" if game and game['eventStatus'] == 3 else "In Progress"
|
191 |
score = f"{game.get('lowerTeam', {}).get('score', 'Unknown')} - {game.get('upperTeam', {}).get('score', 'Unknown')}" if game else "Unknown"
|
192 |
|
193 |
embed.add_field(name=f"Bet {i+1}", value=(
|
194 |
+
f"**Team:** {bet['team']}\n"
|
195 |
+
f"**Amount:** ${bet['amount']}\n"
|
196 |
+
f"**Game:** {bet['game_data']['lowerTeam']['longName']} vs {bet['game_data']['upperTeam']['longName']}\n"
|
197 |
+
f"**Status:** {status}\n"
|
198 |
+
f"**Current Score:** {score}\n"
|
199 |
+
f"**Start Time:** <t:{int(start_time.timestamp())}:F>"
|
200 |
), inline=False)
|
201 |
|
202 |
view = discord.ui.View()
|