GOOGLE ADS

воскресенье, 1 мая 2022 г.

Как заставить @commands.cooldown работать дни и месяцы, а не секунды Discord.py

Я хочу сделать команду для ежедневных наград для экономики discord.py. У меня есть код, но проблема в том, что он отображается в секундах

@client.command(aliases=['d'])
@commands.cooldown(1, 86400, commands.BucketType.user)
@is_registered
async def daily(ctx: commands.Context):
random_amount = random.randint(50, 150)
await economy.add_money(ctx.message.author.id, "wallet", random_amount)
embed = discord.Embed(
colour=discord.Color.from_rgb(244, 182, 89)
)
embed.add_field(name=f"Reward", value=f"Successfully claimed daily!")
await ctx.send(embed=embed)

Я проверил документацию в https://discordpy.readthedocs.io/en/stable/ о том, как использовать время восстановления, но, похоже, нет способа заставить его работать дни, а не секунды. Вот что происходит, когда вы запускаете код: Вы находитесь на перезарядке. Повторите попытку через 86396,55 с.
изображение ошибки Если кто-нибудь из вас знает, как превратить это в 1 день, мы будем очень признательны. Спасибо. PS Если это поможет, это библиотека, которую я использую для системы экономики:
https://pypi.org/project/DiscordEconomy/


Решение проблемы

Вы можете определить обработчик ошибок. Он будет срабатывать всякий раз, когда возникает ошибка перезарядки, а именно discord.CommandOnCooldown:

@client.event
async def on_command_error(ctx, err):
if err.__class__ is commands.CommandOnCooldown:
cd: int = int(err.retry_after)
# send an error message, you can customize this
await ctx.send(f'Sorry, you are on cooldown, which ends in **{cd//86400}d {(cd//3600)%24}h {(cd//60)%60}m {cd % 60}s**.')
return
# more error handling...
# You should probably uncomment this
#await ctx.send(err)

Это работает без каких-либо изменений в стандартном обработчике перезарядки, поэтому вы можете использовать такую ​​команду:

@client.command(name='cooldown')
@commands.cooldown(1, 100000.0, commands.BucketType.user)
async def cooldown_command(ctx):
await ctx.send('Success!')

Пример выходного сообщения (вы можете настроить то, что отображается):

введите описание изображения здесь

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...