如何在Python Discord Bot中立即停止多次倒计时?

问题描述 投票:2回答:1

这是我的代码:

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!"))

我想这样做,倒计时只能一次运行一个。现在,您可以随时随地进行多次倒计时。

python-3.x discord.py
1个回答
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

您还可以通过维护通道或服务器ID的全局set,在每台服务器或每个通道上拥有它们。

© www.soinside.com 2019 - 2024. All rights reserved.