Skip to content
Snippets Groups Projects
Unverified Commit c471ae10 authored by Fabian's avatar Fabian Committed by GitHub
Browse files

add dialog with custom buttons (#119)

parent cb731410
No related branches found
No related tags found
1 merge request!128Merge learninggroup changes to release
......@@ -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}
]
)
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment