Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Dan Play Ученик (88), открыт 3 недели назад
Сделал код на Python для системы тикетов в итоге пишет ошибку что модуль не обнаружен.
Вот код который я написал использую библиотеку Disnake

 @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

ну и там много их. ВОобщем прошу поомчь. Заранее всем спасибо
4 ответа
Анонимус Мудрец (16200) 3 недели назад
Усложним код системы тикетов, добавив несколько дополнительных функций и улучшений. Мы можем реализовать:
  • Функцию для просмотра всех открытых тикетов.
  • Функцию для назначения администратора на тикет.
  • Логи для отслеживания действий.
  • Отправку уведомлений в канал, когда тикет создается или закрывается.

Вот обновленный код с этими улучшениями:
 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")
Dan PlayУченик (88) 3 недели назад
Привет пишет ошибку File "C:\Users\Admin\bot\bot.py", line 3, in <module>
from disnake.ui import Button, ButtonStyle
ImportError: cannot import name 'ButtonStyle' from 'disnake.ui' (C:\Users\Admin\AppData\Local\Programs\Python\Python313\Lib\site-packages\disnake\ui\__init__.py)
Sergio 2.1 Оракул (67655) 3 недели назад
 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
ᅠ ᅠ Гуру (3654) 3 недели назад
Видимо, тебе уже дали ответ. Но есть вопрос к тебе. Может тогда не ты "сделал" код, а бот тебе его написал? Как минимум, даже словосочетание "сделал код" - звучит странно. Если у тебя столько ошибок и ты не знаешь как их исправить, значит ты не знаешь в чем функционал весь?
Linard Plukis Знаток (403) 2 недели назад
 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')
Похожие вопросы