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 if time.time() - LAST_SEND_TIME < 1.5: return if QUEUE: bot, user, user_type, msg, retry_time = QUEUE.pop(0) try: await _do_send(bot, user, user_type, msg) except Exception as e: if retry_time > 0: QUEUE.insert(0, (bot, user, user_type, msg, retry_time - 1)) else: msg_str = str(msg) if len(msg_str) > 50: msg_str = msg_str[:50] + '...' logger.warning(f'send msg err {e} {msg_str}') LAST_SEND_TIME = time.time() async def send_msgs(bot, user, user_type, msgs): if plugin_config.bison_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)