2022-06-28 08:47:00 +00:00
|
|
|
from datetime import datetime
|
2022-06-27 17:00:00 +00:00
|
|
|
|
2023-02-05 14:33:33 +00:00
|
|
|
from core.types import MessageSession
|
2022-07-31 08:27:58 +00:00
|
|
|
|
2022-06-27 17:00:00 +00:00
|
|
|
|
|
|
|
class MessageTaskManager:
|
|
|
|
_list = {}
|
|
|
|
|
|
|
|
@staticmethod
|
2022-06-28 06:11:03 +00:00
|
|
|
def add_task(session: MessageSession, flag, all_=False, reply=None):
|
2022-06-27 17:00:00 +00:00
|
|
|
sender = session.target.senderId
|
2022-06-28 06:11:03 +00:00
|
|
|
task_type = 'reply' if reply is not None else 'wait'
|
2022-06-27 17:00:00 +00:00
|
|
|
if all_:
|
|
|
|
sender = 'all'
|
2022-06-28 08:47:00 +00:00
|
|
|
if session.target.targetId in MessageTaskManager._list:
|
|
|
|
if sender in MessageTaskManager._list[session.target.targetId]:
|
|
|
|
if MessageTaskManager._list[session.target.targetId][sender]['active']:
|
|
|
|
MessageTaskManager._list[session.target.targetId][sender]['active'] = False
|
|
|
|
MessageTaskManager._list[session.target.targetId][sender]['flag'].set()
|
2022-06-27 17:00:00 +00:00
|
|
|
|
|
|
|
MessageTaskManager._list.update(
|
2022-06-28 08:47:00 +00:00
|
|
|
{session.target.targetId: {sender: {'flag': flag, 'active': True,
|
2022-07-30 08:21:00 +00:00
|
|
|
'type': task_type, 'reply': reply, 'ts': datetime.now().timestamp(),
|
|
|
|
'original_session': session}}})
|
2022-06-27 17:00:00 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get_result(session: MessageSession):
|
2022-06-28 08:47:00 +00:00
|
|
|
if 'result' in MessageTaskManager._list[session.target.targetId][session.target.senderId]:
|
|
|
|
return MessageTaskManager._list[session.target.targetId][session.target.senderId]['result']
|
|
|
|
else:
|
|
|
|
return False
|
2022-06-27 17:00:00 +00:00
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def get():
|
|
|
|
return MessageTaskManager._list
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def check(session: MessageSession):
|
2022-06-28 08:47:00 +00:00
|
|
|
for target in MessageTaskManager._list:
|
|
|
|
for sender in MessageTaskManager._list[target]:
|
|
|
|
if MessageTaskManager._list[target][sender]['active']:
|
|
|
|
if datetime.now().timestamp() - MessageTaskManager._list[target][sender]['ts'] > 3600:
|
|
|
|
MessageTaskManager._list[target][sender]['active'] = False
|
|
|
|
MessageTaskManager._list[target][sender]['flag'].set() # no result = cancel
|
2022-06-27 17:00:00 +00:00
|
|
|
if session.target.targetId in MessageTaskManager._list:
|
|
|
|
sender = None
|
|
|
|
if session.target.senderId in MessageTaskManager._list[session.target.targetId]:
|
|
|
|
sender = session.target.senderId
|
|
|
|
if 'all' in MessageTaskManager._list[session.target.targetId]:
|
|
|
|
sender = 'all'
|
|
|
|
if sender is not None:
|
2022-06-28 06:11:03 +00:00
|
|
|
get_ = MessageTaskManager._list[session.target.targetId][sender]
|
|
|
|
if get_['type'] == 'wait':
|
|
|
|
get_['result'] = session
|
|
|
|
get_['active'] = False
|
|
|
|
get_['flag'].set()
|
|
|
|
elif get_['type'] == 'reply':
|
|
|
|
if isinstance(get_['reply'], list):
|
|
|
|
for reply in get_['reply']:
|
|
|
|
if reply == session.target.replyId:
|
|
|
|
get_['result'] = session
|
|
|
|
get_['active'] = False
|
|
|
|
get_['flag'].set()
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
if get_['reply'] == session.target.replyId:
|
|
|
|
get_['result'] = session
|
|
|
|
get_['active'] = False
|
|
|
|
get_['flag'].set()
|
2022-06-27 17:00:00 +00:00
|
|
|
|
|
|
|
|
|
|
|
__all__ = ['MessageTaskManager']
|