mirror of
https://github.com/Paillat-dev/pycord-reactive-views.git
synced 2026-01-02 01:06:18 +00:00
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
|
|
# ruff: noqa: INP001
|
||
|
|
import os
|
||
|
|
|
||
|
|
import discord
|
||
|
|
from dotenv import load_dotenv
|
||
|
|
from pycord_reactive_views import ReactiveButton, ReactiveValue, ReactiveView
|
||
|
|
|
||
|
|
load_dotenv()
|
||
|
|
|
||
|
|
bot = discord.Bot()
|
||
|
|
|
||
|
|
|
||
|
|
class Counter(ReactiveView):
|
||
|
|
"""A simple counter view that increments a counter when a button is clicked."""
|
||
|
|
|
||
|
|
def __init__(self):
|
||
|
|
super().__init__()
|
||
|
|
self.counter = 0
|
||
|
|
self.counter_button = ReactiveButton(
|
||
|
|
label=ReactiveValue(lambda: str(self.counter), "0"),
|
||
|
|
style=ReactiveValue(
|
||
|
|
lambda: discord.ButtonStyle.primary if self.counter % 2 == 0 else discord.ButtonStyle.secondary,
|
||
|
|
discord.ButtonStyle.primary,
|
||
|
|
),
|
||
|
|
)
|
||
|
|
self.reset_button = ReactiveButton(
|
||
|
|
label="Reset",
|
||
|
|
style=discord.ButtonStyle.danger,
|
||
|
|
disabled=ReactiveValue(lambda: self.counter == 0, default=True),
|
||
|
|
)
|
||
|
|
self.counter_button.callback = self._button_callback
|
||
|
|
self.reset_button.callback = self._reset_callback
|
||
|
|
self.add_item(self.counter_button)
|
||
|
|
self.add_item(self.reset_button)
|
||
|
|
|
||
|
|
async def _button_callback(self, interaction: discord.Interaction) -> None:
|
||
|
|
await interaction.response.defer()
|
||
|
|
self.counter += 1
|
||
|
|
await self.update()
|
||
|
|
|
||
|
|
async def _reset_callback(self, interaction: discord.Interaction) -> None:
|
||
|
|
await interaction.response.defer()
|
||
|
|
self.counter = 0
|
||
|
|
await self.update()
|
||
|
|
|
||
|
|
|
||
|
|
@bot.slash_command()
|
||
|
|
async def counter(ctx: discord.ApplicationContext) -> None:
|
||
|
|
"""Send the counter view."""
|
||
|
|
await Counter().send(ctx)
|
||
|
|
|
||
|
|
|
||
|
|
bot.run(os.getenv("TOKEN"))
|