我对编码非常陌生,只想在我离开互联网的代码中添加一个命令计时器。我不知道该怎么做,我发现的所有其他代码对我来说都不是太多。我只希望能够为每个命令添加大约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('')
答案 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秒钟。