from discord.ext import commands import discord class Bot(commands.Bot): def __init__(self): super().__init__( command_prefix=commands.when_mentioned_or("$"), intents=discord.Intents(guilds=True, messages=True) ) async def on_ready(self): print(f"Logged in as {self.user} (ID: {self.user.id})") print("------") # Define a simple View that gives us a confirmation menu class Confirm(discord.ui.View): def __init__(self): super().__init__() self.value = None # When the confirm button is pressed, set the inner value to `True` and # stop the View from listening to more input. # We also send the user an ephemeral message that we're confirming their choice. @discord.ui.button(label="Confirm", style=discord.ButtonStyle.green) async def confirm(self, button: discord.ui.Button, interaction: discord.Interaction): await interaction.response.send_message("Confirming", ephemeral=True) self.value = True self.stop() # This one is similar to the confirmation button except sets the inner value to `False` @discord.ui.button(label="Cancel", style=discord.ButtonStyle.grey) async def cancel(self, button: discord.ui.Button, interaction: discord.Interaction): await interaction.response.send_message("Cancelling", ephemeral=True) self.value = False self.stop() bot = Bot() @bot.command() async def ask(ctx: commands.Context): """Asks the user a question to confirm something.""" # We create the view and assign it to a variable so we can wait for it later. view = Confirm() await ctx.send("Do you want to continue?", view=view) # Wait for the View to stop listening for input... await view.wait() if view.value is None: print("Timed out...") elif view.value: print("Confirmed...") else: print("Cancelled...") bot.run("token")