rewrite message tasks manager
This commit is contained in:
parent
6d3f77aa30
commit
8a80679ce6
13 changed files with 95 additions and 292 deletions
|
@ -8,14 +8,14 @@ from aiocqhttp import Event
|
|||
from bots.aiocqhttp.client import bot
|
||||
from bots.aiocqhttp.message import MessageSession, FetchTarget
|
||||
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
||||
from bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
||||
from config import Config
|
||||
from core.elements import MsgInfo, Session, EnableDirtyWordCheck, PrivateAssets
|
||||
from core.parser.message import parser
|
||||
from core.utils import init, load_prompt, init_async
|
||||
from core.utils import init, load_prompt, init_async, MessageTaskManager
|
||||
from database import BotDBUtil
|
||||
from database.logging_message import UnfriendlyActions
|
||||
|
||||
|
||||
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
||||
EnableDirtyWordCheck.status = True
|
||||
init()
|
||||
|
@ -40,8 +40,6 @@ async def _(event: Event):
|
|||
filter_msg = re.match(r'.*?\[CQ:(?:json|xml).*?].*?|.*?<\?xml.*?>.*?', event.message)
|
||||
if filter_msg:
|
||||
return
|
||||
all_tsk = MessageTaskManager.get()
|
||||
user_id = event.user_id
|
||||
targetId = 'QQ|' + (f'Group|{str(event.group_id)}' if event.detail_type == 'group' else str(event.user_id))
|
||||
|
||||
msg = MessageSession(MsgInfo(targetId=targetId,
|
||||
|
@ -51,17 +49,7 @@ async def _(event: Event):
|
|||
Session(message=event,
|
||||
target=event.group_id if event.detail_type == 'group' else event.user_id,
|
||||
sender=event.user_id))
|
||||
if targetId in all_tsk:
|
||||
add_ = None
|
||||
if user_id in all_tsk[targetId]:
|
||||
add_ = user_id
|
||||
if 'all' in all_tsk[targetId]:
|
||||
add_ = 'all'
|
||||
if add_:
|
||||
FinishedTasks.add_task(targetId, add_, msg)
|
||||
all_tsk[targetId][add_].set()
|
||||
MessageTaskManager.del_task(targetId, add_)
|
||||
|
||||
MessageTaskManager.check(msg)
|
||||
await parser(msg, running_mention=True)
|
||||
|
||||
|
||||
|
@ -85,12 +73,7 @@ async def _(event):
|
|||
Session(message=event,
|
||||
target=f'{str(event.guild_id)}|{str(event.channel_id)}',
|
||||
sender=event.user_id))
|
||||
all_tsk = MessageTaskManager.guild_get()
|
||||
if targetId in all_tsk:
|
||||
if tiny_id in all_tsk[targetId]:
|
||||
FinishedTasks.add_guild_task(targetId, tiny_id, msg)
|
||||
all_tsk[targetId][tiny_id].set()
|
||||
MessageTaskManager.del_guild_task(targetId, tiny_id)
|
||||
MessageTaskManager.check(msg)
|
||||
await parser(msg, running_mention=True)
|
||||
|
||||
|
||||
|
|
|
@ -12,11 +12,10 @@ from aiocqhttp import MessageSegment
|
|||
|
||||
from bots.aiocqhttp.client import bot
|
||||
from bots.aiocqhttp.message_guild import MessageSession as MessageSessionGuild
|
||||
from bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
from core.builtins.message import MessageSession as MS
|
||||
from core.elements import Plain, Image, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
ExecutionLockList, FetchedSession as FS, FinishedSession as FinS
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.logger import Logger
|
||||
from database import BotDBUtil
|
||||
|
||||
|
@ -75,35 +74,6 @@ class MessageSession(MS):
|
|||
send = await bot.send_private_msg(user_id=self.session.target, message=msg)
|
||||
return FinishedSession([send])
|
||||
|
||||
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
msgchain.append(Plain('(发送“是”或符合确认条件的词语来确认)'))
|
||||
send = await self.sendMessage(msgchain, quote)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, self.session.sender, flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
if FinishedTasks.get()[self.target.targetId][self.session.sender].asDisplay() in confirm_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
async def waitAnyone(self, msgchain=None, delete=False):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
send = await self.sendMessage(msgchain, quote=False)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, 'all', flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
return FinishedTasks.get()[self.target.targetId]['all']
|
||||
|
||||
async def checkPermission(self):
|
||||
if self.target.targetFrom == 'QQ' \
|
||||
or self.target.senderInfo.check_TargetAdmin(self.target.targetId) \
|
||||
|
|
|
@ -6,10 +6,9 @@ from pathlib import Path
|
|||
from aiocqhttp import MessageSegment
|
||||
|
||||
from bots.aiocqhttp.client import bot
|
||||
from bots.aiocqhttp.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, ExecutionLockList, FinishedSession as FinS
|
||||
from core.builtins.message import MessageSession as MS
|
||||
from core.elements import Plain, Image, ExecutionLockList, FinishedSession as FinS
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.logger import Logger
|
||||
|
||||
|
||||
|
@ -57,35 +56,6 @@ class MessageSession(MS):
|
|||
|
||||
return FinishedSession([send])
|
||||
|
||||
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
msgchain.append(Plain('(发送“是”或符合确认条件的词语来确认)'))
|
||||
send = await self.sendMessage(msgchain, quote)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_guild_task(self.target.targetId, self.session.sender, flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
if FinishedTasks.guild_get()[self.target.targetId][self.session.sender] in confirm_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
async def waitAnyone(self, msgchain=None, delete=False):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
send = await self.sendMessage(msgchain, quote=False)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_guild_task(self.target.targetId, 'all', flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
return FinishedTasks.guild_get()[self.target.targetId]['all']
|
||||
|
||||
async def checkPermission(self):
|
||||
if self.target.senderInfo.check_TargetAdmin(self.target.targetId) or self.target.senderInfo.query.isSuperUser:
|
||||
return True
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
class MessageTaskManager:
|
||||
_list = {}
|
||||
_guild_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, tsk):
|
||||
MessageTaskManager._list.update({grp: {uid: tsk}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del MessageTaskManager._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return MessageTaskManager._list
|
||||
|
||||
@staticmethod
|
||||
def add_guild_task(grp, uid, tsk):
|
||||
MessageTaskManager._guild_list.update({grp: {uid: tsk}})
|
||||
|
||||
@staticmethod
|
||||
def del_guild_task(grp, uid):
|
||||
del MessageTaskManager._guild_list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def guild_get():
|
||||
return MessageTaskManager._guild_list
|
||||
|
||||
|
||||
class FinishedTasks:
|
||||
_list = {}
|
||||
_guild_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, result):
|
||||
FinishedTasks._list.update({grp: {uid: result}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del FinishedTasks._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return FinishedTasks._list
|
||||
|
||||
@staticmethod
|
||||
def add_guild_task(grp, uid, result):
|
||||
FinishedTasks._guild_list.update({grp: {uid: result}})
|
||||
|
||||
@staticmethod
|
||||
def del_guild_task(grp, uid):
|
||||
del FinishedTasks._guild_list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def guild_get():
|
||||
return FinishedTasks._guild_list
|
|
@ -4,7 +4,7 @@ from aiogram import types, executor
|
|||
|
||||
from bots.aiogram.client import dp
|
||||
from bots.aiogram.message import MessageSession, FetchTarget
|
||||
from bots.aiogram.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.utils.tasks import MessageTaskManager
|
||||
from core.elements import MsgInfo, Session, PrivateAssets, Url
|
||||
from core.parser.message import parser
|
||||
from core.utils import init, load_prompt, init_async
|
||||
|
@ -16,24 +16,13 @@ Url.disable_mm = True
|
|||
|
||||
@dp.message_handler()
|
||||
async def msg_handler(message: types.Message):
|
||||
user_id = message.from_user.id
|
||||
targetId = f'Telegram|{message.chat.type}|{message.chat.id}'
|
||||
msg = MessageSession(MsgInfo(targetId=targetId,
|
||||
senderId=f'Telegram|User|{message.from_user.id}',
|
||||
targetFrom=f'Telegram|{message.chat.type}',
|
||||
senderFrom='Telegram|User', senderName=message.from_user.username, clientName='Telegram'),
|
||||
Session(message=message, target=message.chat.id, sender=message.from_user.id))
|
||||
all_tsk = MessageTaskManager.get()
|
||||
if targetId in all_tsk:
|
||||
add_ = None
|
||||
if user_id in all_tsk[targetId]:
|
||||
add_ = user_id
|
||||
if 'all' in all_tsk[targetId]:
|
||||
add_ = 'all'
|
||||
if add_:
|
||||
FinishedTasks.add_task(targetId, add_, msg)
|
||||
all_tsk[targetId][add_].set()
|
||||
MessageTaskManager.del_task(targetId, add_)
|
||||
MessageTaskManager.check(msg)
|
||||
await parser(msg)
|
||||
|
||||
|
||||
|
|
|
@ -4,11 +4,10 @@ import traceback
|
|||
from typing import List, Union
|
||||
|
||||
from bots.aiogram.client import dp, bot
|
||||
from bots.aiogram.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
from core.builtins.message import MessageSession as MS
|
||||
from core.elements import Plain, Image, MsgInfo, Session, Voice, FetchTarget as FT, \
|
||||
ExecutionLockList, FetchedSession as FS, FinishedSession as FinS
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.others import confirm_command
|
||||
from core.logger import Logger
|
||||
from database import BotDBUtil
|
||||
|
||||
|
@ -71,35 +70,6 @@ class MessageSession(MS):
|
|||
count += 1
|
||||
return FinishedSession(send)
|
||||
|
||||
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
|
||||
ExecutionLockList.remove(self)
|
||||
send = None
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
msgchain.append(Plain('(发送“是”或符合确认条件的词语来确认)'))
|
||||
send = await self.sendMessage(msgchain, quote)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, self.session.sender, flag)
|
||||
await flag.wait()
|
||||
if msgchain is not None and delete:
|
||||
await send.delete()
|
||||
if FinishedTasks.get()[self.target.targetId][self.session.sender].asDisplay() in confirm_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
async def waitAnyone(self, msgchain=None, delete=False):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
send = await self.sendMessage(msgchain, quote=False)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, 'all', flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
return FinishedTasks.get()[self.target.targetId]['all']
|
||||
|
||||
async def checkPermission(self):
|
||||
if self.session.message.chat.type == 'private' or self.target.senderInfo.check_TargetAdmin(
|
||||
self.target.targetId) or self.target.senderInfo.query.isSuperUser:
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
class MessageTaskManager:
|
||||
_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, tsk):
|
||||
MessageTaskManager._list.update({grp: {uid: tsk}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del MessageTaskManager._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return MessageTaskManager._list
|
||||
|
||||
|
||||
class FinishedTasks:
|
||||
_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, result):
|
||||
FinishedTasks._list.update({grp: {uid: result}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del FinishedTasks._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return FinishedTasks._list
|
|
@ -4,13 +4,12 @@ import discord
|
|||
|
||||
from bots.discord.client import client
|
||||
from bots.discord.message import MessageSession, FetchTarget
|
||||
from bots.discord.tasks import MessageTaskManager, FinishedTasks
|
||||
|
||||
from config import Config
|
||||
from core.elements import MsgInfo, Session, PrivateAssets, Url
|
||||
from core.logger import Logger
|
||||
from core.parser.message import parser
|
||||
from core.utils import init, init_async, load_prompt
|
||||
from core.utils import init, init_async, load_prompt, MessageTaskManager
|
||||
|
||||
PrivateAssets.set(os.path.abspath(os.path.dirname(__file__) + '/assets'))
|
||||
init()
|
||||
|
@ -44,17 +43,7 @@ async def on_message(message):
|
|||
senderName=message.author.name, targetFrom=target, senderFrom="Discord|Client",
|
||||
clientName='Discord'),
|
||||
session=Session(message=message, target=message.channel, sender=message.author))
|
||||
all_tsk = MessageTaskManager.get()
|
||||
if targetId in all_tsk:
|
||||
add_ = None
|
||||
if user_id in all_tsk[targetId]:
|
||||
add_ = user_id
|
||||
if 'all' in all_tsk[targetId]:
|
||||
add_ = 'all'
|
||||
if add_:
|
||||
FinishedTasks.add_task(targetId, add_, msg)
|
||||
all_tsk[targetId][add_].set()
|
||||
MessageTaskManager.del_task(targetId, add_)
|
||||
MessageTaskManager.check(msg)
|
||||
await parser(msg)
|
||||
|
||||
|
||||
|
|
|
@ -7,12 +7,11 @@ from typing import List, Union
|
|||
import discord
|
||||
|
||||
from bots.discord.client import client
|
||||
from bots.discord.tasks import MessageTaskManager, FinishedTasks
|
||||
from core.elements import Plain, Image, MessageSession as MS, MsgInfo, Session, FetchTarget as FT, ExecutionLockList, \
|
||||
from core.builtins.message import MessageSession as MS
|
||||
from core.elements import Plain, Image, MsgInfo, Session, FetchTarget as FT, ExecutionLockList, \
|
||||
FetchedSession as FS, FinishedSession as FinS
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.elements.message.internal import Embed
|
||||
from core.elements.others import confirm_command
|
||||
from core.logger import Logger
|
||||
from database import BotDBUtil
|
||||
|
||||
|
@ -101,36 +100,6 @@ class MessageSession(MS):
|
|||
count += 1
|
||||
return FinishedSession(send)
|
||||
|
||||
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
|
||||
ExecutionLockList.remove(self)
|
||||
|
||||
send = None
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
msgchain.append(Plain('(发送“是”或符合确认条件的词语来确认)'))
|
||||
send = await self.sendMessage(msgchain, quote)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, self.session.sender, flag)
|
||||
await flag.wait()
|
||||
if msgchain is not None and delete:
|
||||
await send.delete()
|
||||
if FinishedTasks.get()[self.target.targetId][self.session.sender].asDisplay() in confirm_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
async def waitAnyone(self, msgchain=None, delete=False):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
send = await self.sendMessage(msgchain, quote=False)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self.target.targetId, 'all', flag)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
return FinishedTasks.get()[self.target.targetId]['all']
|
||||
|
||||
async def checkPermission(self):
|
||||
if self.session.message.channel.permissions_for(self.session.message.author).administrator \
|
||||
or isinstance(self.session.message.channel, discord.DMChannel) \
|
||||
|
|
|
@ -1,30 +0,0 @@
|
|||
class MessageTaskManager:
|
||||
_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, tsk):
|
||||
MessageTaskManager._list.update({grp: {uid: tsk}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del MessageTaskManager._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return MessageTaskManager._list
|
||||
|
||||
|
||||
class FinishedTasks:
|
||||
_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(grp, uid, result):
|
||||
FinishedTasks._list.update({grp: {uid: result}})
|
||||
|
||||
@staticmethod
|
||||
def del_task(grp, uid):
|
||||
del FinishedTasks._list[grp][uid]
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return FinishedTasks._list
|
40
core/builtins/message/__init__.py
Normal file
40
core/builtins/message/__init__.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
import asyncio
|
||||
|
||||
from core.elements import ExecutionLockList, Plain, confirm_command
|
||||
from core.elements.message import *
|
||||
from core.elements.message.chain import MessageChain
|
||||
from core.utils import MessageTaskManager
|
||||
|
||||
|
||||
class MessageSession(MessageSession):
|
||||
async def waitConfirm(self, msgchain=None, quote=True, delete=True):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
msgchain.append(Plain('(发送“是”或符合确认条件的词语来确认)'))
|
||||
send = await self.sendMessage(msgchain, quote)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self, flag)
|
||||
await flag.wait()
|
||||
if msgchain is not None and delete:
|
||||
await send.delete()
|
||||
if MessageTaskManager.get_result(self).asDisplay() in confirm_command:
|
||||
return True
|
||||
return False
|
||||
|
||||
async def waitAnyone(self, msgchain=None, delete=False):
|
||||
send = None
|
||||
ExecutionLockList.remove(self)
|
||||
if msgchain is not None:
|
||||
msgchain = MessageChain(msgchain)
|
||||
send = await self.sendMessage(msgchain, quote=False)
|
||||
flag = asyncio.Event()
|
||||
MessageTaskManager.add_task(self, flag, all_=True)
|
||||
await flag.wait()
|
||||
if send is not None and delete:
|
||||
await send.delete()
|
||||
return MessageTaskManager.get()[self.target.targetId]['all']['result']
|
||||
|
||||
|
||||
__all__ = ["MessageSession"]
|
|
@ -5,3 +5,4 @@ from .image_table import *
|
|||
from .message import *
|
||||
from .message import *
|
||||
from .storedata import *
|
||||
from .tasks import *
|
||||
|
|
38
core/utils/tasks.py
Normal file
38
core/utils/tasks.py
Normal file
|
@ -0,0 +1,38 @@
|
|||
from core.elements import MessageSession
|
||||
|
||||
|
||||
class MessageTaskManager:
|
||||
_list = {}
|
||||
|
||||
@staticmethod
|
||||
def add_task(session: MessageSession, flag, all_=False):
|
||||
sender = session.target.senderId
|
||||
if all_:
|
||||
sender = 'all'
|
||||
|
||||
MessageTaskManager._list.update(
|
||||
{session.target.targetId: {sender: {'flag': flag, 'active': True}}})
|
||||
|
||||
@staticmethod
|
||||
def get_result(session: MessageSession):
|
||||
return MessageTaskManager._list[session.target.targetId][session.target.senderId]['result']
|
||||
|
||||
@staticmethod
|
||||
def get():
|
||||
return MessageTaskManager._list
|
||||
|
||||
@staticmethod
|
||||
def check(session: MessageSession):
|
||||
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:
|
||||
MessageTaskManager._list[session.target.targetId][sender]['result'] = session
|
||||
MessageTaskManager._list[session.target.targetId][sender]['active'] = False
|
||||
MessageTaskManager._list[session.target.targetId][sender]['flag'].set()
|
||||
|
||||
|
||||
__all__ = ['MessageTaskManager']
|
Reference in a new issue