如何停止在Python Discord Bot中一次运行多个倒计时?

时间:2018-09-05 14:24:09

标签: python-3.x discord.py

这是我的代码:

import discord
import asyncio

async def ex(args, message, client, invoke):

  await client.send_message(message.channel, "5 Minutes")
  await asyncio.sleep(60)
  await client.send_message(message.channel, "4 Minutes")
  await asyncio.sleep(60)
  await client.send_message(message.channel, "3 Minutes")
  await asyncio.sleep(60)
  await client.send_message(message.channel, "2 Minutes")
  await asyncio.sleep(60)
  await client.send_message(message.channel, "1 Minutes")
  await asyncio.sleep(30)
  await client.send_message(message.channel, "30 Seconds")
  await asyncio.sleep(15)
  await client.send_message(message.channel, "15 Seconds")
  await asyncio.sleep(10)
  await client.send_message(message.channel, "5 Seconds")


#Already Running Message
#await client.send_message(message.channel, embed=discord.Embed(color=discord.Color.red(), description="Countdown already running, please try again later!"))

我想做到这一点,因此倒计时只能一次运行一次。现在,您可以随时随地进行倒数计时。

1 个答案:

答案 0 :(得分:1)

您可以使用一个全局变量来跟踪计数器是否在运行中。像这样:

counter_channel = None

async def ex(args, message, client, invoke):
    global counter_channel
    if counter_channel is not None:
        await client.send_message(message.channel, "There is a counter in {}".format(counter_channel.mention))
        return
    counter_channel = message.channel

    await client.send_message(message.channel, "5 Minutes")
    await asyncio.sleep(60)
    ...
    await client.send_message(message.channel, "5 Seconds")
    await asyncio.sleep(5)

    counter_channel = None

您还可以通过维护全局set的通道或服务器ID来基于每个服务器或每个通道使用它们。