@vladislavlisitsyn

Как сделать await purge(limit=1) в disnake?

Надо сделать бота который удаляем сообщение в канале (не команду) после написания.
Код:
@client.event
async def on_message(inter):
    moder3 = disnake.utils.get(inter.guild.roles, id=**id_role**)
    moder2 = disnake.utils.get(inter.guild.roles, **id=id_role**)
    moder = disnake.utils.get(inter.guild.roles, **id=id_role**)
    sup_role = disnake.utils.get(inter.guild.roles, **id=id_role**)
    times_start = datetime.datetime.today()
    member = inter.author
    clannel12 = client.get_channel(**id_channel**)
    if inter.author != client.user and inter.author == member and inter.author != member.bot and inter.channel.id == **id_channel**:
        await inter.channel.purge(limit=1)
        for guild in client.guilds:
            maincategory = disnake.utils.get(guild.categories, id=**id_category**)  # категория создания канала
            channel2 = await guild.create_text_channel(
                f'Support - {inter.author.id}',  # название канала
                position=0,  # позиция созданного канала (для теста просто уберите этот пункт)
                category=maincategory,  # категория  в которой создастся канал
            )
            await member.add_roles(sup_role)
            await channel2.set_permissions(moder3, read_messages=True, send_messages=True)
            await channel2.set_permissions(sup_role, read_messages=True, send_messages=True)
            await channel2.set_permissions(moder, read_messages=True, send_messages=True)
            await channel2.set_permissions(moder2, read_messages=True, send_messages=True)
            await channel2.set_permissions(inter.guild.default_role, read_messages=False)

            await channel2.send(f'{inter.author.mention}')

            emb2 = disnake.Embed(title=f'Support - {inter.author}', description='В скором времени вам ответит свободный модератор', color=disnake.Color.green())
            emb2.set_footer(text=f'Дата: {times_start.strftime("%Y-%m-%d, %H:%M:%S")}')
            await channel2.send(embed=emb2)

            emb3 = disnake.Embed(title='Уведомдение для модерации', color=disnake.Color.red())
            emb3.add_field(name='id участника: ', value=inter.author.id, inline=False)
            emb3.add_field(name='Более подробная информация по участнику: ', value=f'.info {inter.author.mention}', inline=False)
            emb3.add_field(name='Для ответа напишите:', value=f'.otv', inline=False)
            emb3.set_footer(text=f'Дата: {times_start.strftime("%Y-%m-%d, %H:%M:%S")}')

            await channel2.send(embed=emb3)

            emb4 = disnake.Embed(title='Info', color=disnake.Color.red())
            emb4.add_field(name='Суть вопроса', value=inter.content)

            await channel2.send(embed=emb4)

            emb = disnake.Embed(title=f'Уведомление - {inter.author}', description=f'Для получение помощи перейдите в канал <#{channel2.id}>', color=disnake.Color.green())
            emb.add_field(name='Дата:', value=f'{times_start.strftime("%Y-%m-%d, %H:%M:%S")}')
            emb.set_footer(text='Через 30 секунд сообщение будет удалено автоматичеки')
            await clannel12.send(embed=emb, delete_after=30)

    await client.process_commands(inter)

Выдаёт ошибку:
line 260, in on_message
    await inter.channel.purge(limit=1)

disnake.errors.NotFound: 404 Not Found (error code: 10008): Unknown Message


Только начал изучать disnake, на discord.py всё работало. Просто решил перевести команду
  • Вопрос задан
  • 316 просмотров
Решения вопроса 1
shurshur
@shurshur
Сисадмин, просто сисадмин...
Обработчик on_message принимает в качестве параметра сообщение (тип Message), а не interaction context. А у сообщения есть метод delete. Так что использование purge тут совершенно не к месту. Открою секрет: удалять вообще что бы то ни было единичное с помощью purge - плохая идея. Пока бот обрабатывает событие, в канале могут появиться новые сообщения. Purge нужно только для масштабной очистки.

@client.event
async def on_message(message):
    await message.delete()
    temporary_message = message.reply(...)
    await asyncio.sleep(30)
    await temporary_message.delete()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vladislavlisitsyn Автор вопроса
Там вроде disnake должен быть схож с discord.py
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы