Как передать сопрограмму в декоратор commands.dynamic_cooldown()?
Пишу бота на disnake.py (аналог discord.py). Он не многим отличается от официальной библиотеки discord, просто он до сих пор поддерживается и обновляется.
У меня проблема с декоратором @commands.dynamic_cooldown().
У меня есть сопрограмма, возвращающая время восстановления:
async def give_guild_cooldown(message):
if message.author.guild_permissions.administrator:
return disnake.ext.commands.Cooldown(rate=1, per=0)
for value in await constants.SQL.execute('SELECT * FROM servers_info'):
if value[0] == message.guild.id:
return disnake.ext.commands.Cooldown(rate=1, per=value[3])
У меня есть функция clear, завернутая в декоратор @commands.dynamic_cooldown():
@constants.bot.slash_command(description='Очищает данное количесво сообщений.')
@commands.dynamic_cooldown(function.give_guild_cooldown, commands.BucketType.user)
async def clear(ctx, reason: int = commands.Param(name="number_of_messages_to_clear")): # slash-command clear
await function.chq_moder_role(ctx=ctx)
await ctx.channel.purge(limit=int(reason))
await ctx.response.send_message(embed=disnake.Embed(description=f'**{reason} сообщений(e) удалено!** :white_check_mark:'), delete_after=60)
При вызове функции возникает ошибка:
AttributeError: 'coroutine' object has no attribute 'update_rate_limit'
Я уже понял, что проблема в том, что я передаю сопрограмму, а не функцию. Если передать функцию, декоратор будет работать. Но я не могу отказаться от асинхронных методов в своей сопрограмме. Могу ли я передать сопрограмму декоратору? Или ошибка не в сопрограмме?
P.s. Я точно выяснил, что декоратор не может начать работу, потому что невозможно передать объект класса disnake.Message в coroutine, тоесть ошибка, находится в самом начале.
Заранее спасибо за ответ!