Skip to content

Commit

Permalink
Merge pull request #1556 from HibiKier/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
HibiKier authored Aug 15, 2024
2 parents 6326d88 + 23bfaa5 commit b4ccbb0
Show file tree
Hide file tree
Showing 12 changed files with 96 additions and 63 deletions.
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_sign in 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

0 comments on commit b4ccbb0

Please sign in to comment.