DISCORD.PY несколько вопросов

У меня возникла проблема.

  1. Даже если есть канал с именем, которое я указываю, бот все равно создает канал с точно таким-же именем. Как это побороть?
  2. Мне нужно написать текст в созданный канал, но я не понимаю как это сделать, подскажите пожалуйста.
@bot.command(name="задание", aliases=['задача'])
async def task_day(ctx: commands.Context, arg_date = None, *, arg_other = None):
  CheckTaskChannel = ctx.message.channel  # проверяем, можно ли работать команде в этом чате
  TaskChannel = bot.get_channel(951917790518988830)  # канал, где данная команда будет работать.
  if arg_date is None:
    await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажи дату! Пример команды: \n!задача 01.01.2000 твое задание**'))
  elif arg_other is None:
    await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажи задание! Пример команды: \n!задача 01.01.2000 твое задание**'))

  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(arg_date, overwrites=None, category=creport, reason='Создание нового тикета.')
            server = bot.get_guild(703596629814673428)  # ID сервера.
            for channel in server.channels:
                if channel.name == arg_date:
                    break
        else:  # Если команда !задача не в том канале, ничего не происходит.
            channel = bot.message.channel(951917790518988830)
            await ctx.send('1')

Ответы (1 шт):

Автор решения: Universall

1

async def task_day(ctx: commands.Context, date: str = None, *task: str) -> None:
    if date is None:
        await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажи дату! Пример команды: \n!задача 01.01.2000 твое задание**'))
        return
    elif not task:
        await ctx.send(embed=discord.Embed(description='**:grey_exclamation: Обязательно укажи задание! Пример команды: \n!задача 01.01.2000 твое задание**'))
        return
    task = " ".join(task)
    date = date.replace(".", "-")

2

channel = discord.utils.get(ctx.guild.channels, name=date)
if not channel:
    # создать новый
else:
    # писать в существующий

Полностью

async def task_day(ctx: commands.Context, date: str = None, *task: str) -> None:
    if date is None:
        await ctx.send(embed=discord.Embed(
            description='**:grey_exclamation: Обязательно укажи дату! Пример команды: \n!задача 01.01.2000 твое задание**'))
        return
    elif not task:
        await ctx.send(embed=discord.Embed(
            description='**:grey_exclamation: Обязательно укажи задание! Пример команды: \n!задача 01.01.2000 твое задание**'))
        return
    task = " ".join(task)
    date = date.replace(".", "-")
    channel = discord.utils.get(ctx.guild.channels, name=date)
    if not channel:
        channel = await ctx.guild.create_text_channel(date)
    await channel.send(embed=discord.Embed(
            title="Новая задача!",
            description=task,
            colour=0x4169E1
        ))

С категорией:

category = discord.utils.get(ctx.guild.categories, name="Задачи")
if not category:
    category = await ctx.guild.create_category(name="Задачи")
task = " ".join(task)
date = date.replace(".", "-")
channel = discord.utils.get(category.channels, name=date)
if not channel:
    channel = await ctx.guild.create_text_channel(date, category=category)
await channel.send(embed=discord.Embed(
        title="Новая задача!",
        description=task,
        colour=0x4169E1
    ))
→ Ссылка