我想知道如何为提醒命令进行时间转换,以便将 1s 转换为 1 秒 1m 转换为 1 分钟,1h 转换为 1 小时
@client.command(aliases=["reminder"])
async def remind(ctx, remindertime, *, msg):
seconds=seconds % (24 * 3600)
hour=seconds // 3600
seconds %= 3600
minutes=seconds // 60
seconds %= 60
s=seconds
h=hour
m=minutes
await asyncio.sleep(remindertime)
await ctx.send(f"{ctx.author.mention} You were going to: {msg} and asked me to remind you.")
答案 0 :(得分:1)
您可以使用正则表达式来检查字符串是否为时间字符串:
import re
TIME_REGEX = re.compile("([0-9]+)(d|h|m|s)?")
MULTIPLER = {
"d": 86400,
"h": 3600,
"m": 60,
"s": 1,
"None": 1 #if they type "30", this will be 30 seconds"
}
match = TIME_REGEX.match(time_string)
if not match:
return await ctx.send("Please enter a valid time.")
seconds = int(match.groups()[0]) * MULTIPLER.get(str(match.groups()[1]))
答案 1 :(得分:0)
您在这里尝试的方式是一种困难的方式。这只会消耗时间并使您感到困惑。
通常的做法非常简单。
您创建一个字典,然后在其中添加时间转换值。然后创建一个根据要求转换时间的变量。别担心,我现在会解释它。它会消除你的疑虑。 :)
这就是提醒功能。
@client.command(aliases=["reminder"])
async def remind(ctx, time, *, msg):
这本词典将在执行时间的转换中起主要作用。这本字典的 KEYS 将是时间单位,VALUES 将是以秒为单位的数字。
time_conversion = {"s": 1, "m": 60, "h": 3600, "d": 86400}
这将用于将我们的时间转换为秒并在 sleep() 函数中使用。
此变量将根据命令中输入的值以秒为单位。
remindertime = int(time[0]) * time_conversion[time[-1]]
这首先将附加到时间输入的数字值与字典中的整数 VALUE 相乘。
现在当我们使用这个时间时,我们的命令看起来像:
@client.command(aliases=["reminder"])
async def remind(ctx, time, *, msg):
time_conversion = {"s": 1, "m": 60, "h": 3600, "d": 86400}
remindertime = int(time[0]) * time_conversion[time[-1]]
await asyncio.sleep(remindertime)
await ctx.send(f"{ctx.author.mention} You were going to: {msg} and asked me to remind you.")
所以,这是您在命令中实际使用时间的方式。
我很乐意提供帮助。如果您对我解释的任何内容仍有任何疑问,请随时在评论中问我。 :)
谢谢! :D