Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Помогите с Python код.

Сделал код на Python для системы тикетов в итоге пишет ошибку что модуль не обнаружен.
Вот код который я написал использую библиотеку Disnake

1234567891011121314151617181920212223242526272829303132
 @bot.command() 
async def ticket_create(ctx): 
    global ticket_counter 
 
    channel = await ctx.guild.create_text_channel(f'ticket-{ticket_counter}') 
    ticket_counter += 1 
 
    message = await channel.send("Привет нажми на кнопку ниже чтобы создать тикет", 
                                   components=[Button(label="Создать", style=ButtonStyle.green)]) 
     
    def check(res): 
        return res.user == ctx.author and res.channel == channel 
     
    res = await bot.wait_for("button_click", check=check) 
     
    if res.component.label == "Создать": 
        await message.edit(content="Тикет создан. Администраторы скоро ответят.", 
                            components=[Button(label="Отменить", style=ButtonStyle.red), 
                                        Button(label="Решено", style=ButtonStyle.green)]) 
 
        while True: 
            res = await bot.wait_for("button_click", check=check) 
            if res.component.label == "Отменить": 
                await channel.send("Тикет закрыт администратором. Удаление через 10 секунд") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break 
            elif res.component.label == "Решено": 
                await channel.send("Администратор решил этот тикет. Удаление через 10 секунд.") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break  


Вот ошибка

Command raised an exception: NameError: name 'Button' is not defined

ну и там много их. ВОобщем прошу поомчь. Заранее всем спасибо

По дате
По рейтингу
Аватар пользователя
8мес

Видимо, тебе уже дали ответ. Но есть вопрос к тебе. Может тогда не ты "сделал" код, а бот тебе его написал? Как минимум, даже словосочетание "сделал код" - звучит странно. Если у тебя столько ошибок и ты не знаешь как их исправить, значит ты не знаешь в чем функционал весь?

Аватар пользователя
Оракул
8мес
12345678910111213141516171819202122232425262728293031323334353637383940
 from disnake.ui import Button, ButtonStyle 
 
@bot.command() 
async def ticket_create(ctx): 
    global ticket_counter 
 
    channel = await ctx.guild.create_text_channel(f'ticket-{ticket_counter}') 
    ticket_counter += 1 
 
    message = await channel.send( 
        "Привет, нажми на кнопку ниже, чтобы создать тикет", 
        components=[Button(label="Создать", style=ButtonStyle.green)] 
    ) 
 
    def check(res): 
        return res.user == ctx.author and res.channel == channel 
 
    res = await bot.wait_for("button_click", check=check) 
 
    if res.component.label == "Создать": 
        await message.edit( 
            content="Тикет создан. Администраторы скоро ответят.", 
            components=[ 
                Button(label="Отменить", style=ButtonStyle.red), 
                Button(label="Решено", style=ButtonStyle.green) 
            ] 
        ) 
 
        while True: 
            res = await bot.wait_for("button_click", check=check) 
            if res.component.label == "Отменить": 
                await channel.send("Тикет закрыт администратором. Удаление через 10 секунд") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break 
            elif res.component.label == "Решено": 
                await channel.send("Администратор решил этот тикет. Удаление через 10 секунд.") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break 
Аватар пользователя
Просветленный
8мес

Усложним код системы тикетов, добавив несколько дополнительных функций и улучшений. Мы можем реализовать:

  • Функцию для просмотра всех открытых тикетов.

  • Функцию для назначения администратора на тикет.

  • Логи для отслеживания действий.

  • Отправку уведомлений в канал, когда тикет создается или закрывается.


Вот обновленный код с этими улучшениями:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
 import disnake 
