70 lines
2.1 KiB
Python
70 lines
2.1 KiB
Python
"""Example showing how to send a modal."""
|
|
|
|
import os
|
|
import sys
|
|
|
|
try:
|
|
from dotenv import load_dotenv
|
|
except ImportError: # pragma: no cover - example helper
|
|
load_dotenv = None
|
|
print("python-dotenv is not installed. Environment variables will not be loaded")
|
|
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
|
|
|
|
from disagreement import Client, GatewayIntent, ui # type: ignore
|
|
from disagreement.ext.app_commands.decorators import slash_command
|
|
from disagreement.ext.app_commands.context import AppCommandContext
|
|
|
|
if load_dotenv:
|
|
load_dotenv()
|
|
TOKEN = os.getenv("DISCORD_BOT_TOKEN", "")
|
|
APP_ID = os.getenv("DISCORD_APPLICATION_ID", "")
|
|
|
|
if not TOKEN:
|
|
print("DISCORD_BOT_TOKEN not set")
|
|
sys.exit(1)
|
|
|
|
client = Client(token=TOKEN, intents=GatewayIntent.default(), application_id=APP_ID)
|
|
|
|
|
|
class NameModal(ui.Modal):
|
|
def __init__(self):
|
|
super().__init__(title="Your Name", custom_id="name_modal")
|
|
self.name = ui.TextInput(label="Name", custom_id="name")
|
|
self.add_item(self.name)
|
|
|
|
|
|
@slash_command(name="namemodal", description="Shows a modal")
|
|
async def _namemodal(ctx: AppCommandContext):
|
|
await ctx.interaction.response.send_modal(NameModal())
|
|
|
|
|
|
client.app_command_handler.add_command(_namemodal)
|
|
|
|
|
|
@client.event
|
|
async def on_ready():
|
|
"""Called when the bot is ready and connected to Discord."""
|
|
if client.user:
|
|
print(f"Bot is ready! Logged in as {client.user.username}")
|
|
print("Attempting to sync application commands...")
|
|
try:
|
|
if client.application_id:
|
|
await client.app_command_handler.sync_commands(
|
|
application_id=client.application_id
|
|
)
|
|
print("Application commands synced successfully.")
|
|
else:
|
|
print("Skipping command sync: application ID is not set.")
|
|
except Exception as e:
|
|
print(f"Error syncing application commands: {e}")
|
|
else:
|
|
print("Bot is ready, but client.user is missing!")
|
|
print("------")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import asyncio
|
|
|
|
asyncio.run(client.run())
|