サンプル
ボタンを送信する
import os
from discord.ext import commands, components
bot = commands.Bot("c ")
bot.load_extension("discord.ext.components")
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot))
@bot.command()
async def test(ctx, button_label, hidden: bool):
await components.send(ctx, "Click this", components=[components.Button(button_label, custom_id="button1")])
com = await bot.wait_for("button_click", check=lambda c: c.name == "button1")
await com.send(f"You clicked {button_label}.", hidden=hidden)
bot.run(os.getenv("token"))
認証ボタン
import os
import discord
from discord.ext import commands, components
bot = commands.Bot("c ")
bot.load_extension("discord.ext.components")
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot))
@bot.command()
async def send_auth(ctx):
await components.send(ctx, "Click this button to get your member role", components=[components.Button("Get member role", custom_id="get_auth_role", style=components.ButtonType.green)])
@bot.event
async def on_button_click(com):
if com.custom_id == "get_auth_role":
await com.defer_source(hidden=True)
role = discord.utils.get(com.guild.roles, name="Member")
if role in com.member.roles:
await com.send("You already have your member role.")
else:
await com.member.add_roles(role)
await com.send("You got your member role. Enjoy!")
bot.run(os.getenv("token"))
Pagenation with select menu
import asyncio
import os
import discord
from discord.ext import commands
from discord.ext import components
bot = commands.Bot("c ")
bot.load_extension("discord.ext.components")
pages = [
"Done is better than perfect.\n\n--Mark Zuckerberg",
"The best way to predict the future is to invent it.\n\n--Alan Key",
"Programs must be written for people to read, and only incidentally for machines to execute.\n\n--Hal Alverson"
]
@bot.event
async def on_ready():
print('We have logged in as {0.user}'.format(bot))
@bot.command()
async def send_page(ctx):
options = []
for i, _ in enumerate(pages, 1):
options.append(components.SelectOption(f"Page {i}", f"pagenation_{i}"))
msg = await components.send(ctx, "Use select menu for switch page", components=[
components.SelectMenu("pagenation", options, "Select page...")
])
try:
while True:
com = await bot.wait_for("menu_select", check=lambda c: c.message == msg, timeout=30)
page = int(com.value.removeprefix("pagenation_"))
await com.send(pages[page - 1] + f"\n\n`Page {page}`", hidden=True)
except asyncio.TimeoutError:
return
bot.run(os.getenv("discord_bot_token"))