我如何以分钟为单位显示冷却时间|不和谐

时间:2020-10-28 09:25:41

标签: discord.py

cooldown可以使bot在有冷却时间时以秒为单位显示冷却时间。我想要使​​它在分钟:秒内显示它。虽然不确定如何做到。

此代码的冷却时间为5分钟

  @rob.error
  async def rob_error(self, ctx, error):
      if isinstance(error, commands.BadArgument):
          await ctx.send("Member doesnt exist")
      if isinstance(error, commands.CommandOnCooldown):
           embed = discord.Embed(
              title="Your on a cooldown!", color=discord.Color.blue())
      embed.add_field(
          name="\u200b",
          value=
          f"Slow down will ya?\n Wait for {round(error.retry_after)} seconds"
      )
      await ctx.send(embed=embed)

1 个答案:

答案 0 :(得分:0)

如果您有秒数,则可以使用division (//)轻松计算分钟数,而使用modulo (%)可以计算剩余秒数。

>>> x = 83
>>> minutes = str(x // 60)
>>> seconds = str(x % 60)
>>> print(f"Minutes: {minutes} | Seconds: {seconds}")
Minutes: 1 | Seconds: 23

然后,如果需要,可以在必要时添加前导零

def leadingZero(time: str):
    if len(time) > 1:
        return time

    return "0" + time

为了使“ 1:3”显示为“ 01:03”。

这将使您的代码最终看起来像这样:

@rob.error
async def rob_error(self, ctx, error):
    if isinstance(error, commands.BadArgument):
        await ctx.send("Member doesnt exist")
    if isinstance(error, commands.CommandOnCooldown):
        embed = discord.Embed(title="You're on a cooldown!", color=discord.Color.blue())

        cd = round(error.retry_after)
        minutes = str(cd // 60)
        seconds = str(cd % 60)

        embed.add_field(name="\u200b", value=f"Slow down will ya?\nWait for {self.leadingZero(minutes)}:{self.leadingZero(seconds)}.")
        await ctx.send(embed=embed)

def leadingZero(self, time: str):
    if len(time) > 1:
        return time

    return "0" + time

此外,我发现您实际上并没有将add_fieldctx.send放在is_instance(位于下面)内,可能需要最后,应该是You're on a cooldown,而不是Your