我想要一个代码来显示某人进入语音通道的完成时间,但是我不知道如何启动和停止计数器
@bot.event
async def on_voice_state_update(before, after):
if after.voice.voice_channel:
timestrr = time.strftime("%d.%m.%Y-%H:%M:%S")
voicezeit(after.id, timestrr)
#here should a timer start
else:
#and here should the timer stop
我真的不知道该怎么做,因此我非常感谢您的帮助。
答案 0 :(得分:4)
如果只想测量两点之间经过的挂钟时间,则可以使用time.time():
import time
start = time.time()
print("hello")
end = time.time()
print(end - start)
这以秒为单位给出执行时间。
自3.3起,另一个选择可能是使用
perf_counter
或process_time
, 根据您的要求。在3.3之前,建议使用time.clock
。但是,目前不推荐使用:
在Unix上,以秒为单位返回当前处理器时间,以浮点数表示。精度,实际上是“处理器时间”含义的确切定义,取决于同名C函数的精度。
在Windows上,此函数将基于Win32函数QueryPerformanceCounter()
返回自第一次调用此函数以来经过的时间(以秒为单位)的浮点数。分辨率通常优于一微秒。
从版本3.3开始不推荐使用:此功能的行为取决于平台:请根据您的要求使用perf_counter()或process_time()来具有明确定义的行为。
答案 1 :(得分:2)
您为什么需要柜台?刚开始时将start_time
变量初始化为None
,然后在if块中检查是否已设置,如果未设置,则将其设置为time.time()
。在else块中,再次将end_time
设置为time.time()
并计算差值。
编辑
我不知道您应用程序其余部分的布局,您必须在此更新功能之外的某个地方初始化start_time = None
。您需要为每个用户设置它,我假设它存储为user.start_time
,但是同样,这取决于您应用程序的结构。然后您的功能可能会变成这样:
@bot.event
async def on_voice_state_update(before, after):
if after.voice.voice_channel:
if not user.start_time: # this was set to None somewhere else
user.start_time = time.time()
# import datetime from datetime at the top of your file
timestrr = datetime.from_timestamp(user.start_time).strftime("%d.%m.%Y-%H:%M:%S")
voicezeit(after.id, timestrr)
else:
end_time = time.time()
voice_chat_time = end_time - after.user.start_time