import random import discord from discord import ui, Interaction, TextStyle from discord.ext import commands import aiohttp import asyncio from modules.globalvars import bot from modules.volta.main import _ @bot.hybrid_command(description=_('guess_the_number')) async def guessthenumber(ctx: commands.Context): number = random.randint(1, 10) class GuessModal(ui.Modal, title=_('guess_the_number')): guess = ui.TextInput(label=_('your_guess'), style=TextStyle.short) async def on_submit(self, interaction: Interaction): try: user_guess = int(self.guess.value) except: await interaction.response.send_message("Invalid number!", ephemeral=True) return if user_guess == number: await interaction.response.send_message("Correct!", ephemeral=True) else: await interaction.response.send_message(f"Wrong! The number was {number}.", ephemeral=True) async def button_callback(interaction: Interaction): await interaction.response.send_modal(GuessModal()) button = ui.Button(label="Guess", style=discord.ButtonStyle.primary) button.callback = button_callback view = ui.View() view.add_item(button) await ctx.send("Click to guess a number from 1 to 10", view=view) @bot.hybrid_command(description="Play Hangman with a random word") async def hangman(ctx: commands.Context): async with aiohttp.ClientSession() as session: async with session.get("https://random-word-api.herokuapp.com/word?number=1") as resp: if resp.status != 200: await ctx.send("Failed to get a random word.") return data = await resp.json() word = data[0].lower() print(word) guessed_letters = set() wrong_guesses = 0 max_wrong = 6 def display_word(): return " ".join([c if c in guessed_letters else "_" for c in word]) class GuessModal(ui.Modal, title="Guess a Letter"): letter = ui.TextInput(label="Your letter guess", style=TextStyle.short, max_length=1) async def on_submit(self, interaction: Interaction): nonlocal guessed_letters, wrong_guesses guess = self.letter.value.lower() if guess in guessed_letters: await interaction.response.send_message(f"You already guessed '{guess}'!", ephemeral=True) return guessed_letters.add(guess) if guess not in word: wrong_guesses += 1 if all(c in guessed_letters for c in word): await interaction.response.edit_message(content=f"You won! The word was: **{word}**", view=None) elif wrong_guesses >= max_wrong: await interaction.response.edit_message(content=f"You lost! The word was: **{word}**", view=None) else: await interaction.response.edit_message(content=f"Word: {display_word()}\nWrong guesses: {wrong_guesses}/{max_wrong}", view=view) async def button_callback(interaction: Interaction): await interaction.response.send_modal(GuessModal()) button = ui.Button(label="Guess a letter", style=discord.ButtonStyle.primary) button.callback = button_callback view = ui.View() view.add_item(button) await ctx.send(f"Word: {display_word()}\nWrong guesses: {wrong_guesses}/{max_wrong}\nClick the button to guess a letter.", view=view)