Source code for discordSuperUtils.Convertors
from typing import (
Optional,
Union
)
from discord.ext import commands
[docs]def isfloat(string: str) -> bool:
"""
This function receives a string and returns if it is a float or not
:param string:
:return:
"""
try:
float(string)
return True
except (ValueError, TypeError):
return False
[docs]class TimeConvertor(commands.Converter):
"""
Converts a given argument to an int that represents time in seconds.
Examples
----------
7d: 604800 (7 days in seconds)
1m: 60 (1 minute in seconds)
heyh: BadArgument ('hey' is not an int)
100j: BadArgument ('j' is not a valid time multiplier)
"""
[docs] async def convert(self, ctx: commands.Context, argument: str) -> Optional[Union[int, float]]:
time_multipliers = {"s": 1,
"m": 60,
"h": 60 * 60,
"d": 60 * 60 * 24,
"w": 60 * 60 * 24 * 7}
permanent = ["permanent", "perm", "0"]
if argument.lower() in permanent:
return 0
if not isfloat(argument[:-1]) or argument[-1] not in time_multipliers.keys():
raise commands.BadArgument(f"Invalid time argument provided, cannot convert '{argument}' to time.")
return float(argument[:-1]) * time_multipliers[argument[-1]]