from disnake.ext import commands 
from disnake.ui import Button, ButtonStyle 
import asyncio 
bot = commands.Bot(command_prefix="!") 
ticket_counter = 1  # Инициализируем счетчик тикетов 
open_tickets = {}  # Словарь для хранения открытых тикетов 
@bot.command() 
async def ticket_create(ctx): 
    global ticket_counter 
    channel = await ctx.guild.create_text_channel(f'ticket-{ticket_counter}') 
    ticket_counter += 1 
    # Сохраняем информацию о тикете 
    open_tickets[channel.id] = ctx.author 
    message = await channel.send("Привет, нажми на кнопку ниже чтобы создать тикет", 
                                   components=[Button(label="Создать", style=ButtonStyle.green)]) 
    def check(res): 
        return res.user == ctx.author and res.channel == channel 
    res = await bot.wait_for("button_click", check=check) 
    if res.component.label == "Создать": 
        await message.edit(content="Тикет создан. Администраторы скоро ответят.", 
                            components=[Button(label="Отменить", style=ButtonStyle.red), 
                                        Button(label="Решено", style=ButtonStyle.green)]) 
        await channel.send(f"{ctx.author.mention}, ваш тикет открыт! Ожидайте ответа администратора.") 
        while True: 
            res = await bot.wait_for("button_click", check=check) 
            if res.component.label == "Отменить": 
                await channel.send("Тикет закрыт администратором. Удаление через 10 секунд") 
                await asyncio.sleep(10) 
                await channel.delete() 
                del open_tickets[channel.id] 
                break 
            elif res.component.label == "Решено": 
                await channel.send("Администратор решил этот тикет. Удаление через 10 секунд.") 
                await asyncio.sleep(10) 
                await channel.delete() 
                del open_tickets[channel.id] 
                break 
@bot.command() 
async def view_tickets(ctx): 
    if open_tickets: 
        tickets_list = "\n".join([f"<#{channel_id}> - Открыт пользователем {user.mention}"  
                                   for channel_id, user in open_tickets.items()]) 
        await ctx.send(f"Открытые тикеты:\n{tickets_list}") 
    else: 
        await ctx.send("Нет открытых тикетов.") 
@bot.command() 
async def assign_ticket(ctx, ticket_channel: disnake.TextChannel): 
    if ticket_channel.id in open_tickets: 
        await ticket_channel.send(f"{ctx.author.mention} назначен на этот тикет.") 
    else: 
        await ctx.send("Указанный тикет не существует или закрыт.") 
# Запуск бота 
bot.run("YOUR_BOT_TOKEN")  
Аватар пользователя
Профи
8мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
 import disnake 
from disnake.ext import commands 
from disnake import Button, ButtonStyle 
import asyncio 
 
bot = commands.Bot(command_prefix='!')  # Установите префикс для команд 
ticket_counter = 1  # Инициализация счетчика тикетов 
 
@bot.command() 
async def ticket_create(ctx): 
    global ticket_counter 
 
    # Создаем текстовый канал для тикета 
    channel = await ctx.guild.create_text_channel(f'ticket-{ticket_counter}') 
    ticket_counter += 1 
 
    # Отправляем сообщение с кнопкой "Создать" 
    message = await channel.send( 
        "Привет, нажми на кнопку ниже чтобы создать тикет", 
        components=[Button(label="Создать", style=ButtonStyle.green)] 
    ) 
 
    def check(res): 
        return res.user == ctx.author and res.channel == channel 
 
    # Ожидаем нажатия кнопки "Создать" 
    res = await bot.wait_for("button_click", check=check) 
 
    if res.component.label == "Создать": 
        await message.edit( 
            content="Тикет создан. Администраторы скоро ответят.", 
            components=[ 
                Button(label="Отменить", style=ButtonStyle.red), 
                Button(label="Решено", style=ButtonStyle.green) 
            ] 
        ) 
 
        while True: 
            res = await bot.wait_for("button_click", check=check) 
            if res.component.label == "Отменить": 
                await channel.send("Тикет закрыт администратором. Удаление через 10 секунд.") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break 
            elif res.component.label == "Решено": 
                await channel.send("Администратор решил этот тикет. Удаление через 10 секунд.") 
                await asyncio.sleep(10) 
                await channel.delete() 
                break 
 
# Запуск бота 
bot.run('YOUR_BOT_TOKEN')