Команда Cooldown не распознает ctx

Хорошо, в общем, я написал этот код, и он говорит

File "C:\Users\jellis\Desktop\Suggestion Bot\bot.py", line 28, in <module>
    @commands.cooldown(1, 1500, ctx)
NameError: name 'ctx' is not defined

Я пытался переместить @commands.cooldown(1,1500 ctx) после async def suggest(ctx, *args), но это дало ту же ошибку.

@bot.command(pass_context = True)
@commands.cooldown(1, 1500, ctx)
async def suggest(ctx, *args):

    mesg = ' '.join(str(*args))
    embed = discord.Embed(title='New Suggestion', description='-----------', color=0x4C4CE7)

    if chatFilter in mesg:
        await bot.say(':x: Suggestion Could Not Be Sent.')
    elif chatFilter not in mesg:
        embed.add_field(name='{}'.format(ctx.message.author.display_name), value='{}'.format(mesg))
        await bot.send_message(discord.Object(id=suggestionsChannelID), embed=embed)

        white_check_mark = get(bot.get_all_emojis(), name='white_check_mark')
        await bot.add_reaction(message, white_check_mark)

        x = get(bot.get_all_emojis(), name='x')
        await bot.add_reaction(message, x)
        suggestionCount = suggestionCount + 1
    else:
        raise error


@bot.error
async def bot_error(error, member: discord.Member, ctx):
    if isinstance(error, commands.CommandOnCooldown):
        msg = ':x: {member} This command on cooldown, please try again in `{:.2f}s`'.format(error.retry_after)
        await bot.send_message(ctx.message.channel, msg)
    else:
        raise error

Я ожидал, что он обнаружит, что команда находится в режиме восстановления, а затем запустит событие @bot.error.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
165
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

@commands.cooldown указывается следующим образом:

discord.ext.commands.cooldown(rate, per, type=<BucketType.default: 0>)

Вы должны передать Enum с Bucket, который вы хотите использовать вместо Context-Container (ctx).

Полезные ведра, которые вы можете использовать:

BucketType.default for a global basis.

BucketType.user for a per-user basis.

BucketType.guild for a per-guild basis.

BucketType.channel for a per-channel basis.

BucketType.member for a per-member basis.

BucketType.category for a per-category basis.

Для получения дополнительной информации вы можете найти Дискорд-документация здесь.

Другие вопросы по теме