Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Dev #1556

Merged
merged 5 commits into from
Aug 15, 2024
Merged

Dev #1556

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@


[![license](https://img.shields.io/badge/license-AGPL3.0-FE7D37)](https://github.com/HibiKier/zhenxun_bot/blob/main/LICENSE)
[![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-是真寻酱哒-red?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=u8PgBkMZ)
[![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-真寻的技术群-c73e7e?style=flat-square&logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=u8PgBkMZ)
[![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-是真寻酱哒-red?style=logo=tencent-qq)](https://jq.qq.com/?_wv=1027&k=u8PgBkMZ)
[![tencent-qq](https://img.shields.io/badge/%E7%BE%A4-真寻的技术群-c73e7e?style=logo=tencent-qq)](https://qm.qq.com/q/YYYt5rkMYc)


</div>
Expand Down
11 changes: 8 additions & 3 deletions zhenxun/builtin_plugins/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,12 @@ async def _():
and not await SignUser.annotate().count()
):
try:
group_user = await GroupInfoUser.filter(uid__isnull=False).all()
group_user = []
try:
group_user = await GroupInfoUser.filter(uid__isnull=False).all()
except Exception:
logger.warning("获取GroupInfoUser数据uid失败...")
user2uid = {u.user_id: u.uid for u in group_user}
flag = False
db = Tortoise.get_connection("default")
old_sign_list = await db.execute_query_dict(SIGN_SQL)
old_bag_list = await db.execute_query_dict(BAG_SQL)
Expand All @@ -70,7 +73,9 @@ async def _():
}
create_list = []
sign_id_list = []
max_uid = max(user2uid.values()) + 1
max_uid = 0
if user2uid:
max_uid = max(user2uid.values()) + 1
for old_# old_sign_list:
sign_id_list.append(old_sign["user_id"])
old_bag = [
Expand Down
70 changes: 44 additions & 26 deletions zhenxun/builtin_plugins/admin/group_member_update/_data_source.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,49 +88,67 @@ async def v11(cls, bot: v11Bot, group_id: str):
exist_member_list = []
default_auth = Config.get_config("admin_bot_manage", "ADMIN_DEFAULT_AUTH")
group_member_list = await bot.get_group_member_list(group_id=int(group_id))
db_user = await GroupInfoUser.filter(group_id=group_id).all()
db_user_uid = [u.user_id for u in db_user]
create_list = []
update_list = []
delete_list = []
for user_info in group_member_list:
user_id = user_info["user_id"]
user_id = str(user_info["user_id"])
nickname = user_info["card"] or user_info["nickname"]
role = user_info["role"]
if default_auth:
if role in ["owner", "admin"] and not await LevelUser.is_group_flag(
str(user_id), group_id
user_id, group_id
):
await LevelUser.set_level(user_id, group_id, default_auth)
if str(user_id) in bot.config.superusers:
await LevelUser.set_level(str(user_id), group_id, 9)
if user_id in bot.config.superusers:
await LevelUser.set_level(user_id, group_id, 9)
join_time = datetime.strptime(
time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime(user_info["join_time"])
),
"%Y-%m-%d %H:%M:%S",
).replace(tzinfo=timezone(timedelta(hours=8)))
if cnt := db_user_uid.count(user_id):
users = [u for u in db_user if u.user_id == user_id]
user = users[0]
if cnt > 1:
for u in users[1:]:
delete_list.append(u.id)
user.user_name = nickname
update_list.append(user)
else:
create_list.append(
GroupInfoUser(
user_id=user_id,
group_id=group_id,
user_name=nickname,
user_join_time=join_time,
platform="qq",
)
)
exist_member_list.append(user_id)
logger.debug(
"更新成功", "更新群组成员信息", session=user_id, group_id=group_id
)
cnt = await GroupInfoUser.filter(
user_id=str(user_id), group_id=group_id
).count()
if cnt > 1:
await GroupInfoUser.filter(
user_id=str(user_id), group_id=group_id
).delete()
await GroupInfoUser.update_or_create(
user_id=str(user_id),
group_id=group_id,
defaults={
"user_name": nickname,
"user_join_time": join_time.replace(
tzinfo=timezone(timedelta(hours=8))
),
"platform": "qq",
},
if create_list:
await GroupInfoUser.bulk_create(create_list, 30)
logger.debug(
f"创建用户数据 {len(create_list)} 条",
"更新群组成员信息",
target=group_id,
)
exist_member_list.append(str(user_id))
if update_list:
await GroupInfoUser.bulk_update(update_list, ["user_name"], 30)
logger.debug(
"更新成功", "更新群组成员信息", session=user_id, group_id=group_id
f"更新户数据 {len(update_list)} 条", "更新群组成员信息", target=group_id
)
if delete_list:
await GroupInfoUser.filter(id__in=delete_list).delete()
logger.debug(f"删除重复数据 Ids: {delete_list}", "更新群组成员信息")
if delete_member_list := list(
set(exist_member_list).difference(
set(await GroupInfoUser.get_group_member_id_list(group_id))
)
set(exist_member_list).difference(set(db_user_uid))
):
await GroupInfoUser.filter(
user_id__in=delete_member_list, group_id=group_id
Expand Down
4 changes: 3 additions & 1 deletion zhenxun/builtin_plugins/help/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ async def sort_type(self):
"""
if not self._data:
self._data = await PluginInfo.filter(
plugin_type=PluginType.NORMAL, load_status=True
menu_type__not="",
load_status=True,
plugin_type__in=[PluginType.NORMAL, PluginType.HIDDEN],
)
if not self._sort_data:
for plugin in self._data:
Expand Down
1 change: 0 additions & 1 deletion zhenxun/builtin_plugins/help_help.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
from zhenxun.models.group_console import GroupConsole
from zhenxun.models.plugin_info import PluginInfo
from zhenxun.services.log import logger
from zhenxun.utils._build_image import BuildImage
from zhenxun.utils.enum import PluginType
from zhenxun.utils.message import MessageUtils

Expand Down
4 changes: 4 additions & 0 deletions zhenxun/builtin_plugins/init/init_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ async def _handle_setting(
setting = extra_data.setting or PluginSetting()
if metadata.type == "library":
extra_data.plugin_type = PluginType.HIDDEN
if (
extra_data.plugin_type == PluginType.HIDDEN
and extra_data.plugin_type != "功能"
):
extra_data.menu_type = ""
plugin_list.append(
PluginInfo(
Expand Down
6 changes: 2 additions & 4 deletions zhenxun/models/group_member_info.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
from typing import Set

from tortoise import fields
from zhenxun.configs.config import Config

from zhenxun.configs.config import Config
from zhenxun.services.db_context import Model
from zhenxun.services.log import logger


class GroupInfoUser(Model):
Expand All @@ -31,7 +30,7 @@ class Meta:
unique_together = ("user_id", "group_id")

@classmethod
async def get_group_member_id_list(cls, group_id: str) -> Set[int]:
async def get_all_uid(cls, group_id: str) -> Set[int]:
"""获取该群所有用户id

参数:
Expand Down Expand Up @@ -99,7 +98,6 @@ async def get_user_nickname(cls, user_id: str, group_id: str) -> str:
return user.nickname
return ""


@classmethod
async def _run_script(cls):
return [
Expand Down
2 changes: 1 addition & 1 deletion zhenxun/models/plugin_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class PluginInfo(Model):
"""进群默认开关状态"""
limit_superuser = fields.BooleanField(default=False, description="是否限制超级用户")
"""是否限制超级用户"""
menu_type = fields.CharField(max_length=255, default="功能", description="菜单类型")
menu_type = fields.CharField(max_length=255, default="", description="菜单类型")
"""菜单类型"""
plugin_type = fields.CharEnumField(PluginType, null=True, description="插件类型")
"""插件类型"""
Expand Down
8 changes: 7 additions & 1 deletion zhenxun/plugins/poke/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from zhenxun.configs.utils import PluginExtraData
from zhenxun.models.ban_console import BanConsole
from zhenxun.services.log import logger
from zhenxun.utils.enum import PluginType
from zhenxun.utils.message import MessageUtils
from zhenxun.utils.utils import CountLimiter

Expand All @@ -19,7 +20,12 @@
usage="""
戳一戳随机掉落语音或美图萝莉图
""".strip(),
extra=PluginExtraData(author="HibiKier", version="0.1", menu_type="其他").dict(),
extra=PluginExtraData(
author="HibiKier",
version="0.1",
menu_type="其他",
plugin_type=PluginType.HIDDEN,
).dict(),
)

REPLY_MESSAGE = [
Expand Down
2 changes: 1 addition & 1 deletion zhenxun/plugins/web_ui/api/tabs/manage/chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ async def _(
global ws_conn, ID2NAME, ID_LIST
uid = session.id1
gid = session.id3 or session.id2
if ws_conn and uid:
if ws_conn and ws_conn.client_state == WebSocketState.CONNECTED and uid:
msg_id = event.message_id
if msg_id in ID_LIST:
return
Expand Down
43 changes: 22 additions & 21 deletions zhenxun/utils/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
from nonebot import get_driver
from playwright.__main__ import main
from playwright.async_api import Browser, Playwright, async_playwright
from zhenxun.configs.config import SYSTEM_PROXY

from zhenxun.configs.config import SYSTEM_PROXY
from zhenxun.services.log import logger

driver = get_driver()
Expand All @@ -14,36 +14,37 @@
_browser: Browser | None = None


@driver.on_startup
async def start_browser():
global _playwright
global _browser
install()
await check_playwright_env()
_playwright = await async_playwright().start()
_browser = await _playwright.chromium.launch()
# @driver.on_startup
# async def start_browser():
# global _playwright
# global _browser
# install()
# await check_playwright_env()
# _playwright = await async_playwright().start()
# _browser = await _playwright.chromium.launch()


@driver.on_shutdown
async def shutdown_browser():
if _browser:
await _browser.close()
if _playwright:
await _playwright.stop() # type: ignore
# @driver.on_shutdown
# async def shutdown_browser():
# if _browser:
# await _browser.close()
# if _playwright:
# await _playwright.stop() # type: ignore


def get_browser() -> Browser:
if not _browser:
raise RuntimeError("playwright is not initalized")
return _browser
# def get_browser() -> Browser:
# if not _browser:
# raise RuntimeError("playwright is not initalized")
# return _browser


def install():
"""自动安装、更新 Chromium"""

def set_env_variables():
os.environ[
"PLAYWRIGHT_DOWNLOAD_HOST"] = "https://npmmirror.com/mirrors/playwright/"
os.environ["PLAYWRIGHT_DOWNLOAD_HOST"] = (
"https://npmmirror.com/mirrors/playwright/"
)
if SYSTEM_PROXY:
os.environ["HTTPS_PROXY"] = SYSTEM_PROXY

Expand Down
4 changes: 2 additions & 2 deletions zhenxun/utils/http_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import httpx
import rich
from httpx import ConnectTimeout, Response
from nonebot import require
from nonebot_plugin_alconna import UniMessage
from nonebot_plugin_htmlrender import get_browser
from playwright.async_api import Page
from retrying import retry

Expand All @@ -18,7 +18,7 @@
from zhenxun.utils.message import MessageUtils
from zhenxun.utils.user_agent import get_user_agent

from .browser import get_browser
# from .browser import get_browser


class AsyncHttpx:
Expand Down