我有电报机器人,我需要:
async def details(message: types.Message, state: FSMContext):
if message.text == 'Make reques ✅':
#starting timer
@dp.message_handler(commands='done', state="*")
async def done(message:typer.Message,state:FSMContext):
#stopping timer
我尝试使用 asyncio.sleep() 但似乎无法在另一个函数中停止
您可以通过存储开始时间并查找用户发送
/done
时开始时间和结束时间之间的差异来解决它。有很多方法可以存储开始时间,但我将通过将其存储在 Python 内置字典中来展示它(有很多替代方法)。
首先,你需要一个字典(你应该在你使用的文件上全局创建它:
timer = dict()
然后你应该保存当前用户的开始时间
async def details(message: types.Message, state: FSMContext):
if message.text == 'Make reques ✅':
timer[message.from_user.id] = datetime.now()
并且您知道用户何时发送“Make reques ✅”,因此您有开始时间,并且可以找到开始时间和现在之间的差异:
@dp.message_handler(commands='done', state="*")
async def done(message:types.Message,state:FSMContext):
if timer.get(message.from_user.id):
start_time = timer.get(message.from_user.id, None)
if start_time is None:
# send timer is not started for the current user
return
# Remove the user's start time if it's necessary
del timer[message.from_user.id]
# find the difference between start and finish time
user_time_delta: timedelta = datetime.now() - start_time
# You can do what you want with time delta >>>