File size: 5,186 Bytes
3093cbf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import discord
from discord import app_commands
import aiohttp
import random
import time

luck_multipliers = {}
luck_expiration = {}
luck_opportunities = {}

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://petsgo.biggamesapi.io/api/Rap")
    collection_data = await fetch_data("https://petsgo.biggamesapi.io/api/collection/Pets")

    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("errer.")

    roll_again_button.callback = roll_again_callback

    view = discord.ui.View()
    view.add_item(roll_again_button)

    if random.random() < 0.2:
        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("cannot use", 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
            
            luck_percentage = (new_luck - 1) * 100
            await interaction.response.send_message(f"luck 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("errer")