This commit is contained in:
HibiKier
2023-03-19 21:05:34 +08:00
parent f8371e7330
commit 1046815d37
36 changed files with 704 additions and 582 deletions
+83 -84
View File
@@ -1,12 +1,12 @@
import asyncio
import os
import time
from datetime import datetime
from datetime import datetime, timedelta, timezone
from pathlib import Path
from typing import List
from typing import List, Union
import ujson as json
from nonebot.adapters.onebot.v11.message import MessageSegment
from nonebot.adapters.onebot.v11 import Bot, Message, MessageSegment
from configs.config import Config
from configs.path_config import DATA_PATH, IMAGE_PATH
@@ -17,7 +17,7 @@ from utils.http_utils import AsyncHttpx
from utils.image_utils import BuildImage
from utils.manager import group_manager, plugins2settings_manager, plugins_manager
from utils.message_builder import image
from utils.utils import get_bot, get_matchers
from utils.utils import get_matchers
custom_welcome_msg_json = (
Path() / "data" / "custom_welcome_msg" / "custom_welcome_msg.json"
@@ -67,7 +67,7 @@ async def group_current_status(group_id: int) -> str:
async def custom_group_welcome(
msg: str, img_list: List[str], user_id: int, group_id: int
) -> str:
) -> Union[str, Message]:
"""
说明:
替换群欢迎消息
@@ -80,8 +80,9 @@ async def custom_group_welcome(
img_result = ""
result = ""
img = img_list[0] if img_list else ""
if (DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").exists():
(DATA_PATH / f"custom_welcome_msg/{group_id}.jpg").unlink()
msg_image = DATA_PATH / "custom_welcome_msg" / f"{group_id}.jpg"
if msg_image.exists():
msg_image.unlink()
data = {}
if not custom_welcome_msg_json.exists():
custom_welcome_msg_json.parent.mkdir(parents=True, exist_ok=True)
@@ -96,17 +97,15 @@ async def custom_group_welcome(
json.dump(
data, open(custom_welcome_msg_json, "w"), indent=4, ensure_ascii=False
)
logger.info(f"USER {user_id} GROUP {group_id} 更换群欢迎消息 {msg}")
logger.info(f"更换群欢迎消息 {msg}", "更换群欢迎信息", user_id, group_id)
result += msg
if img:
await AsyncHttpx.download_file(
img, DATA_PATH / "custom_welcome_msg" / f"{group_id}.jpg"
)
img_result = image(DATA_PATH / "custom_welcome_msg" / f"{group_id}.jpg")
logger.info(f"USER {user_id} GROUP {group_id} 更换群欢迎消息图片")
await AsyncHttpx.download_file(img, msg_image)
img_result = image(msg_image)
logger.info(f"更换群欢迎消息图片", "更换群欢迎信息", user_id, group_id)
except Exception as e:
logger.error(f"GROUP {group_id} 替换群消息失败 e:{e}")
return "替换群消息失败.."
logger.error(f"替换群消息失败", "更换群欢迎信息", user_id, group_id, e=e)
return "替换群消息失败..."
return f"替换群欢迎消息成功:\n{result}" + img_result
@@ -255,11 +254,8 @@ def _get_plugin_status() -> MessageSegment:
"""
rst = "\t功能\n"
flag_str = "状态".rjust(4) + "\n"
tmp_name = []
for matcher in get_matchers():
if matcher.plugin_name not in tmp_name:
tmp_name.append(matcher.plugin_name)
module = matcher.plugin_name
for matcher in get_matchers(True):
if module := matcher.plugin_name:
flag = plugins_manager.get_plugin_block_type(module)
flag = flag.upper() + " CLOSE" if flag else "OPEN"
try:
@@ -288,7 +284,9 @@ def _get_plugin_status() -> MessageSegment:
return image(b64=A.pic2bs4())
async def update_member_info(group_id: int, remind_superuser: bool = False) -> bool:
async def update_member_info(
bot: Bot, group_id: int, remind_superuser: bool = False
) -> bool:
"""
说明:
更新群成员信息
@@ -296,76 +294,77 @@ async def update_member_info(group_id: int, remind_superuser: bool = False) -> b
:param group_id: 群号
:param remind_superuser: 失败信息提醒超级用户
"""
bot = get_bot()
_group_user_list = await bot.get_group_member_list(group_id=group_id)
_error_member_list = []
_exist_member_list = []
# try:
for user_info in _group_user_list:
nickname = user_info["card"] or user_info["nickname"]
# 更新权限
if user_info["role"] in [
"owner",
"admin",
] and not await LevelUser.is_group_flag(user_info["user_id"], group_id):
await LevelUser.set_level(
user_info["user_id"],
user_info["group_id"],
Config.get_config("admin_bot_manage", "ADMIN_DEFAULT_AUTH"),
)
if str(user_info["user_id"]) in bot.config.superusers:
await LevelUser.set_level(user_info["user_id"], user_info["group_id"], 9)
user = await GroupInfoUser.get_or_none(
user_qq=user_info["user_id"], group_id=user_info["group_id"]
)
if user:
if user.user_name != nickname:
user.user_name = nickname
await user.save(update_fields=["user_name"])
logger.info(
f"用户{user_info['user_id']} 所属{user_info['group_id']} 更新群昵称成功"
admin_default_auth = Config.get_config("admin_bot_manage", "ADMIN_DEFAULT_AUTH")
if admin_default_auth is not None:
for user_info in _group_user_list:
nickname = user_info["card"] or user_info["nickname"]
# 更新权限
if user_info["role"] in [
"owner",
"admin",
] and not await LevelUser.is_group_flag(user_info["user_id"], group_id):
await LevelUser.set_level(
user_info["user_id"],
user_info["group_id"],
admin_default_auth,
)
if str(user_info["user_id"]) in bot.config.superusers:
await LevelUser.set_level(
user_info["user_id"], user_info["group_id"], 9
)
user = await GroupInfoUser.get_or_none(
user_qq=user_info["user_id"], group_id=user_info["group_id"]
)
if user:
if user.user_name != nickname:
user.user_name = nickname
await user.save(update_fields=["user_name"])
logger.debug(
f"更新群昵称成功",
"更新群组成员信息",
user_info["user_id"],
user_info["group_id"],
)
_exist_member_list.append(int(user_info["user_id"]))
continue
join_time = datetime.strptime(
time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime(user_info["join_time"])
),
"%Y-%m-%d %H:%M:%S",
)
await GroupInfoUser.update_or_create(
user_qq=user_info["user_id"],
group_id=user_info["group_id"],
defaults={
"user_name": nickname,
"user_join_time": join_time.replace(
tzinfo=timezone(timedelta(hours=8))
),
},
)
_exist_member_list.append(int(user_info["user_id"]))
continue
join_time = datetime.strptime(
time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(user_info["join_time"])),
"%Y-%m-%d %H:%M:%S",
)
user, _ = await GroupInfoUser.get_or_create(
user_qq=user_info["user_id"],
group_id=user_info["group_id"],
defaults={
"user_name": nickname,
},
)
# await GroupInfoUser.update_or_create(
# user_qq=user_info["user_id"],
# group_id=user_info["group_id"],
# defaults={
# "user_name": nickname,
# # "user_join_time": datetime.now().replace(tzinfo=None),
# },
# )
user.user_join_time = join_time
await user.save()
_exist_member_list.append(int(user_info["user_id"]))
logger.info("更新成功", "更新成员信息", user_info["user_id"], user_info["group_id"])
_del_member_list = list(
set(_exist_member_list).difference(
set(await GroupInfoUser.get_group_member_id_list(group_id))
)
)
if _del_member_list:
for del_user in _del_member_list:
await GroupInfoUser.filter(user_qq=del_user, group_id=group_id).delete()
logger.info(f"退群用户{del_user} 所属{group_id} 已删除")
if _error_member_list and remind_superuser:
result = ""
for error_user in _error_member_list:
result += error_user
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), message=result[:-1]
logger.debug("更新成功", "更新成员信息", user_info["user_id"], user_info["group_id"])
_del_member_list = list(
set(_exist_member_list).difference(
set(await GroupInfoUser.get_group_member_id_list(group_id))
)
)
if _del_member_list:
for del_user in _del_member_list:
await GroupInfoUser.filter(user_qq=del_user, group_id=group_id).delete()
logger.info(f"删除已退群用户", "更新群组成员信息", del_user, group_id)
if _error_member_list and remind_superuser:
result = ""
for error_user in _error_member_list:
result += error_user
await bot.send_private_msg(
user_id=int(list(bot.config.superusers)[0]), message=result[:-1]
)
return True