Discord.py как проверить, есть ли у ввода десятичное число

1

я сделал эту команду, он очистит количество сообщений, которые вы сказали, т.е.> очистите 10, он удалит 10 сообщений, я не знаю, как проверить, был ли вход десятичным, вы можете помочь Код:

@client.command(pass_context=True)
async def purge(ctx, amount=300):
    if ctx.message.author.server_permissions.manage_messages:
        channel = ctx.message.channel
        messages = []
        async for message in client.logs_from(channel, limit=int(amount) + 1):
            messages.append(message)
        await client.delete_messages(messages)
        await client.say('Purged {} message(s)!'.format(len(messages)-1)) 
    else:
        embed = discord.Embed(
            title = ':x: Insufficient Permissions',
            description = 'You need to have the Manage Messages premission to execute this command.',
            colour = 0xff0000
        )
        await client.say(embed=embed)
Теги:
discord.py

2 ответа

2

Вы можете использовать аннотации типов для подачи конвертера (обратите внимание, что это документация , но это также работает в ветке async) на вашу сопрограмму. Затем вы можете указать другой обработчик ошибок, который может реализовать вашу логику для работы с плохим вводом.

@client.command(pass_context=True)
async def purge(ctx, amount: int=300):
    ...

@purge.error
async def purge_error(error, ctx):
    if isinstance(error, commands.BadArgument):
        await client.send_message(ctx.message.channel, "Cannot convert input to integer")

Вы также можете посмотреть на Client.purge_from. Я не читал все ваши сопрограммы, но похоже, что вы немного изобретаете колесо.

0

Вы можете удалить значение по умолчанию для amount и поймать ValueError, который вызывается, когда пользователь пишет что-то неправильно

@client.command(pass_context=True)
async def purge(ctx, amount):
  try:
    if ctx.message.author.server_permissions.manage_messages:
        channel = ctx.message.channel
        messages = []
        async for message in client.logs_from(channel, limit=int(amount) + 1):
            messages.append(message)
        try:
          await client.delete_messages(messages)
          await client.say('Purged {} message(s)!'.format(len(messages)-1))
        except Exception as inst:
          await client.say("One or more messages older than 14 days\n{}".format(inst))
    else:
        embed = discord.Embed(
            title = ':x: Insufficient Permissions',
            description = 'You need to have the Manage Messages premission to execute this command.',
            colour = 0xff0000
        )
        await client.say(embed=embed)
  except ValueError as va:
    await client.say(va)

Я также добавил try/except, если хотя бы одно из сообщений составляет 14 дней и, следовательно, не может быть удалено

Ещё вопросы

Сообщество Overcoder
Наверх
Меню