import random import discord from discord.ext import commands class RockPaperScissors(discord.ui.Select): def __init__(self) -> None: options = [ discord.SelectOption( label="Scissors", description="You choose scissors.", emoji="✂" ), discord.SelectOption( label="Rock", description="You choose rock.", emoji="🪨" ), discord.SelectOption( label="Paper", description="You choose paper.", emoji="🧻" ), ] super().__init__( placeholder="Choose...", min_values=1, max_values=1, options=options, ) async def callback(self, interaction: discord.Interaction) -> None: choices = { "rock": 0, "paper": 1, "scissors": 2, } user_choice = self.values[0].lower() user_choice_index = choices[user_choice] bot_choice = random.choice(list(choices.keys())) bot_choice_index = choices[bot_choice] result_embed = discord.Embed(title="Rock Paper Scissors", color=0x7289DA) result_embed.set_author( name="Fun", icon_url="https://yes.nighty.works/raw/eW5lLm.webp" ) winner = (3 + user_choice_index - bot_choice_index) % 3 user_mention = interaction.user.mention if winner == 0: result_embed.description = f"**That's a draw!** You've chosen {user_choice} and I've chosen {bot_choice}.\n-# gg {user_mention}" result_embed.colour = 0xF59E42 elif winner == 1: result_embed.description = f"**You won!** You've chosen {user_choice} and I've chosen {bot_choice}.\n-# gg {user_mention}" result_embed.colour = 0x57F287 else: result_embed.description = f"**You lost!** You've chosen {user_choice} and I've chosen {bot_choice}.\n-# gg {user_mention}" result_embed.colour = 0xE02B2B await interaction.response.edit_message( embed=result_embed, content=None, view=None ) class RockPaperScissorsView(discord.ui.View): def __init__(self) -> None: super().__init__() self.add_item(RockPaperScissors()) def rps_command(): @commands.hybrid_command( name="rps", description="Play the rock paper scissors game against the bot." ) async def rock_paper_scissors(self, context): view = RockPaperScissorsView() embed = discord.Embed( title="Rock Paper Scissors", description="Please make your choice", color=0x7289DA, ) embed.set_author( name="Fun", icon_url="https://yes.nighty.works/raw/eW5lLm.webp" ) await context.send(embed=embed, view=view) return rock_paper_scissors