add use queue, default disable it

This commit is contained in:
felinae98 2021-10-01 16:56:44 +08:00
parent 0161ec07d6
commit 568000af70
No known key found for this signature in database
GPG Key ID: 00C8B010587FF610
4 changed files with 32 additions and 21 deletions

View File

@ -10,7 +10,6 @@ from nonebot.matcher import Matcher
from .config import Config, NoSuchSubscribeException
from .platform import platform_manager, check_sub_target
from .send import send_msgs
from .utils import parse_text
from .types import Target
@ -118,7 +117,6 @@ def do_query_sub(query_sub: Type[Matcher]):
if platform.enable_tag:
res += ' {}'.format(', '.join(sub['tags']))
res += '\n'
# send_msgs(bot, event.group_id, 'group', [await parse_text(res)])
await query_sub.finish(Message(await parse_text(res)))
def do_del_sub(del_sub: Type[Matcher]):

View File

@ -10,6 +10,7 @@ class PlugConfig(BaseSettings):
hk_reporter_use_local: bool = False
hk_reporter_browser: str = ''
hk_reporter_init_filter: bool = True
hk_reporter_use_queue: bool = False
class Config:
extra = 'ignore'

View File

@ -11,6 +11,7 @@ from .platform import platform_manager
from .send import do_send_msgs
from .send import send_msgs
from .types import UserSubInfo
from .plugin_config import plugin_config
scheduler = AsyncIOScheduler()
@ -43,7 +44,7 @@ async def fetch_and_send(target_type: str):
if not bot:
logger.warning('no bot connected')
else:
send_msgs(bot, user.user, user.user_type, await send_post.generate_messages())
await send_msgs(bot, user.user, user.user_type, await send_post.generate_messages())
for platform_name, platform in platform_manager.items():
if platform.schedule_type in ['cron', 'interval', 'date']:
@ -52,16 +53,17 @@ for platform_name, platform in platform_manager.items():
fetch_and_send, platform.schedule_type, **platform.schedule_kw,
args=(platform_name,))
scheduler.add_job(do_send_msgs, 'interval', seconds=0.3, coalesce=True)
if plugin_config.hk_reporter_use_queue:
scheduler.add_job(do_send_msgs, 'interval', seconds=0.3, coalesce=True)
class SchedulerLogFilter(logging.Filter):
class SchedulerLogFilter(logging.Filter):
def filter(self, record: logging.LogRecord) -> bool:
logger.debug("logRecord", record, record.getMessage())
return not (record.name == "apscheduler" and 'skipped: maximum number of running instances reached' in record.getMessage())
def filter(self, record: logging.LogRecord) -> bool:
logger.debug("logRecord", record, record.getMessage())
return not (record.name == "apscheduler" and 'skipped: maximum number of running instances reached' in record.getMessage())
aps_logger = logging.getLogger("apscheduler")
aps_logger.setLevel(30)
aps_logger.addFilter(SchedulerLogFilter())
aps_logger.handlers.clear()
aps_logger.addHandler(LoguruHandler())
aps_logger = logging.getLogger("apscheduler")
aps_logger.setLevel(30)
aps_logger.addFilter(SchedulerLogFilter())
aps_logger.handlers.clear()
aps_logger.addHandler(LoguruHandler())

View File

@ -1,9 +1,18 @@
from nonebot import logger
import time
from nonebot import logger
from nonebot.adapters.cqhttp.bot import Bot
from .plugin_config import plugin_config
QUEUE = []
LAST_SEND_TIME = time.time()
async def _do_send(bot: 'Bot', user: str, user_type: str, msg):
if user_type == 'group':
await bot.call_api('send_group_msg', group_id=user, message=msg)
elif user_type == 'private':
await bot.call_api('send_private_msg', user_id=user, message=msg)
async def do_send_msgs():
global LAST_SEND_TIME
@ -12,10 +21,7 @@ async def do_send_msgs():
if QUEUE:
bot, user, user_type, msg, retry_time = QUEUE.pop(0)
try:
if user_type == 'group':
await bot.call_api('send_group_msg', group_id=user, message=msg)
elif user_type == 'private':
await bot.call_api('send_private_msg', user_id=user, message=msg)
await _do_send(bot, user, user_type, msg)
except:
if retry_time > 0:
QUEUE.insert(0, (bot, user, user_type, msg, retry_time - 1))
@ -23,8 +29,12 @@ async def do_send_msgs():
logger.warning('send msg err {}'.format(msg))
LAST_SEND_TIME = time.time()
def send_msgs(bot, user, user_type, msgs):
for msg in msgs:
QUEUE.append((bot, user, user_type, msg, 2))
async def send_msgs(bot, user, user_type, msgs):
if plugin_config.hk_reporter_use_queue:
for msg in msgs:
QUEUE.append((bot, user, user_type, msg, 2))
else:
for msg in msgs:
await _do_send(bot, user, user_type, msg)