Python 如何在启用其他代码时在discord.py中设置计时器?

Python 如何在启用其他代码时在discord.py中设置计时器?,python,python-3.x,discord.py,Python,Python 3.x,Discord.py,我想设置一个时间,比如说30秒,但在定时器期间有其他命令可用。我无法执行time.sleep(30),因为这将使机器人无法响应其他命令。当bot能够接收和执行其他命令时,是否有办法让bot接收消息并在30秒后作出响应?可能的聊天日志如下所示: user: !timer 30 bot: Timer set for 30 seconds user: Hello bot: Hi bot: Your timer of 30 seconds has ended. (after 30 seconds

我想设置一个时间,比如说
30秒
,但在定时器期间有其他命令可用。我无法执行
time.sleep(30)
,因为这将使机器人无法响应其他命令。当bot能够接收和执行其他命令时,是否有办法让bot接收消息并在
30秒后作出响应?可能的聊天日志如下所示:

user: !timer 30
bot:  Timer set for 30 seconds
user: Hello
bot:  Hi
bot:  Your timer of 30 seconds has ended. (after 30 seconds are up)

可以在python中使用计时器对象,例如:

导入线程
定义做某事():
打印(“做某事”)
#或者告诉用户他的时间结束了
定时器=线程。定时器(30,做点什么)
timer.start()#您可能希望在用户键入命令时启动计时器

您可以找到一些参考

您可以简单地使用
asyncio
asyncio.sleep()
在后台工作,不会阻止其他函数。了解更多关于

@client.command()
异步def计时器(ctx,秒):
尝试:
秒=整数(秒)
除值错误外:
等待ctx发送(“请提供有效时间”)
返回
等待ctx.send(f“您的计时器已启动{seconds}秒。”)
等待asyncio.sleep(秒)#这是睡眠方法。
等待ctx.send(“您的计时器已结束!”)
返回

这是否回答了您的问题?你不需要线程,只需要一个简单的
asyncio.sleep
就可以完成任务,而且threading.timer也是同步的,会导致相同的延迟。这是一个选择,至少它可以作为timerys完成任务,但是我认为这会导致其他命令停止,因为它不是异步执行的。是的,但是当您调用
start()
时,计时器对象在一个单独的线程中运行,因此它不会中断主线程的运行。哦,好的。我应该测试一下。谢谢你的澄清谢谢。在
第8行中的
f
用于什么。而且,该
f
称为f-string。它是Python 3.6中的一个新添加。您可以使用它代替
.format()
。正如您在消息中所看到的,我之所以做了
{seconds}
,是因为我在字符串前面加了
f
。)哦,这样更整洁了。虽然我更喜欢“你的计时器已经启动了”+str(秒)+“秒”。因为我不太清楚.format()lol..format()基本上代替了代码中的
{}
。例如
打印(“Hello{}我是{}”。format(ctx.author.name,client.user.name))
返回“Hello Username,I'm Botname”“。您可以添加两个以上的
{}
。因此,如果我在消息前面使用
f
,我是否只将内容放在
{}
中的括号中?例如,如果我想打印出相同的内容,我是否只需将
打印(f.“Hello{ctx.author.name}我是{client.user.name}”)