[Python] How can I make a menu that works all the time and does its job all the time?...

Discussão em 'Python' iniciado por Stack, Fevereiro 8, 2025.

  1. Stack

    Stack Membro Participativo

    I make a button then select menu, but after 5 minutes i have a interaction error.

    i try to make a use command when bot reconect but he dont luse there connection but this is usless. I try to make a loop every 5 min, bot can use it command in channel, but this is a bad solution. Also i can't find anything about it on the net. I didn't find in official documintation discrord py.

    code:

    async def ticket(ctx):
    class TicketButton(discord.ui.Button):
    def __init__(self):
    super().__init__(label="Создать тикет", style=discord.ButtonStyle.primary)

    user = ctx.author
    guild = ctx.guild

    async def callback(self, interaction):
    await interaction.response.defer()

    class SelectView(discord.ui.View):
    def __init__(self):
    super().__init__(timeout=None)
    self.select = discord.ui.Select(
    placeholder="Выберите опцию",
    options=[
    discord.SelectOption(label="Жалоба на игрока", value="1"),
    discord.SelectOption(label="Жалоба на администрацию", value="2"),
    discord.SelectOption(label="Общие вопросы", value="3"),
    discord.SelectOption(label="Вопросы по донату", value="4"),
    ]
    )
    self.add_item(self.select)

    async def select_callback(self, interaction):
    value = interaction.data['values'][0]
    category_name = "----ticket----"

    category = discord.utils.get(interaction.guild.categories, name=category_name)
    if not category:
    try:
    category = await interaction.guild.create_category(category_name)
    except discord.Forbidden:
    await interaction.response.send_message("У бота нет прав на создание категорий!", ephemeral=True)
    return

    channel_name = f"{interaction.user.name}-{value}"
    channel = await category.create_text_channel(channel_name)

    overwrites = {
    interaction.guild.default_role: discord.PermissionOverwrite(read_messages=False),
    interaction.user: discord.PermissionOverwrite(read_messages=True)
    }
    await channel.set_permissions(interaction.guild.default_role, overwrite=overwrites[interaction.guild.default_role])
    await channel.set_permissions(interaction.user, overwrite=overwrites[interaction.user])

    option_label = self.select.options[int(value) - 1].label
    await channel.send(f"Вы выбрали опцию: {option_label}, ожидайте администрацию!")

    await interaction.response.send_message(f"Канал {channel.mention} создан!", ephemeral=True)

    close_button = discord.ui.Button(label="Закрыть тикет", style=discord.ButtonStyle.danger)

    async def close_callback(interaction):
    await channel.delete()


    close_button.callback = close_callback

    close_view = discord.ui.View()
    close_view.add_item(close_button)
    await channel.send("Нажмите на кнопку ниже, чтобы закрыть тикет:", view=close_view)

    select_view = SelectView()
    select_view.select.callback = select_view.select_callback
    await interaction.followup.send("Выберите опцию:", view=select_view, ephemeral=True)


    button_view = discord.ui.View()
    ticket_button = TicketButton()
    button_view.add_item(ticket_button)
    await ctx.send("Нажмите на кнопку ниже, чтобы создать тикет:", view=button_view)

    Continue reading...

Compartilhe esta Página