Archived
1
0
Fork 0
This repository has been archived on 2024-04-26. You can view files and clone it, but cannot push or open issues or pull requests.
akari-bot/core/utils/tasks.py

72 lines
3.2 KiB
Python
Raw Normal View History

2022-06-27 17:00:00 +00:00
from core.elements import MessageSession
2022-06-28 08:47:00 +00:00
from datetime import datetime
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,
'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']