From c471ae1007cfb731221dab35defd7bed0e3331d9 Mon Sep 17 00:00:00 2001 From: Fabian <75286597+ffaadd@users.noreply.github.com> Date: Sun, 17 Oct 2021 13:16:11 +0200 Subject: [PATCH] add dialog with custom buttons (#119) --- utils.py | 21 ++++++++++++++++++--- views/confirm_view.py | 19 ------------------- views/dialog_view.py | 31 +++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 22 deletions(-) delete mode 100644 views/confirm_view.py create mode 100644 views/dialog_view.py diff --git a/utils.py b/utils.py index b41e8bb..df975cd 100644 --- a/utils.py +++ b/utils.py @@ -2,7 +2,8 @@ import os import disnake import re -from views.confirm_view import ConfirmView + +from views.dialog_view import DialogView async def send_dm(user, message, embed=None): @@ -44,8 +45,22 @@ def to_minutes(time): return int(time) -async def confirm(channel, title, description, message="", callback=None): +async def dialog(channel, title, description, message="", buttons=None, callback=None): embed = disnake.Embed(title=title, description=description, color=19607) - return await channel.send(message, embed=embed, view=ConfirmView(callback)) + return await channel.send(message, embed=embed, view=DialogView(buttons, callback)) + + +async def confirm(channel, title, description, message="", callback=None): + return await dialog( + channel=channel, + title=title, + description=description, + message=message, + callback=callback, + buttons=[ + {"emoji": "👍", "value": True}, + {"emoji": "👎", "value": False} + ] + ) diff --git a/views/confirm_view.py b/views/confirm_view.py deleted file mode 100644 index 0f2517c..0000000 --- a/views/confirm_view.py +++ /dev/null @@ -1,19 +0,0 @@ -import disnake -from disnake import MessageInteraction, ButtonStyle -from disnake.ui import Button - - -class ConfirmView(disnake.ui.View): - def __init__(self, callback=None): - super().__init__(timeout=None) - self.callback = callback - - @disnake.ui.button(emoji="👍", style=ButtonStyle.grey) - async def btn_subscribe(self, button: Button, interaction: MessageInteraction): - if self.callback: - await self.callback(True, button, interaction) - - @disnake.ui.button(emoji="👎", style=ButtonStyle.grey) - async def btn_unsubscribe(self, button: Button, interaction: MessageInteraction): - if self.callback: - await self.callback(False, button, interaction) \ No newline at end of file diff --git a/views/dialog_view.py b/views/dialog_view.py new file mode 100644 index 0000000..ca1fe49 --- /dev/null +++ b/views/dialog_view.py @@ -0,0 +1,31 @@ +import disnake +from disnake import MessageInteraction, ButtonStyle +from disnake.ui import Button + + +class DialogView(disnake.ui.View): + def __init__(self, buttons=None, callback=None): + super().__init__(timeout=None) + self.callback = callback + for button_config in buttons: + self.add_button(button_config) + + def add_button(self, config): + button = disnake.ui.Button( + style=config.get("style", ButtonStyle.grey), + label=config.get("label", None), + disabled=config.get("disabled", False), + custom_id=config.get("custom_id", None), + url=config.get("url", None), + emoji=config.get("emoji", None), + row=config.get("row", None) + ) + button.value = config.get("value") + button.callback = self.internal_callback(button) + self.add_item(button) + + def internal_callback(self, button): + async def button_callback(interaction): + await self.callback(button, interaction, value=button.value) + return button_callback + -- GitLab