#python #regex #discord.py
#python #регулярное выражение #discord.py
Вопрос:
Итак, это мой текущий код для таймера в моем discord.py бот..
#Timer (Need to option for s,m,h and exit)
@client.command()
async def timer(ctx, seconds):
try:
text = (seconds)
in_seconds = {'h': 60 * 60, 'm': 60, 's': 1}
seconds = sum(int(num) * in_seconds[weight] for num, weight in re.findall(r'(d )s?(m|s|h)', text))
if seconds > 86400:
await ctx.send("I don't think I want you to go over 24h right now")
raise BaseException
if seconds < 0:
await ctx.send("I don't think you want to do negatives")
raise BaseException
message = await ctx.send(f"Timer: {seconds}")
while True:
seconds -= 5
if seconds < 0:
await message.edit(content="Ended!")
break
await message.edit(content=f"Timer: {seconds}")
await asyncio.sleep(5)
await ctx.send(f"{ctx.author.mention}, Your countdown has ended!")
except ValueError:
await ctx.send('You must enter a number!')
Итак, это отлично работает, когда я делаю таймер 10 секунд или таймер 5 минут, но когда я делаю таймер 10, он автоматически не принимает его за секунды и немедленно завершает таймер.. Как мне это исправить, пожалуйста, помогите мне
Ответ №1:
Для вашего регулярного выражения требуется m
, s
или h
:
(d )s?(m|s|h)
Измените его, чтобы также ничего не разрешать:
(d )s?(m|s|h)?
а затем убедитесь, что weight
используется или по умолчанию используется s
:
weight if weight else 's'
Склейте это вместе:
seconds = sum(int(num) * in_seconds[weight if weight else 's'] for num, weight in re.findall(r'(d )s?(m|s|h)?', text))
Комментарии:
1. Большое спасибо.. Это было действительно полезно. Также, если вы знаете discord.py не могли бы вы сказать мне, как я мог бы добавить такую функцию, как?? завершите работу, чтобы остановить таймер на полпути
Ответ №2:
Я думаю, проблема в самом регулярном выражении:
(d )s?(m|s|h)
Обратите внимание, что токен (m|s|h)
является обязательным. Ваше регулярное выражение не будет соответствовать, если в строке нет m, s или h . Мы можем обойти это, сделав это необязательным следующим образом:
(d )s?(m|s|h)?