mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
修复web_ui群组无法获取,修复web_ui修改插件数据时cmd格式错误
This commit is contained in:
parent
7b3a3451f6
commit
994484f3b0
@ -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
|
||||||
|
|
||||||
* 修复管理员插件加载路径错误
|
* 修复管理员插件加载路径错误
|
||||||
|
|||||||
@ -16,23 +16,7 @@ from utils.http_utils import AsyncHttpx
|
|||||||
import asyncio
|
import asyncio
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
|
||||||
try:
|
|
||||||
import ujson as json
|
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: 状态
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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"]:
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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()))
|
||||||
|
|||||||
@ -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()
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
try:
|
|
||||||
import ujson as json
|
import ujson as json
|
||||||
except ModuleNotFoundError:
|
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
__zx_plugin_name__ = "群事件处理 [Hidden]"
|
__zx_plugin_name__ = "群事件处理 [Hidden]"
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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()))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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="修改成功!")
|
||||||
|
|||||||
@ -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]:
|
||||||
# """
|
# """
|
||||||
# 说明:
|
# 说明:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user