from discord.ui import Button from discord import Interaction, ButtonStyle from libs.Roles import Roles from data.models.Language import Language class LanguageButton(Button): def __init__(self, style=ButtonStyle.blurple, label="Not Set"): super().__init__() self.style = style self.label = label self.disabled: bool = False async def callback(self, interaction: Interaction): role = await Roles().get_guild_role(interaction.guild, self.label) messages = [] if role in interaction.user.roles: await Roles().remove_role(interaction.guild, self.label, interaction.user) lang_frameworks = await self.bot.db.language_frameworks(interaction.client.db) framework_roles = await Roles().get_roles(interaction.guild, lang_frameworks) frameworks_to_remove = list(set(framework_roles) & set(interaction.user.roles)) for framework in frameworks_to_remove: await Roles().remove_role(framework, interaction.user) messages.append(f"You are no longer associated with the {framework.name} framework group") messages.append(f"You are no longer associated with the {self.label} language group") else: await Roles().add_role(interaction.guild, self.label, interaction.user) messages.append(f"You are now associated with the {self.label} language group") await interaction.response.send_message("\n".join(messages), delete_after=5, ephemeral=True) async def get_language_frameworks(self, db): language = db.session.query(Language).filter(Language.label == self.label).first() lang_frameworks = [fw.label for fw in language.frameworks] return lang_frameworks