Untitled
unknown
python
a year ago
4.8 kB
11
Indexable
class Pokemon_catch(View):
def __init__(self, user_id):
self.user_id = user_id
self.clicks = self.retries = self.food_given = 0
self.catched = False
self.choosen = self.item_name = self.emoji = None
self.max_attempts = pyrandom.randint(2, 5)
self.max_food_given = 3
def embed(self, title, desc, color=0x248046):
return Message(title=title, description=desc, color=color)
async def check_user(self, interaction):
if interaction.user.id != self.user_id:
await defer(interaction, action="create", ephemeral=True)
respond_interaction(interaction, "❌ Vous ne pouvez pas cliquer.")
return False
return True
@button(label="Ball", style="success", emoji=emoji('pokeball', True))
async def catch_button(self, interaction, b):
if not await self.check_user(interaction): return
await defer(interaction, action="update")
if self.clicks >= self.max_attempts:
embed = self.embed(
"Oh non...",
f"**{self.item_name}** s'est échappé après **{self.clicks}** essais... 😔"
)
respond_interaction(
interaction, content=None, embed=embed, components=None
)
self.stop()
return
self.clicks += 1
capture_chance = min(
self.choosen['weight'] * (0.2 * self.clicks) - 0.05 * self.food_given, 1.0
)
if pyrandom.random() < capture_chance:
self.catched = True
self.emoji = "<a:apokeball:1287191436864917504>"
await SlashMongo("inventory", "items").update_one(
{"item_numb": str(self.choosen["item_numb"]),
"user_id": str(self.user_id)}, {"$inc": {"count": 1}}, upsert=True
)
embed = self.embed(
"Bravo ! ✨",
f"Tu as réussi à capturer **{self.item_name}** ! 🎉"
)
respond_interaction(
interaction, content=self.emoji, embed=embed, components=None
)
self.stop()
return
embed = self.embed(
"❌ Oh non !",
f"La capture a échoué. Essai N° **{self.clicks}**. Essaie encore !"
)
respond_interaction(interaction, embed=embed)
@button(label="Appât", style="secondary", emoji="🍖")
async def feed_button(self, interaction, b):
if not await self.check_user(interaction): return
await defer(interaction, action="update")
if self.food_given < self.max_food_given:
self.food_given += 1
if pyrandom.random() < 0.6:
self.max_attempts += 1
embed = self.embed(
f"🍖 **{self.item_name}** mange...",
f"### Appâts restants: **`{self.max_food_given - self.food_given}`**\n"
"Réduis les chances de fuite,\n mais rend la capture plus difficile."
)
respond_interaction(interaction, embed=embed)
else:
embed = self.embed(
"❌ Limite atteinte",
"Tu as atteint la limite max de 3 appâts\npour ce pokemon."
)
respond_interaction(interaction, embed=embed)
@button(label="", style="primary", emoji="🔄")
async def retry_button(self, interaction, b):
if not await self.check_user(interaction): return
await defer(interaction, action="update")
if self.retries < 3:
self.retries += 1
self.clicks = self.food_given = 0
await self.start(interaction)
else:
embed = self.embed(
"❌ Limite atteinte",
"Tu as atteint la limite max de 3 relances."
)
respond_interaction(interaction, embed=embed)
async def start(self, interaction):
all_emojis = await SlashMongo("inventory", "emojis").find({})
self.choosen = pyrandom.choices(
all_emojis, weights=map(lambda item: item['weight'], all_emojis))[0]
self.item_name = self.choosen['emoji_name']
self.emoji = f"<a:{self.item_name}:{self.choosen['emoji_id']}>"
embed = self.embed(
f"Un `{self.item_name}` sauvage apparaît !",
f"🔄 Relances restantes : **{3 - self.retries}**"
)
respond_interaction(
interaction, content=self.emoji, embed=embed, components=self
)
view = Pokemon_catch(user.id)
await view.start(interaction)
exit_code = await view.wait(scope=scope)
if exit_code == "timeout":
respond_interaction(
interaction, content=f"⏰ {user.mention}, vous avez été déconnecté.",
embed=None, components=None
)
return
Editor is loading...
Leave a Comment