""" Contains various views to be used in the nomination process. """ import nextcord from nextcord.interactions import Interaction class NominateModal(nextcord.ui.Modal): """ Modal for nominating oneself. User writes a speech and then the callback sends the speech into the correct channel. """ def __init__(self): super().__init__( "Nomination", timeout=5 * 60, # 5 minutes ) self.speech = nextcord.ui.TextInput( label="Nomination Speech", style=nextcord.TextInputStyle.paragraph, placeholder="Please write your speech here.", required=True, max_length=1500, ) self.add_item(self.speech) async def callback(self, interaction: Interaction) -> None: """ Sends the nomination speech into the voting channel and enters the user into the voting database. Args: interaction (Interaction): Interaction with user. """ # TODO add nominee to database, make sure user hasn't nominated themself before, # make the nomination message better await interaction.channel.send(self.speech.value) class NominateView(nextcord.ui.View): """ The button to press to start your nomination. """ def __init__(self): super().__init__(timeout=None) @nextcord.ui.button(label="Nominate Yourself", style=nextcord.ButtonStyle.primary, custom_id="nominate") async def nominate(self, button: nextcord.ui.Button, interaction: nextcord.Interaction) -> None: await interaction.response.send_modal(NominateModal())