mirror of
https://github.com/zhenxun-org/zhenxun_bot.git
synced 2025-12-15 14:22:55 +08:00
🎨 代码优化
This commit is contained in:
parent
7dfcd0983a
commit
ec24bdf64f
@ -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)
|
||||
@ -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 = [
|
||||
|
||||
@ -88,49 +88,67 @@ class MemberUpdateManage:
|
||||
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",
|
||||
)
|
||||
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",
|
||||
},
|
||||
)
|
||||
exist_member_list.append(str(user_id))
|
||||
).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
|
||||
)
|
||||
if delete_member_list := list(
|
||||
set(exist_member_list).difference(
|
||||
set(await GroupInfoUser.get_group_member_id_list(group_id))
|
||||
if create_list:
|
||||
await GroupInfoUser.bulk_create(create_list, 30)
|
||||
logger.debug(
|
||||
f"创建用户数据 {len(create_list)} 条",
|
||||
"更新群组成员信息",
|
||||
target=group_id,
|
||||
)
|
||||
if update_list:
|
||||
await GroupInfoUser.bulk_update(update_list, ["user_name"], 30)
|
||||
logger.debug(
|
||||
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(db_user_uid))
|
||||
):
|
||||
await GroupInfoUser.filter(
|
||||
user_id__in=delete_member_list, group_id=group_id
|
||||
|
||||
@ -14,7 +14,6 @@ from zhenxun.models.ban_console import BanConsole
|
||||
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
|
||||
|
||||
|
||||
@ -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):
|
||||
@ -31,7 +30,7 @@ class GroupInfoUser(Model):
|
||||
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
|
||||
|
||||
参数:
|
||||
@ -99,7 +98,6 @@ class GroupInfoUser(Model):
|
||||
return user.nickname
|
||||
return ""
|
||||
|
||||
|
||||
@classmethod
|
||||
async def _run_script(cls):
|
||||
return [
|
||||
|
||||
@ -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
|
||||
|
||||
@ -4,8 +4,8 @@ import sys
|
||||
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()
|
||||
@ -14,36 +14,37 @@ _playwright: Playwright | None = None
|
||||
_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
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ import aiofiles
|
||||
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
|
||||
|
||||
@ -18,7 +18,7 @@ from zhenxun.services.log import logger
|
||||
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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user