@goti

Как сделать что-бы определённая роль могла просматривать скрытые каналы, без категории (тикеты)?

Привет! Написал код для тикетов, всё работает. Каналы создаются и т.д., но есть одна проблема: Эти каналы создаются НЕ в категории, или-же их видят только АДМИНИСТРАТОРЫ сервера (те, у которых есть в роли право Администратор)

Как исправить?
import disnake
from disnake import ButtonStyle
from disnake.ext import commands
import sqlite3
import os

modlist = [962281185277517824, 836828267381391380]

# 14:30 убрать у папы
class clb(disnake.ui.View):
    def __init__(self, bot):
        super().__init__(timeout=None)
        self.bot = bot

    @disnake.ui.button(label="Удалить тикет", style=ButtonStyle.danger, emoji='<:ticketbutton:933130024356302898>', custom_id="delete_ticket")
    async def delete_ticket(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
        if interaction.author.id in modlist:
            con = sqlite3.connect('LastEmpires.db')
            cur = con.cursor()
            cur.execute(f'''DELETE FROM tickets WHERE id_channel = {interaction.channel.id}''')
            await interaction.channel.delete()
            con.commit()
            con.close()
        else:
            await interaction.send("Вы не можете закрыть тикет, ожидайте администратора", ephemeral=True)


class ticket_buttons(disnake.ui.View):
    def __init__(self, bot):
        self.bot = bot
        super().__init__(timeout=None)

    @disnake.ui.button(label="Открыть тикет", style=ButtonStyle.primary, emoji='<:ticketbutton:933130024356302898>', custom_id="open_ticket")
    async def open_ticket(self, button: disnake.ui.Button, interaction: disnake.MessageInteraction):
        con = sqlite3.connect('LastEmpires.db')
        cur = con.cursor()
        a1 = cur.execute(f"SELECT id_member FROM tickets WHERE id_member = {interaction.author.id}").fetchone()
        if a1 is None:
            guild = interaction.guild
        if role := member.guild.roles(1069793604308062309):
            overwrites = {
                guild.default_role: disnake.PermissionOverwrite(view_channel=False),
                role: disnake.PermissionOverwrite(view_channel=True),
                interaction.author: disnake.PermissionOverwrite(view_channel=True)
            }
            ticket_channel = await guild.create_text_channel(name=f"Тикет-{interaction.author.name}".replace(" ", "_"),
                                                             category=self.bot.get_channel(1096118680955404308).category,
                                                             overwrites=overwrites)
            cur.execute(f'''INSERT INTO tickets VALUES ({interaction.author.id}, {ticket_channel.id})''')
            ticket_embed = disnake.Embed(title="Поддержка", colour=0x2F3136, description=f"Здравствуйте, {interaction.author.mention}!  Что-бы стать игроком нашего сервера - заполните форму ниже.\n\n"
                                                                              "*1 - Ваш ник в игре*\n" 
                                                                              "*2 - Как вы узнали о нас?*\n"
                                                                              "*3 - Ваше настоящее имя*\n\n"
                                                                              "Если у Вас какой-либо другой вопрос - задайте его тут. Формы подачи вопроса - нет.")
            await ticket_channel.send(embed=ticket_embed, view=clb(bot=self.bot))
            await interaction.send(f"Ваш тикет: {ticket_channel.mention}", ephemeral=True)
        else:
            channel1 = cur.execute(f"SELECT id_channel FROM tickets WHERE id_member = {interaction.author.id}").fetchone()
            await interaction.send(f"У вас уже есть тикет - <#{channel1[0]}>!", ephemeral=True)
        con.commit()
        con.close()


class ticket_system(commands.Cog):
    def __init__(self, bot):
        self.bot = bot
        self.persistent_views_added = False

    @commands.Cog.listener()
    async def on_member_remove(self, member = disnake.Member):
        con = sqlite3.connect('LastEmpires.db')
        cur = con.cursor()
        check = cur.execute(f"SELECT id_member FROM tickets WHERE id_member = {member.id}").fetchone()
        if check is None:
            pass
        else:
            check1 = cur.execute(f"SELECT id_channel FROM tickets WHERE id_member = {check[0]}").fetchone()
            cur.execute(f'''DELETE FROM tickets WHERE id_member = {member.id}''')
            channel = self.bot.get_channel(check1[0])
            await channel.send(f"{member.name}, покинул сервер, <@403829627753070603>")
        con.commit()
        con.close()

    @commands.command()
    async def tstart(self, ctx):
        con = sqlite3.connect('LastEmpires.db')
        cur = con.cursor()
        cur.execute('''CREATE TABLE tickets (id_member INT, id_channel INT)''')
        con.commit()
        con.close()
        tstartembed = disnake.Embed(title="Успех", colour=0x2F3136, description="Тикет бот успешно установлен, создана таблица для работы, осталось отправить сообщение от тикетов ``*ticket``")
        await ctx.send(embed=tstartembed)

    @commands.Cog.listener()
    async def on_ready(self):
        if not self.persistent_views_added:
            self.bot.add_view(ticket_buttons(bot=self.bot))
            self.bot.add_view(clb(bot=self.bot))
            self.persistent_views_added = True

    @commands.command()
    async def ticket(self, ctx):
        ticket_embed = disnake.Embed(title="Поддержка", colour=0x2F3136, description=f"Здравствуйте игрок, что бы открыть тикет нажмите на кнопку ниже.")
        await ctx.send(embed=ticket_embed, view=ticket_buttons(bot=self.bot))


def setup(bot):
    bot.add_cog(ticket_system(bot))
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы