diff --git a/README.md b/README.md index e54d2df3..ff561690 100644 --- a/README.md +++ b/README.md @@ -238,10 +238,16 @@ __Docker 最新版本由 [Sakuracio](https://github.com/Sakuracio) 提供__ ## 更新 -### 2022/5/23 +### 2022/5/23 \[v1.5.7] * 修复"清除已删除插件数据" [@pull/545](https://github.com/HibiKier/zhenxun_bot/pull/545) * 修复有置顶的up主B站动态获取失败 [@pull/552](https://github.com/HibiKier/zhenxun_bot/pull/552) +* 添加pixiv搜图多关键词支持;修复p站搜图数量参数问题 [@pull/441](https://github.com/HibiKier/zhenxun_bot/pull/441) +* 修复开箱更新价格错误传参 +* 修复pix无法正确查询uid +* 新增色图插件添加配置项ALLOW_GROUP_R18:允许群聊中使用色图r +* 新增PIX插件添加配置项ALLOW_GROUP_SETU:允许非超级用户使用-s参数 +* 新增PIX插件添加配置项ALLOW_GROUP_R18:允许非超级用户使用-r参数 ### 2022/5/22 \[v0.1.5.4] diff --git a/__version__ b/__version__ index 287794ee..07bcb83a 100644 --- a/__version__ +++ b/__version__ @@ -1 +1 @@ -__version__: v0.1.5.4 +__version__: v0.1.5.6 \ No newline at end of file diff --git a/basic_plugins/chat_history/chat_message.py b/basic_plugins/chat_history/chat_message.py index a0042ef3..265cf0bb 100644 --- a/basic_plugins/chat_history/chat_message.py +++ b/basic_plugins/chat_history/chat_message.py @@ -2,6 +2,7 @@ from configs.config import Config from models.chat_history import ChatHistory from nonebot import on_message from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent +from utils.utils import get_message_text from ._rule import rule @@ -22,10 +23,10 @@ chat_history = on_message(rule=rule, priority=1, block=False) async def _(event: MessageEvent): if isinstance(event, GroupMessageEvent): await ChatHistory.add_chat_msg( - event.user_id, event.group_id, str(event.get_message()) + event.user_id, event.group_id, str(event.get_message()), get_message_text(event.json()) ) else: - await ChatHistory.add_chat_msg(event.user_id, None, str(event.get_message())) + await ChatHistory.add_chat_msg(event.user_id, None, str(event.get_message()), get_message_text(event.json())) # @test.handle() diff --git a/basic_plugins/scripts.py b/basic_plugins/scripts.py index d602ccb6..b9fa13b3 100755 --- a/basic_plugins/scripts.py +++ b/basic_plugins/scripts.py @@ -108,6 +108,10 @@ async def _(): "ALTER TABLE genshin ADD bind_group Integer;", "genshin" ), # 新增原神群号绑定字段 + ( + "ALTER TABLE chat_history ADD plain_text Text;", + "chat_history" + ), # 新增纯文本 ] for sql in sql_str: try: diff --git a/models/chat_history.py b/models/chat_history.py index 5198c371..81133cba 100644 --- a/models/chat_history.py +++ b/models/chat_history.py @@ -11,12 +11,13 @@ class ChatHistory(db.Model): user_qq = db.Column(db.BigInteger(), nullable=False) group_id = db.Column(db.BigInteger()) text = db.Column(db.Text()) + plain_text = db.Column(db.Text()) create_time = db.Column(db.DateTime(timezone=True), nullable=False) @classmethod - async def add_chat_msg(cls, user_qq: int, group_id: Optional[int], text: str): + async def add_chat_msg(cls, user_qq: int, group_id: Optional[int], text: str, plain_text: str): await cls.create( - user_qq=user_qq, group_id=group_id, text=text, create_time=datetime.now() + user_qq=user_qq, group_id=group_id, text=text, plain_text=plain_text, create_time=datetime.now() ) @classmethod @@ -97,7 +98,6 @@ class ChatHistory(db.Model): if date_scope: sql += f"AND create_time BETWEEN '{date_scope[0]}' AND '{date_scope[1]}' " sql += f"GROUP BY user_qq ORDER BY sum {order if order and order.upper() != 'DES' else ''} LIMIT {limit}" - print(sql) return await db.all(db.text(sql)) @classmethod diff --git a/plugins/bilibili_sub/utils.py b/plugins/bilibili_sub/utils.py index ac15facf..76e30fa9 100755 --- a/plugins/bilibili_sub/utils.py +++ b/plugins/bilibili_sub/utils.py @@ -38,7 +38,6 @@ async def create_live_des_image(uid: int, title: str, cover: str, tags: str, des ava = BuildImage(100, 100, background=BytesIO(await get_pic(face))) ava.circle() cover = BuildImage(470, 265, background=BytesIO(await get_pic(cover))) - print() def _create_live_des_image( diff --git a/plugins/black_word/__init__.py b/plugins/black_word/__init__.py index db9c7afd..9364959a 100644 --- a/plugins/black_word/__init__.py +++ b/plugins/black_word/__init__.py @@ -241,7 +241,6 @@ async def _(event: MessageEvent, arg: Message = CommandArg()): uid = int(msg[0]) id_ = int(msg[1]) punish_level = int(msg[2]) - print(uid, id_, punish_level) rst = await set_user_punish(uid, id_, punish_level) await set_punish.send(rst) logger.info( diff --git a/plugins/black_word/model.py b/plugins/black_word/model.py index 2a7c682c..ff944d90 100644 --- a/plugins/black_word/model.py +++ b/plugins/black_word/model.py @@ -68,7 +68,6 @@ class BlackWord(db.Model): user = await query.where(cls.black_word == black_word).order_by(cls.id.desc()).gino.first() elif id_: user_list = await query.gino.all() - print(len(user_list)) if len(user_list) == 0 or (id_ < 0 or id_ > len(user_list)): return False user = user_list[id_] diff --git a/plugins/black_word/utils.py b/plugins/black_word/utils.py index fbc36a6d..674be71f 100644 --- a/plugins/black_word/utils.py +++ b/plugins/black_word/utils.py @@ -88,9 +88,7 @@ class BlackWordManager: :param group_id: 群号 :param message: 消息 """ - print(user_id, group_id, message) if data := self._check(message): - print(data) if data[0]: await _add_user_black_word( user_id, group_id, data[0], message, int(data[1]) diff --git a/plugins/open_cases/__init__.py b/plugins/open_cases/__init__.py index e649751d..a3c2cb51 100755 --- a/plugins/open_cases/__init__.py +++ b/plugins/open_cases/__init__.py @@ -211,16 +211,16 @@ update_price = on_command("更新开箱价格", priority=1, permission=SUPERUSER @update_price.handle() -async def _( event: MessageEvent): - await update_price.send(await util_get_buff_price(str(event.get_message()))) +async def _(event: MessageEvent, arg: Message = CommandArg()): + await update_price.send(await util_get_buff_price(arg.extract_plain_text().strip())) update_img = on_command("更新开箱图片", priority=1, permission=SUPERUSER, block=True) @update_img.handle() -async def _(event: MessageEvent): - await update_img.send(await util_get_buff_img(str(event.get_message()))) +async def _(event: MessageEvent, arg: Message = CommandArg()): + await update_img.send(await util_get_buff_img(str(arg.extract_plain_text().strip()))) # 重置开箱 diff --git a/plugins/pix_gallery/_model/omega_pixiv_illusts.py b/plugins/pix_gallery/_model/omega_pixiv_illusts.py index 43b0687d..a22abc6d 100644 --- a/plugins/pix_gallery/_model/omega_pixiv_illusts.py +++ b/plugins/pix_gallery/_model/omega_pixiv_illusts.py @@ -139,15 +139,14 @@ class OmegaPixivIllusts(db.Model): data = await cls.select('pid').gino.all() return [x[0] for x in data] - @classmethod - async def test(cls, nsfw_tag: int = 1): - if nsfw_tag is not None: - query = cls.query.where(cls.nsfw_tag == nsfw_tag) - else: - query = cls.query - query = query.where((cls.width - cls.height) < 50) - for x in await query.gino.all(): - print(x.pid) + # async def test(cls, nsfw_tag: int = 1): + # if nsfw_tag is not None: + # query = cls.query.where(cls.nsfw_tag == nsfw_tag) + # else: + # query = cls.query + # query = query.where((cls.width - cls.height) < 50) + # for x in await query.gino.all(): + # print(x.pid) diff --git a/plugins/pix_gallery/pix.py b/plugins/pix_gallery/pix.py index 7c62c8bb..aa1c2698 100755 --- a/plugins/pix_gallery/pix.py +++ b/plugins/pix_gallery/pix.py @@ -18,6 +18,7 @@ usage: 查看 pix 好康图库 指令: pix ?*[tags]: 通过 tag 获取相似图片,不含tag时随机抽取 + pid [uid]: 通过uid获取图片 pix pid[pid]: 查看图库中指定pid图片 """.strip() __plugin_superuser_usage__ = """ @@ -49,7 +50,9 @@ __plugin_configs__ = { "value": None, "help": "单次发送的图片数量达到指定值时转发为合并消息", "default_value": None, - } + }, + "ALLOW_GROUP_SETU": {"value": False, "help": "允许非超级用户使用-s参数", "default_value": False}, + "ALLOW_GROUP_R18": {"value": False, "help": "允许非超级用户使用-r参数", "default_value": False}, } @@ -80,10 +83,13 @@ async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()): nsfw_tag = 2 else: nsfw_tag = 0 - if nsfw_tag != 0 and str(event.user_id) not in bot.config.superusers: - await pix.finish("你不能看这些噢,这些都是是留给管理员看的...") - if n := len(x) == 1 and is_number(x[0]): - num = int(x[-1]) + if str(event.user_id) not in bot.config.superusers: + if (nsfw_tag == 1 and not Config.get_config("pix", "ALLOW_GROUP_SETU")) or ( + nsfw_tag == 2 and not Config.get_config("pix", "ALLOW_GROUP_R18") + ): + await pix.finish("你不能看这些噢,这些都是是留给管理员看的...") + if n := len(x) == 1 and is_number(x[0]) and int(x[0]) < 100: + num = int(x[0]) keyword = "" elif n > 1: if is_number(x[-1]): diff --git a/plugins/send_setu_/send_setu/__init__.py b/plugins/send_setu_/send_setu/__init__.py index b9739a3b..e4f67caf 100755 --- a/plugins/send_setu_/send_setu/__init__.py +++ b/plugins/send_setu_/send_setu/__init__.py @@ -97,6 +97,7 @@ __plugin_configs__ = { }, "TIMEOUT": {"value": 10, "help": "色图下载超时限制(秒)", "default_value": 10}, "SHOW_INFO": {"value": True, "help": "是否显示色图的基本信息,如PID等", "default_value": True}, + "ALLOW_GROUP_R18": {"value": False, "help": "在群聊中启用R18权限", "default_value": False}, } Config.add_plugin_config("pixiv", "PIXIV_NGINX_URL", "i.pixiv.re", help_="Pixiv反向代理") @@ -148,10 +149,16 @@ async def _( if cmd[0] == "色图r" and isinstance(event, PrivateMessageEvent): r18 = 1 num = 10 - elif cmd[0] == "色图r" and isinstance(event, GroupMessageEvent): - await setu.finish( - random.choice(["这种不好意思的东西怎么可能给这么多人看啦", "羞羞脸!给我滚出克私聊!", "变态变态变态变态大变态!"]) - ) + elif ( + cmd[0] == "色图r" + and isinstance(event, GroupMessageEvent) + ): + if not Config.get_config("send_setu", "ALLOW_GROUP_R18"): + await setu.finish( + random.choice(["这种不好意思的东西怎么可能给这么多人看啦", "羞羞脸!给我滚出克私聊!", "变态变态变态变态大变态!"]) + ) + else: + r18 = 1 # 有 数字 的话先尝试本地色图id if msg and is_number(msg): setu_list, code = await get_setu_list(int(msg), r18=r18) diff --git a/plugins/word_clouds/data_source.py b/plugins/word_clouds/data_source.py index 17067e42..5e05e45d 100644 --- a/plugins/word_clouds/data_source.py +++ b/plugins/word_clouds/data_source.py @@ -12,6 +12,7 @@ import numpy as np import matplotlib.pyplot as plt from io import BytesIO from configs.path_config import IMAGE_PATH, FONT_PATH +from services import logger from utils.http_utils import AsyncHttpx from models.chat_history import ChatHistory from configs.config import Config @@ -19,10 +20,11 @@ from configs.config import Config async def pre_precess(msg: List[str], config) -> str: return await asyncio.get_event_loop().run_in_executor( - None, _pre_precess, msg,config) + None, _pre_precess, msg, config + ) -def _pre_precess(msg: List[str],config) -> str: +def _pre_precess(msg: List[str], config) -> str: """对消息进行预处理""" # 过滤掉命令 command_start = tuple([i for i in config.command_start if i]) @@ -46,7 +48,6 @@ def _pre_precess(msg: List[str],config) -> str: return msg - async def draw_word_cloud(messages, config): wordcloud_dir = IMAGE_PATH / "wordcloud" wordcloud_dir.mkdir(exist_ok=True, parents=True) @@ -57,19 +58,21 @@ async def draw_word_cloud(messages, config): url = "https://ghproxy.com/https://raw.githubusercontent.com/HibiKier/zhenxun_bot/main/resources/image/wordcloud/default.png" try: await AsyncHttpx.download_file(url, zx_logo_path) - except: + except Exception as e: + logger.error(f"词云图片资源下载发生错误 {type(e)}:{e}") return False if not wordcloud_ttf.exists(): - ttf_url = 'https://ghproxy.com/https://raw.githubusercontent.com/HibiKier/zhenxun_bot/main/resources/font/STKAITI.TTF' + ttf_url = "https://ghproxy.com/https://raw.githubusercontent.com/HibiKier/zhenxun_bot/main/resources/font/STKAITI.TTF" try: await AsyncHttpx.download_file(ttf_url, wordcloud_ttf) - except: + except Exception as e: + logger.error(f"词云字体资源下载发生错误 {type(e)}:{e}") return False topK = min(int(len(messages)), 100000) - read_name = jieba.analyse.extract_tags(await pre_precess(messages, config), topK=topK, - withWeight=True, - allowPOS=()) + read_name = jieba.analyse.extract_tags( + await pre_precess(messages, config), topK=topK, withWeight=True, allowPOS=() + ) name = [] value = [] for t in read_name: @@ -79,10 +82,11 @@ async def draw_word_cloud(messages, config): name[i] = str(name[i]) dic = dict(zip(name, value)) if Config.get_config("word_clouds", "WORD_CLOUDS_TEMPLATE") == 1: + def random_pic(base_path: str) -> str: path_dir = os.listdir(base_path) path = random.sample(path_dir, 1)[0] - return (str(base_path) + "/" + str(path)) + return str(base_path) + "/" + str(path) mask = np.array(IMG.open(random_pic(wordcloud_dir))) wc = WordCloud( @@ -113,7 +117,11 @@ async def draw_word_cloud(messages, config): async def get_list_msg(user_id, group_id, days): - messages_list = await ChatHistory()._get_msg(uid=user_id, gid=group_id, type_="group", days=days).gino.all() + messages_list = ( + await ChatHistory() + ._get_msg(uid=user_id, gid=group_id, type_="group", days=days) + .gino.all() + ) if messages_list: messages = [i.text for i in messages_list] return messages