Discord.py создание тикета ошибка ctx
Я новичок в питоне, не могу понять, почему не проходит проверка на то, указан ли человек после команды и само задание. Цель кода: Человек пишет в определенном канале команду !задача @ИмяФамилия работа Бот должен в определенной категории создать канал(это работает). Но вот проверка на ввел ли человек ссылку на работника и текст задания нет. Код:
@bot.command(aliases=['задача']) #
async def задание(stx,ctx,member: discord.Member = None,*,arg = None):
CheckTaskChannel = stx.message.channel # проверяем, можно ли работать команде в этом чате
TaskChannel = bot.get_channel(951917790518988830) # канал, где данная команда будет работать.
if member is None:
await ctx.send(embed = discord.Embed(description = '**:grey_exclamation: Обязательно укажите: пользователя!**'))
elif arg is None:
await ctx.send(embed = discord.Embed(description = '**:grey_exclamation: Обязательно укажите: задание!**'))
else:
if CheckTaskChannel == TaskChannel: #Если сообщение написано в данном канале, выполняется код.
await stx.channel.purge(limit = 1)
author = stx.message.author
guild = stx.message.guild
creport = discord.utils.get(stx.guild.categories, name = 'Задания') #название категории, где будет создаваться тема.
await guild.create_text_channel(f'Задание {author.name}', overwrites = None, category = creport, reason = 'Создание нового тикета.')
server = bot.get_guild(703596629814673428) # ID сервера.
for channel in server.channels:
if channel.name == f'Задание {author.name}':
break
else: # Если команда !задача не в том канале, ничего не происходит.
channel = bot.message.channel(951917790518988830)
await stx.send('1')
Ответы (1 шт):
1
Ну для начала писать имя функции на русском - идея не очень. Лучше добавить задание в качестве имени команды в @bot.command:
@bot.command(name="задание", aliases=['задача'])
...
2
В команду первым аргументом всегда приходит ctx (commands.Context). У вас функция принимает stx и ctx. в данном случае ctx - не контекст, а обязательный аргумент к команде. Если человек вводит `!задача @упоминание задача_1 , то бот видит это так:
ctx - @упоминание
member - задача_1
arg - не указанно
Тогда если убрать stx, то всё будет работать:
@bot.command(name="задание", aliases=['задача'])
async def task(ctx: commands.Context, member: discord.Member = None, *, arg=None):
CheckTaskChannel = ctx.message.channel # проверяем, можно ли работать команде в этом чате
TaskChannel = bot.get_channel(951917790518988830) # канал, где данная команда будет работать.
if member is None:
await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажите: пользователя!**'))
elif arg is None:
await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажите: задание!**'))
else:
if CheckTaskChannel == TaskChannel: # Если сообщение написано в данном канале, выполняется код.
await ctx.channel.purge(limit=1)
author = ctx.message.author
guild = ctx.message.guild
creport = discord.utils.get(ctx.guild.categories, name='Задания') # название категории, где будет создаваться тема.
await guild.create_text_channel(f'Задание {author.name}', overwrites=None, category=creport, reason='Создание нового тикета.')
server = bot.get_guild(703596629814673428) # ID сервера.
for channel in server.channels:
if channel.name == f'Задание {author.name}':
break
else: # Если команда !задача не в том канале, ничего не происходит.
channel = bot.message.channel(951917790518988830)
await ctx.send('1')