discord.py 提醒命令时间转换

时间:2021-04-16 13:34:15

标签: discord discord.py

我想知道如何为提醒命令进行时间转换,以便将 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.")

2 个答案:

答案 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)

您在这里尝试的方式是一种困难的方式。这只会消耗时间并使您感到困惑。

通常的做法非常简单。

您创建一个字典,然后在其中添加时间转换值。然后创建一个根据要求转换时间的变量。别担心,我现在会解释它。它会消除你的疑虑。 :)

步骤 1:创建函数。

这就是提醒功能。

@client.command(aliases=["reminder"])
async def remind(ctx, time, *, msg):

第 2 步:创建时间字典。

这本词典将在执行时间的转换中起主要作用。这本字典的 KEYS 将是时间单位,VALUES 将是以秒为单位的数字。

time_conversion = {"s": 1, "m": 60, "h": 3600, "d": 86400}

这将用于将我们的时间转换为秒并在 sleep() 函数中使用。

第 3 步:创建时间转换变量。

此变量将根据命令中输入的值以秒为单位。

remindertime = int(time[0]) * time_conversion[time[-1]]

这首先将附加到时间输入的数字值与字典中的整数 VALUE 相乘。

第 4 步:在命令中使用这个时间。

现在当我们使用这个时间时,我们的命令看起来像:

@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