disabled model subscribe view

Signed-off-by: Marc Ahlgrim <marc@onemarcfifty.com>
This commit is contained in:
Marc Ahlgrim
2022-09-19 18:57:04 +02:00
parent 507794b45e
commit 6444ee2ce7
2 changed files with 86 additions and 4 deletions
+9 -3
View File
@@ -1,3 +1,4 @@
from pickle import TRUE
import discord import discord
import random import random
import utils import utils
@@ -11,6 +12,7 @@ from discord.ext.commands import Bot,AutoShardedBot
from classes.dis_events import DiscordEvents from classes.dis_events import DiscordEvents
from classes.subscribe import Subscribe from classes.subscribe import Subscribe
from classes.subscribemenu import SubscribeView
from classes.config import Config from classes.config import Config
from dataclasses import dataclass from dataclasses import dataclass
@@ -66,13 +68,17 @@ class OMFBot(AutoShardedBot):
@self.tree.command(name="subscribe", description="(un)subscribe to Events)") @self.tree.command(name="subscribe", description="(un)subscribe to Events)")
async def subscribe(interaction: discord.Interaction): async def subscribe(interaction: discord.Interaction):
x: Subscribe #x: Subscribe
x: SubscribeView
member: discord.Member member: discord.Member
guildNode=self.configData.readGuild(interaction.guild.id) guildNode=self.configData.readGuild(interaction.guild.id)
member = interaction.user member = interaction.user
x=Subscribe(autoEvents=guildNode["AUTO_EVENTS"],member=member) #x=Subscribe(autoEvents=guildNode["AUTO_EVENTS"],member=member)
await interaction.response.send_modal(x) #await interaction.response.send_modal(x)
x=SubscribeView(autoEvents=guildNode["AUTO_EVENTS"],member=member)
print(x)
await interaction.response.send_message("Chose",view=x ,ephemeral=True)
# The setup command will ask for the guild parameters and # The setup command will ask for the guild parameters and
# read them in # read them in
+76
View File
@@ -0,0 +1,76 @@
import discord
import traceback
from numpy import array
from classes.config import Config
# ############################################
# the Subscribe() class is a modal ui dialog
# that let's you select one or multiple
# roles that will be assigned to you.
# The roles are set in the config.AUTO_EVENTS
# variable
# ############################################
class SubscribeView(discord.ui.View):
def __init__(self, autoEvents : array,member:discord.Member):
super().__init__(timeout=180)
self.add_item(SubscribeMenu(autoEvents=autoEvents,member=member))
class SubscribeMenu(discord.ui.Select):
def __init__(self, autoEvents : array,member:discord.Member) -> None:
# create the menu items from the Event roles:
menu_options = []
for menu_option in autoEvents:
menu_options.append(discord.SelectOption(
label= menu_option["notify_hint"],
value=menu_option["subscription_role_num"]))
# Make sure the existing user roles are preselected
for option in menu_options:
role = option.value
if not (member.get_role(role) is None):
option.default=True
super().__init__(placeholder="Select your subscription",max_values=len(autoEvents),min_values=0,options=menu_options)
async def callback(self, interaction: discord.Interaction):
role: discord.Role
roles = interaction.user.guild.roles
member: discord.Member
member = interaction.user
# first we remove all roles
for option in self.options:
option.default=False
introle=int(option.value)
role=member.get_role(introle)
if not (role is None):
await member.remove_roles(role)
# then we assign all selected roles
# unfortunately we need to loop through all rolles
# maybe there is a better solution ?
for value in self.values:
for role in roles:
if int(value) == int(role.id):
await member.add_roles(role)
for option in self.options:
if int(option.value) == int(value):
option.default=True
await interaction.response.send_message(content="Updated your subscriptions!",ephemeral=True)
async def on_error(self, interaction: discord.Interaction, error: Exception) -> None:
await interaction.response.send_message('Oops! Something went wrong.', ephemeral=True)
# Make sure we know what the error actually is
traceback.print_tb(error.__traceback__)