This commit is contained in:
Azide 2022-03-06 18:41:27 +08:00
commit 3057f41f25
3 changed files with 33 additions and 33 deletions

View File

@ -105,9 +105,9 @@ def do_add_sub(add_sub: Type[Matcher]):
raise ValueError raise ValueError
state["id"] = target state["id"] = target
state["name"] = name state["name"] = name
except(KeyboardInterrupt): except (KeyboardInterrupt):
await add_sub.finish("已中止订阅") await add_sub.finish("已中止订阅")
except(ValueError): except (ValueError):
await add_sub.reject("id输入错误") await add_sub.reject("id输入错误")
@add_sub.got("id", _gen_prompt_template("{_prompt}"), [Depends(parse_id)]) @add_sub.got("id", _gen_prompt_template("{_prompt}"), [Depends(parse_id)])
@ -141,7 +141,7 @@ def do_add_sub(add_sub: Type[Matcher]):
async def parser_tags(event: AbstractEvent, state: T_State): async def parser_tags(event: AbstractEvent, state: T_State):
if not isinstance(state["tags"], Message): if not isinstance(state["tags"], Message):
return return
if str(event.get_message()).strip() == "取消":#一般不会有叫 取消 的tag吧 if str(event.get_message()).strip() == "取消": # 一般不会有叫 取消 的tag吧
await add_sub.finish("已中止订阅") await add_sub.finish("已中止订阅")
if str(event.get_message()).strip() == "全部标签": if str(event.get_message()).strip() == "全部标签":
state["tags"] = [] state["tags"] = []

View File

@ -12,8 +12,8 @@ class PlugConfig(BaseSettings):
bison_filter_log: bool = False bison_filter_log: bool = False
bison_to_me: bool = True bison_to_me: bool = True
bison_skip_browser_check: bool = False bison_skip_browser_check: bool = False
bison_use_pic_merge: int = 0#多图片时启用图片合并转发(仅限群),当bison_use_queue为False时该配置不会生效 bison_use_pic_merge: int = 0 # 多图片时启用图片合并转发(仅限群),当bison_use_queue为False时该配置不会生效
#0不启用1首条消息单独发送剩余照片合并转发2以及以上所有消息全部合并转发 # 0不启用1首条消息单独发送剩余照片合并转发2以及以上所有消息全部合并转发
class Config: class Config:
extra = "ignore" extra = "ignore"

View File

@ -1,5 +1,5 @@
from email import message
import time import time
from email import message
from typing import Literal, Union from typing import Literal, Union
from nonebot.adapters import Message, MessageSegment from nonebot.adapters import Message, MessageSegment
@ -8,26 +8,22 @@ from nonebot.log import logger
from .plugin_config import plugin_config from .plugin_config import plugin_config
QUEUE = []#不开启图片合并转发时使用 QUEUE = [] # 不开启图片合并转发时使用
LAST_SEND_TIME = time.time() LAST_SEND_TIME = time.time()
def generate_forward_msg(
msgs:list, self_id:str, nickname:str def generate_forward_msg(msgs: list, self_id: str, nickname: str):
): group_msg = []
group_msg=[]
for msg in msgs: for msg in msgs:
sub_msg={ sub_msg = {
"type":"node", "type": "node",
"data": { "data": {"name": f"{nickname}", "uin": f"{self_id}", "content": f"{msg}"},
"name": f"{nickname}",
"uin": f"{self_id}",
"content": f"{msg}"
}
} }
group_msg.append(sub_msg) group_msg.append(sub_msg)
return group_msg return group_msg
async def _do_send( async def _do_send(
bot: "Bot", user: str, user_type: str, msg: Union[str, Message, MessageSegment] bot: "Bot", user: str, user_type: str, msg: Union[str, Message, MessageSegment]
): ):
@ -36,32 +32,37 @@ async def _do_send(
elif user_type == "private": elif user_type == "private":
await bot.call_api("send_private_msg", user_id=user, message=msg) await bot.call_api("send_private_msg", user_id=user, message=msg)
async def _do_merge_send( async def _do_merge_send(
bot: Bot, user, user_type: Literal["private", "group"], msgs: list bot: Bot, user, user_type: Literal["private", "group"], msgs: list
): ):
if plugin_config.bison_use_pic_merge == 1: if plugin_config.bison_use_pic_merge == 1:
try: try:
await _do_send(bot, user, user_type, msgs.pop(0))#弹出第一条消息,剩下的消息合并 await _do_send(bot, user, user_type, msgs.pop(0)) # 弹出第一条消息,剩下的消息合并
except Exception as e_f:#first_msg_exception except Exception as e_f: # first_msg_exception
logger.error("向群{}发送消息序列首消息失败:{}".format(user,repr(e_f))) logger.error("向群{}发送消息序列首消息失败:{}".format(user, repr(e_f)))
else: else:
logger.info("成功向群{}发送消息序列中的首条消息".format(user)) logger.info("成功向群{}发送消息序列中的首条消息".format(user))
try: try:
if msgs: if msgs:
if len(msgs) == 1:#只有一条消息序列就不合并转发 if len(msgs) == 1: # 只有一条消息序列就不合并转发
await _do_send(bot, user, user_type, msgs.pop(0)) await _do_send(bot, user, user_type, msgs.pop(0))
else: else:
group_bot_info = await bot.get_group_member_info(group_id=user,user_id=bot.self_id,no_cache=True)#调用api获取群内bot的相关参数 group_bot_info = await bot.get_group_member_info(
forward_msg = generate_forward_msg(msgs = msgs, group_id=user, user_id=bot.self_id, no_cache=True
self_id = group_bot_info["user_id"], ) # 调用api获取群内bot的相关参数
nickname = group_bot_info["card"] forward_msg = generate_forward_msg(
)#生成合并转发内容 msgs=msgs,
await bot.send_group_forward_msg(group_id=user,messages=forward_msg) self_id=group_bot_info["user_id"],
except Exception as e_b:#behind_msg_exception nickname=group_bot_info["card"],
logger.warning("向群{}发送合并图片消息超时或者可能失败:{}\n可能是因为图片太大或者太多".format(user,repr(e_b))) ) # 生成合并转发内容
await bot.send_group_forward_msg(group_id=user, messages=forward_msg)
except Exception as e_b: # behind_msg_exception
logger.warning("向群{}发送合并图片消息超时或者可能失败:{}\n可能是因为图片太大或者太多".format(user, repr(e_b)))
else: else:
logger.info("成功向群{}发送合并图片转发消息".format(user)) logger.info("成功向群{}发送合并图片转发消息".format(user))
async def do_send_msgs(): async def do_send_msgs():
global LAST_SEND_TIME global LAST_SEND_TIME
if time.time() - LAST_SEND_TIME < 1.5: if time.time() - LAST_SEND_TIME < 1.5:
@ -81,7 +82,6 @@ async def do_send_msgs():
LAST_SEND_TIME = time.time() LAST_SEND_TIME = time.time()
async def send_msgs(bot: Bot, user, user_type: Literal["private", "group"], msgs: list): async def send_msgs(bot: Bot, user, user_type: Literal["private", "group"], msgs: list):
if plugin_config.bison_use_queue: if plugin_config.bison_use_queue:
if plugin_config.bison_use_pic_merge and user_type == "group": if plugin_config.bison_use_pic_merge and user_type == "group":