Spaces:
Building
Building
File size: 10,505 Bytes
3093cbf f40a4ac 8b11f06 3093cbf 8b11f06 6ccf658 7ceaf47 3093cbf 55e2e55 3093cbf 6ccf658 3093cbf 7ceaf47 2597110 7ceaf47 2597110 7ceaf47 3093cbf 8b11f06 3093cbf 7ceaf47 3093cbf f40a4ac 3093cbf 8b11f06 3093cbf f40a4ac 3093cbf 8b11f06 3093cbf 7ceaf47 3093cbf ba32757 8b11f06 3093cbf 7ceaf47 3093cbf 8b11f06 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
import discord
from discord import app_commands
import aiohttp
import random
import time
from cash import user_cash
luck_multipliers = {}
luck_expiration = {}
luck_opportunities = {}
used_luck_opportunities = set()
first_luck_claimed = set()
async def perform_roll(interaction: discord.Interaction):
async def fetch_data(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as response:
if response.status == 200:
return await response.json()
return None
rap_data = await fetch_data("https://rapapi.deno.dev/")
collection_data = await fetch_data("https://petsapi.deno.dev/")
if not rap_data or not collection_data:
return None
pets = [pet for pet in collection_data['data'] if pet['configName'] in [p['configData']['id'] for p in rap_data['data']]]
if not pets:
return None
user_id = interaction.user.id
luck_multiplier = luck_multipliers.get(user_id, 1)
sorted_pets = sorted(pets, key=lambda x: x['configData']['difficulty'])
max_index = len(sorted_pets) - 1
index = int(max_index * (luck_multiplier - 1) / 9)
rolled_pet = random.choice(sorted_pets[:index+1])
pet_rap = next((pet for pet in rap_data['data'] if pet['configData']['id'] == rolled_pet['configName']), None)
if not pet_rap:
return None
rap_value = pet_rap['value']
thumbnail_id = rolled_pet['configData']['thumbnail'].split('://')[1]
thumbnail_url = f"https://api.rbxgleaks1.workers.dev/asset/{thumbnail_id}"
def format_difficulty(difficulty):
if difficulty >= 1_000_000_000:
return f"{difficulty / 1_000_000_000:.1f}B ({difficulty:,})"
elif difficulty >= 1_000_000:
return f"{difficulty / 1_000_000:.1f}M ({difficulty:,})"
elif difficulty >= 1_000:
return f"{difficulty / 1_000:.1f}K ({difficulty:,})"
else:
return f"{difficulty} ({difficulty:,})"
embed = discord.Embed(title=f"{interaction.user.name} rolled: {rolled_pet['configData']['name']}", color=0x787878)
embed.add_field(name="Value", value=f"{rap_value:,} diamonds", inline=True)
embed.add_field(name="Difficulty", value=format_difficulty(rolled_pet['configData']['difficulty']), inline=True)
embed.add_field(name="Category", value=rolled_pet['category'], inline=True)
embed.set_thumbnail(url=thumbnail_url)
luck_text = ""
if user_id in luck_expiration:
remaining_time = int(luck_expiration[user_id] - time.time())
if remaining_time > 0:
luck_percentage = (luck_multiplier - 1) * 100
luck_text = f"\nYou have {remaining_time // 60} minutes and {remaining_time % 60} seconds of luck left! ({luck_percentage}% luck)"
else:
del luck_multipliers[user_id]
del luck_expiration[user_id]
embed.set_footer(text=f"Click 'Roll Again' to roll again!{luck_text}")
roll_again_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="Roll Again", custom_id="roll_again")
async def roll_again_callback(interaction: discord.Interaction):
await interaction.response.defer()
result = await perform_roll(interaction)
if result:
await interaction.followup.send(embed=result[0], view=result[1])
else:
await interaction.followup.send("An error occurred.")
roll_again_button.callback = roll_again_callback
view = discord.ui.View()
view.add_item(roll_again_button)
sell_button = discord.ui.Button(style=discord.ButtonStyle.success, label=f"Sell Pet for ${rap_value}", custom_id="sell_pet")
async def sell_pet_callback(interaction: discord.Interaction):
if interaction.user.id != user_id:
await interaction.response.send_message("You cannot sell this pet.", ephemeral=True)
return
sell_value = rap_value
user_cash[user_id] = user_cash.get(user_id, 0) + sell_value
await interaction.response.send_message(f"You sold the pet for ${sell_value}. Your new balance is ${user_cash[user_id]}.", ephemeral=True)
for item in view.children:
if item.custom_id == "sell_pet":
view.remove_item(item)
break
await interaction.message.edit(view=view)
sell_button.callback = sell_pet_callback
view.add_item(sell_button)
if user_id not in first_luck_claimed:
first_luck_button = discord.ui.Button(style=discord.ButtonStyle.success, label="Claim 100% Luck Forever", custom_id="first_luck")
async def first_luck_callback(interaction: discord.Interaction):
if interaction.user.id != user_id:
await interaction.response.send_message("You cannot use this button.", ephemeral=True)
return
luck_multipliers[user_id] = 10 # 100% luck
first_luck_claimed.add(user_id)
await interaction.response.send_message("You've claimed 100% luck forever!", ephemeral=True)
for item in view.children:
if item.custom_id == "first_luck":
view.remove_item(item)
break
await interaction.message.edit(view=view)
first_luck_button.callback = first_luck_callback
view.add_item(first_luck_button)
elif random.random() < 0.6 and luck_opportunities.get(user_id, 0) < 4:
luck_opportunities[user_id] = luck_opportunities.get(user_id, 0) + 1
increase_luck_button = discord.ui.Button(style=discord.ButtonStyle.success, label="Increase Luck", custom_id=f"increase_luck_{luck_opportunities[user_id]}")
async def increase_luck_callback(interaction: discord.Interaction):
if interaction.user.id != user_id:
await interaction.response.send_message("You cannot use this button.", ephemeral=True)
return
if user_id in used_luck_opportunities and len(used_luck_opportunities[user_id]) >= 4:
await interaction.response.send_message("You have already used all your luck opportunities.", ephemeral=True)
return
current_luck = luck_multipliers.get(user_id, 1)
new_luck = min(current_luck + 1, 10)
luck_multipliers[user_id] = new_luck
luck_expiration[user_id] = time.time() + 1800
if user_id not in used_luck_opportunities:
used_luck_opportunities[user_id] = set()
used_luck_opportunities[user_id].add(luck_opportunities[user_id])
luck_percentage = (new_luck - 1) * 100
await interaction.response.send_message(f"Your luck has been increased to {luck_percentage}% for 30 minutes!", ephemeral=True)
for item in view.children:
if item.custom_id == interaction.custom_id:
view.remove_item(item)
break
await interaction.message.edit(view=view)
increase_luck_button.callback = increase_luck_callback
view.add_item(increase_luck_button)
return embed, view
@app_commands.command(name="petroll", description="Roll for a random pet")
async def petroll(interaction: discord.Interaction):
await interaction.response.defer()
result = await perform_roll(interaction)
if result:
await interaction.followup.send(embed=result[0], view=result[1])
else:
await interaction.followup.send("An error occurred.")
@app_commands.command(name="balance", description="Check your current balance")
async def balance(interaction: discord.Interaction):
user_id = interaction.user.id
current_balance = user_cash.get(user_id, 0)
await interaction.response.send_message(f"Your current balance is ${current_balance}.", ephemeral=True)
@app_commands.command(name="dice", description="Roll the dice and bet")
async def dice(interaction: discord.Interaction, bet: int):
await roll_dice(interaction, bet)
async def roll_dice(interaction: discord.Interaction, bet: int):
user_id = interaction.user.id
balance = user_cash.get(user_id, 0)
if bet <= 0:
await interaction.response.send_message("Bet Higher than 0 Idiot.")
return
if bet > balance:
await interaction.response.send_message(f"You don't have enough cash. Your current balance is ${balance:.2f}")
return
embed = discord.Embed(title="Dice Roll", description=f"{interaction.user.name} is betting ${bet:.2f}", color=0x787878)
embed.add_field(name="Current Balance", value=f"${balance:.2f}", inline=False)
roll_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="Roll the Dice", custom_id="roll_dice")
async def roll_dice_callback(interaction: discord.Interaction):
nonlocal balance
result = random.choice(["win", "lose"])
if result == "win":
winnings = bet
balance += winnings
result_text = f"You won ${winnings:.2f}!"
else:
balance -= bet
result_text = f"You lost ${bet:.2f}."
user_cash[user_id] = balance
embed.clear_fields()
embed.add_field(name="Result", value=result_text, inline=False)
embed.add_field(name="New Balance", value=f"${balance:.2f}", inline=False)
roll_again_button = discord.ui.Button(style=discord.ButtonStyle.primary, label="Roll Again", custom_id="roll_again")
async def roll_again_callback(interaction: discord.Interaction):
if interaction.user.id == user_id:
await roll_dice(interaction, bet)
else:
await interaction.response.send_message("you cant roll this", ephemeral=True)
roll_again_button.callback = roll_again_callback
new_view = discord.ui.View()
new_view.add_item(roll_again_button)
await interaction.response.edit_message(embed=embed, view=new_view)
roll_button.callback = roll_dice_callback
view = discord.ui.View()
view.add_item(roll_button)
if interaction.response.is_done():
await interaction.followup.send(embed=embed, view=view)
else:
await interaction.response.send_message(embed=embed, view=view) |