修复web_ui群组无法获取,修复web_ui修改插件数据时cmd格式错误

This commit is contained in:
HibiKier 2022-11-30 23:40:55 +08:00
parent 7b3a3451f6
commit 994484f3b0
14 changed files with 109 additions and 77 deletions

View File

@ -296,6 +296,15 @@ PS: **ARM平台** 请使用全量版 同时 **如果你的机器 RAM < 1G 可能
## 更新 ## 更新
### 2022/11/28
* 修复web_ui群组无法获取
* 修复web_ui修改插件数据时cmd格式错误
### 2022/11/28
* :bug: Fix a bug in open_cases to get vanilla knives' prices [@pull/1188](https://github.com/HibiKier/zhenxun_bot/pull/1188)
### 2022/11/24 ### 2022/11/24
* 修复管理员插件加载路径错误 * 修复管理员插件加载路径错误

View File

@ -16,23 +16,7 @@ from utils.http_utils import AsyncHttpx
import asyncio import asyncio
import time import time
import os import os
import ujson as json
try:
import ujson as json
except ModuleNotFoundError:
import json
def group_current_status(group_id: int) -> str:
"""
获取当前所有通知的开关
:param group_id: 群号
"""
rst = "[被动技能 状态]\n"
_data = group_manager.get_task_data()
for task in _data.keys():
rst += f'{_data[task]}: {"" if group_manager.check_group_task_status(group_id, task) else "×"}\n'
return rst.strip()
custom_welcome_msg_json = ( custom_welcome_msg_json = (
@ -40,29 +24,47 @@ custom_welcome_msg_json = (
) )
def group_current_status(group_id: int) -> str:
"""
说明:
获取当前群聊所有通知的开关
参数:
:param group_id: 群号
"""
_data = group_manager.get_task_data()
return "[被动技能 状态]\n" + "\n".join(
[
f'{_data[task]}: {"" if group_manager.check_group_task_status(group_id, task) else "×"}\n'
for task in _data
]
)
async def custom_group_welcome( async def custom_group_welcome(
msg: str, imgs: List[str], user_id: int, group_id: int msg: str, img_list: List[str], user_id: int, group_id: int
) -> str: ) -> str:
""" """
说明:
替换群欢迎消息 替换群欢迎消息
参数:
:param msg: 欢迎消息文本 :param msg: 欢迎消息文本
:param imgs: 欢迎消息图片只取第一张 :param img_list: 欢迎消息图片只取第一张
:param user_id: 用户id用于log记录 :param user_id: 用户id用于log记录
:param group_id: 群号 :param group_id: 群号
""" """
img_result = "" img_result = ""
img = imgs[0] if imgs else ""
result = "" result = ""
img = img_list[0] if img_list else ""
if (DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").exists(): if (DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").exists():
(DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").unlink() (DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").unlink()
data = {}
if not custom_welcome_msg_json.exists(): if not custom_welcome_msg_json.exists():
custom_welcome_msg_json.parent.mkdir(parents=True, exist_ok=True) custom_welcome_msg_json.parent.mkdir(parents=True, exist_ok=True)
data = {}
else: else:
try: try:
data = json.load(open(custom_welcome_msg_json, "r")) data = json.load(open(custom_welcome_msg_json, "r"))
except FileNotFoundError: except FileNotFoundError:
data = {} pass
try: try:
if msg: if msg:
data[str(group_id)] = str(msg) data[str(group_id)] = str(msg)
@ -88,7 +90,9 @@ task_data = None
async def change_group_switch(cmd: str, group_id: int, is_super: bool = False): async def change_group_switch(cmd: str, group_id: int, is_super: bool = False):
""" """
说明:
修改群功能状态 修改群功能状态
参数:
:param cmd: 功能名称 :param cmd: 功能名称
:param group_id: 群号 :param group_id: 群号
:param is_super: 是否位超级用户超级用户用于私聊开关功能状态 :param is_super: 是否位超级用户超级用户用于私聊开关功能状态
@ -161,7 +165,9 @@ async def change_group_switch(cmd: str, group_id: int, is_super: bool = False):
def set_plugin_status(cmd: str, block_type: str = "all"): def set_plugin_status(cmd: str, block_type: str = "all"):
""" """
说明:
设置插件功能状态超级用户使用 设置插件功能状态超级用户使用
参数:
:param cmd: 功能名称 :param cmd: 功能名称
:param block_type: 限制类型, 'all': 私聊+群里, 'private': 私聊, 'group': 群聊 :param block_type: 限制类型, 'all': 私聊+群里, 'private': 私聊, 'group': 群聊
""" """
@ -179,6 +185,7 @@ def set_plugin_status(cmd: str, block_type: str = "all"):
async def get_plugin_status(): async def get_plugin_status():
""" """
说明:
获取功能状态 获取功能状态
""" """
return await asyncio.get_event_loop().run_in_executor(None, _get_plugin_status) return await asyncio.get_event_loop().run_in_executor(None, _get_plugin_status)
@ -186,6 +193,7 @@ async def get_plugin_status():
def _get_plugin_status() -> MessageSegment: def _get_plugin_status() -> MessageSegment:
""" """
说明:
合成功能状态图片 合成功能状态图片
""" """
rst = "\t功能\n" rst = "\t功能\n"
@ -225,7 +233,9 @@ def _get_plugin_status() -> MessageSegment:
async def update_member_info(group_id: int, remind_superuser: bool = False) -> bool: async def update_member_info(group_id: int, remind_superuser: bool = False) -> bool:
""" """
说明:
更新群成员信息 更新群成员信息
参数:
:param group_id: 群号 :param group_id: 群号
:param remind_superuser: 失败信息提醒超级用户 :param remind_superuser: 失败信息提醒超级用户
""" """
@ -238,14 +248,10 @@ async def update_member_info(group_id: int, remind_superuser: bool = False) -> b
nickname = user_info["card"] or user_info["nickname"] nickname = user_info["card"] or user_info["nickname"]
async with db.transaction(): async with db.transaction():
# 更新权限 # 更新权限
if ( if user_info["role"] in [
user_info["role"]
in [
"owner", "owner",
"admin", "admin",
] ] and not await LevelUser.is_group_flag(user_info["user_id"], group_id):
and not await LevelUser.is_group_flag(user_info["user_id"], group_id)
):
await LevelUser.set_level( await LevelUser.set_level(
user_info["user_id"], user_info["user_id"],
user_info["group_id"], user_info["group_id"],
@ -307,7 +313,9 @@ async def update_member_info(group_id: int, remind_superuser: bool = False) -> b
def set_group_bot_status(group_id: int, status: bool) -> str: def set_group_bot_status(group_id: int, status: bool) -> str:
""" """
说明:
设置群聊bot开关状态 设置群聊bot开关状态
参数:
:param group_id: 群号 :param group_id: 群号
:param status: 状态 :param status: 状态
""" """

View File

@ -1,11 +1,13 @@
from typing import List
from nonebot import on_command from nonebot import on_command
from utils.utils import get_message_img
from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message from nonebot.adapters.onebot.v11 import GroupMessageEvent, Message
from nonebot.params import CommandArg from nonebot.params import CommandArg
from ._data_source import custom_group_welcome from ._data_source import custom_group_welcome
from nonebot.adapters.onebot.v11.permission import GROUP from nonebot.adapters.onebot.v11.permission import GROUP
from configs.config import Config from configs.config import Config
from services.log import logger from services.log import logger
from utils.depends import ImageList
__zx_plugin_name__ = "自定义进群欢迎消息 [Admin]" __zx_plugin_name__ = "自定义进群欢迎消息 [Admin]"
@ -35,9 +37,8 @@ custom_welcome = on_command(
@custom_welcome.handle() @custom_welcome.handle()
async def _(event: GroupMessageEvent, arg: Message = CommandArg()): async def _(event: GroupMessageEvent, arg: Message = CommandArg(), img: List[str] = ImageList):
msg = arg.extract_plain_text().strip() msg = arg.extract_plain_text().strip()
img = get_message_img(event.json())
if not msg and not img: if not msg and not img:
await custom_welcome.finish(__plugin_usage__) await custom_welcome.finish(__plugin_usage__)
try: try:

View File

@ -1,4 +1,4 @@
from typing import Tuple from typing import Tuple, List
from configs.config import NICKNAME, Config from configs.config import NICKNAME, Config
from models.ban_user import BanUser from models.ban_user import BanUser
@ -9,6 +9,7 @@ from nonebot.adapters.onebot.v11 import (Bot, GroupMessageEvent, Message,
from nonebot.params import Command, CommandArg from nonebot.params import Command, CommandArg
from nonebot.permission import SUPERUSER from nonebot.permission import SUPERUSER
from services.log import logger from services.log import logger
from utils.depends import AtList
from utils.utils import get_message_at, is_number from utils.utils import get_message_at, is_number
from .data_source import a_ban, parse_ban_time from .data_source import a_ban, parse_ban_time
@ -69,10 +70,10 @@ async def _(
event: GroupMessageEvent, event: GroupMessageEvent,
cmd: Tuple[str, ...] = Command(), cmd: Tuple[str, ...] = Command(),
arg: Message = CommandArg(), arg: Message = CommandArg(),
qq: List[str] = AtList()
): ):
cmd = cmd[0] cmd = cmd[0]
result = "" result = ""
qq = get_message_at(event.json())
if qq: if qq:
qq = qq[0] qq = qq[0]
user_name = await bot.get_group_member_info(group_id=event.group_id, user_id=qq) user_name = await bot.get_group_member_info(group_id=event.group_id, user_id=qq)
@ -127,7 +128,6 @@ async def _(
if str(event.user_id) in bot.config.superusers: if str(event.user_id) in bot.config.superusers:
msg_splt = msg.split() msg_splt = msg.split()
if is_number(msg_splt[0]): if is_number(msg_splt[0]):
qq = int(msg_splt[0]) qq = int(msg_splt[0])
msg = msg_splt[1:] msg = msg_splt[1:]
if cmd in [".ban", "/ban"]: if cmd in [".ban", "/ban"]:

View File

@ -40,10 +40,9 @@ async def _(bot: Bot, event: MessageEvent, arg: Message = CommandArg()):
rst = "" rst = ""
for img in img_list: for img in img_list:
rst += image(img) rst += image(img)
gl = await bot.get_group_list()
gl = [ gl = [
g["group_id"] g["group_id"]
for g in gl for g in await bot.get_group_list()
if group_manager.check_group_task_status(g["group_id"], "broadcast") if group_manager.check_group_task_status(g["group_id"], "broadcast")
] ]
g_cnt = len(gl) g_cnt = len(gl)

View File

@ -1,3 +1,4 @@
import nonebot import nonebot
from pathlib import Path
nonebot.load_plugins("basic_plugins/chat_history") nonebot.load_plugins(str(Path(__file__).parent.resolve()))

View File

@ -2,7 +2,7 @@ from configs.config import Config
from models.chat_history import ChatHistory from models.chat_history import ChatHistory
from nonebot import on_message from nonebot import on_message
from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent from nonebot.adapters.onebot.v11 import GroupMessageEvent, MessageEvent
from utils.utils import get_message_text from utils.depends import PlaintText
from ._rule import rule from ._rule import rule
@ -20,13 +20,13 @@ chat_history = on_message(rule=rule, priority=1, block=False)
@chat_history.handle() @chat_history.handle()
async def _(event: MessageEvent): async def _(event: MessageEvent, msg: str = PlaintText()):
if isinstance(event, GroupMessageEvent): if isinstance(event, GroupMessageEvent):
await ChatHistory.add_chat_msg( await ChatHistory.add_chat_msg(
event.user_id, event.group_id, str(event.get_message()), get_message_text(event.json()) event.user_id, event.group_id, str(event.get_message()), msg
) )
else: else:
await ChatHistory.add_chat_msg(event.user_id, None, str(event.get_message()), get_message_text(event.json())) await ChatHistory.add_chat_msg(event.user_id, None, str(event.get_message()), msg)
# @test.handle() # @test.handle()

View File

@ -19,11 +19,7 @@ from configs.config import Config
from pathlib import Path from pathlib import Path
import random import random
import os import os
import ujson as json
try:
import ujson as json
except ModuleNotFoundError:
import json
__zx_plugin_name__ = "群事件处理 [Hidden]" __zx_plugin_name__ = "群事件处理 [Hidden]"

View File

@ -29,10 +29,13 @@ _flmt = FreqLimiter(300)
# 检查是否被ban # 检查是否被ban
@run_preprocessor @run_preprocessor
async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State): async def _(matcher: Matcher, bot: Bot, event: Event, state: T_State):
if ( if hasattr(event, "user_id") and (
(
(isinstance(event, MessageEvent) or isinstance(event, PokeNotifyEvent)) (isinstance(event, MessageEvent) or isinstance(event, PokeNotifyEvent))
and matcher.priority not in [1, 999] and matcher.priority not in [1, 999]
) or matcher.plugin_name in other_limit_plugins: )
or matcher.plugin_name in other_limit_plugins
):
try: try:
if ( if (
await BanUser.is_super_ban(event.user_id) await BanUser.is_super_ban(event.user_id)

View File

@ -1,7 +1,8 @@
import nonebot import nonebot
from pathlib import Path
nonebot.load_plugins('basic_plugins/super_cmd') nonebot.load_plugins(str(Path(__file__).parent.resolve()))

View File

@ -1,3 +1,4 @@
from nonebot import on_message from nonebot import on_message
from nonebot.adapters.onebot.v11 import ( from nonebot.adapters.onebot.v11 import (
Bot, Bot,

View File

@ -19,10 +19,10 @@ async def _(user: User = Depends(token_to_user)) -> Result:
for g in group_list: for g in group_list:
group_info[g["group_id"]] = Group(**g) group_info[g["group_id"]] = Group(**g)
group_data = group_manager.get_data() group_data = group_manager.get_data()
for group_id in group_data["group_manager"]: for group_id in group_data.group_manager:
try: try:
task_list = [] task_list = []
data = group_data["group_manager"][group_id] data = group_manager[group_id].dict()
for tn, status in data["group_task_status"].items(): for tn, status in data["group_task_status"].items():
task_list.append( task_list.append(
Task( Task(

View File

@ -159,6 +159,9 @@ def _(plugin: Plugin, user: User = Depends(token_to_user)) -> Result:
code=500, code=500,
data=f"WEB_UI POST /webui/plugins model{plugin.model} 发生错误 {type(e)}{e}", data=f"WEB_UI POST /webui/plugins model{plugin.model} 发生错误 {type(e)}{e}",
) )
for key in plugins2settings_manager.keys():
if isinstance(plugins2settings_manager[key].cmd, str):
plugins2settings_manager[key].cmd = plugins2settings_manager[key].cmd.split(',')
plugins2settings_manager.save() plugins2settings_manager.save()
plugins_manager.save() plugins_manager.save()
return Result(code=200, data="修改成功!") return Result(code=200, data="修改成功!")

View File

@ -1,3 +1,4 @@
import copy
from typing import List, Union, Dict, Callable from typing import List, Union, Dict, Callable
from pathlib import Path from pathlib import Path
from .models import BaseData, BaseGroup from .models import BaseData, BaseGroup
@ -65,6 +66,9 @@ class GroupManager(StaticData):
super().__init__(file, False) super().__init__(file, False)
self._data = BaseData.parse_file(file) if file.exists() else BaseData() self._data = BaseData.parse_file(file) if file.exists() else BaseData()
def get_data(self) -> BaseData:
return copy.deepcopy(self._data)
def block_plugin(self, module: str, group_id: int, is_save: bool = True): def block_plugin(self, module: str, group_id: int, is_save: bool = True):
""" """
说明: 说明:
@ -340,6 +344,12 @@ class GroupManager(StaticData):
with open(path, "w", encoding="utf8") as f: with open(path, "w", encoding="utf8") as f:
json.dump(dict_data, f, ensure_ascii=False, indent=4) json.dump(dict_data, f, ensure_ascii=False, indent=4)
def __setitem__(self, key, value):
self._data.group_manager[key] = value
def __getitem__(self, key) -> BaseGroup:
return self._data.group_manager[key]
# def get_super_old_data(self) -> Optional[dict]: # def get_super_old_data(self) -> Optional[dict]:
# """ # """
# 说明: # 说明: