Files

57 lines
1.7 KiB
Python
Raw Permalink Normal View History

# Copyright (c) Paillat-dev
# SPDX-License-Identifier: MIT
2024-08-02 15:13:21 +02:00
import os
import discord
from dotenv import load_dotenv
2024-08-02 15:13:21 +02:00
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) -> None:
2024-08-02 15:13:21 +02:00
super().__init__()
self.counter: int = 0
self.counter_button: ReactiveButton = ReactiveButton(
2024-08-03 11:29:52 +02:00
label=ReactiveValue(lambda: f"Count: {self.counter}", "Count: 0"),
2024-08-02 15:13:21 +02:00
style=ReactiveValue(
lambda: discord.ButtonStyle.primary if self.counter % 2 == 0 else discord.ButtonStyle.secondary,
discord.ButtonStyle.primary,
),
)
self.reset_button: ReactiveButton = ReactiveButton(
2024-08-02 15:13:21 +02:00
label="Reset",
style=discord.ButtonStyle.danger,
disabled=ReactiveValue(lambda: self.counter == 0, default=True),
2024-08-02 15:13:21 +02:00
)
2024-08-03 11:29:52 +02:00
self.counter_button.callback = self._increment
self.reset_button.callback = self._reset
2024-08-02 15:13:21 +02:00
self.add_item(self.counter_button)
self.add_item(self.reset_button)
2024-08-03 11:29:52 +02:00
async def _increment(self, interaction: discord.Interaction) -> None:
2024-08-02 15:13:21 +02:00
await interaction.response.defer()
self.counter += 1
await self.update()
2024-08-03 11:29:52 +02:00
async def _reset(self, interaction: discord.Interaction) -> None:
2024-08-02 15:13:21 +02:00
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, ephemeral=True)
2024-08-02 15:13:21 +02:00
bot.run(os.getenv("TOKEN_2"))