Как сделать обозначения длины бана в discord.py?
У меня получилось сделать длительность бана:
@client.command()
@commands.has_permissions(administrator = True)
async def ban(ctx, member: discord.Member, time: int, reason):
await ctx.send(f'{member.mention} **забанен** \n Продолжительность бана: *{time}h* \n Причина бана: *{reason}*')
await member.send(f'Тебя забанили на сервере {ctx.guild.name} по причине {reason}')
await member.ban(reason=reason)
await asyncio.sleep(time * 3600)
await member.unban()
await ctx.send(f'*У {member.mention} закончился бан*')
link = await ctx.channel.create_invite(max_age=300)
await member.send(f'У тебя закончился бан на сервере "{ctx.guild.name}"! {link}')
Но я пытаюсь сделать так, чтобы пользователь мог вводить не только время в часах, но и в других единицах. Например: !ban @тест 1h тест или !ban @тест 10d тест 2m и т.д...
Как можно это реализовать? Если что пишу на replit
Ответы (1 шт):
Автор решения: denisnumb
→ Ссылка
Чтобы реализовать такую функцию, придется убрать у аргумента time привязку к типу int
time: int -> time
Теперь, когда имеем строку формата [Время][тип], мы можем разбить ее по такому принципу:
time_type = time[-1] # последний символ, содержащий s, m, h, d ...
try:
time = int(time[:-1]) # в переменной time теперь записано все, кроме последнего символа, тип int
except:
await ctx.send('Введите число')
Ну и затем, если time_type это h, то умножаем time на 3600 и т.д.