如何为命令添加冷却时间计时器

时间:2019-08-12 08:50:09

标签: python-3.x timer

我对编码非常陌生,只想在我离开互联网的代码中添加一个命令计时器。我不知道该怎么做,我发现的所有其他代码对我来说都不是太多。我只希望能够为每个命令添加大约10秒的冷却时间计时器。

import discord

import asyncio

from discord.ext import commands

import datetime as DT

import discord.utils

class MyClient (discord.Client):

    async def on_ready(self):

        print('Logged in as')
        print(self.user.name)
        print(self.user.id)
        print('------')

    async def on_message(self, message):
        # we do not want the bot to reply to itself
        if message.author.id == self.user.id:
            return

        if message.content.startswith('!discord'): # I want to add a timer
            channel = client.get_user(message.author.id)
            await channel.send(''.format(message))

    async def on_member_join(self, member):
        guild = member.guild
        if guild.system_channel is not None:
            to_send = 'Welcome {0.mention} to {1.name}!'.format(member, guild)
            await guild.system_channel.send(to_send)

client = MyClient()

client.run('')

2 个答案:

答案 0 :(得分:1)

time.sleep()函数(另一个用户建议使用该函数是阻止呼叫)。这意味着它将阻止整个线程运行。我不确定Discord框架的工作原理,但我想线程阻塞可能是个问题。

我认为一个更好的解决方案是使用asyncio,尤其是因为您已经导入了它。等待10秒时,它将允许程序执行其他操作。 Another Stackoverflow thread if you're interested

if message.content.startswith('!discord'):
            channel = client.get_user(message.author.id)
            await asyncio.sleep(10)
            await channel.send(''.format(message))

编辑

您可以保存上一次调用该函数的时间,并使用IF语句检查自上次调用以来是否经过了10秒钟。

class MyClient (discord.Client):

    last_called = None

    async def on_ready(self):
        # other stuff

    async def on_message(self, message):
        # check if 10 seconds have passed since the last call
        if MyClient.last_called and DT.datetime.now() < MyClient.last_called + DT.timedelta(seconds=10):
            return

        # we do not want the bot to reply to itself
        if message.author.id == self.user.id:
            return

        if message.content.startswith('!discord'):
            channel = client.get_user(message.author.id)
            await channel.send(''.format(message))
            MyClient.last_called = DT.datetime.now()  # save the last call time

答案 1 :(得分:0)

如果将此添加到文件顶部的导入中,则:

from time import sleep

然后,当执行到达该行时,您可以使用sleep()函数将脚本暂停设置的秒数。因此,例如,添加以下内容:

sleep(10)

每当脚本到达该行时,函数内部的某个位置将休眠10秒钟。