🎨 修复bug,移除plugins文件夹

This commit is contained in:
HibiKier
2024-08-29 22:01:34 +08:00
parent e10fee74b3
commit 625f17a708
146 changed files with 580 additions and 18320 deletions
+36
View File
@@ -0,0 +1,36 @@
from zhenxun.models.task_info import TaskInfo
from zhenxun.models.ban_console import BanConsole
from zhenxun.models.group_console import GroupConsole
class CommonUtils:
@classmethod
async def is_block(cls, module: str, group_id: str | None) -> bool:
"""判断被动技能是否可以发送
参数:
module: 被动技能模块名
group_id: 群组id
返回:
bool: 是否可以发送
"""
if task := await TaskInfo.get_or_none(module=module):
"""被动全局状态"""
if not task.status:
return True
if group_id:
if await GroupConsole.is_block_task(group_id, module):
"""群组是否禁用被动"""
return True
if g := await GroupConsole.get_or_none(
group_id=group_id, channel_id__isnull=True
):
"""群组权限是否小于0"""
if g.level < 0:
return True
if await BanConsole.is_ban(None, group_id):
"""群组是否被ban"""
return True
return False
+14 -13
View File
@@ -1,8 +1,8 @@
from typing import Any, Callable, Dict
from collections.abc import Callable
from nonebot.adapters.onebot.v11 import Message, MessageSegment
from nonebot.plugin import require
from pydantic import BaseModel
from nonebot.plugin import require
from nonebot.adapters.onebot.v11 import Message, MessageSegment
from zhenxun.models.goods_info import GoodsInfo
@@ -19,7 +19,7 @@ class Goods(BaseModel):
icon: str | None = None
is_passive: bool
func: Callable
kwargs: Dict[str, str] = {}
kwargs: dict[str, str] = {}
send_success_msg: bool
max_num_limit: int
@@ -27,8 +27,8 @@ class Goods(BaseModel):
class ShopRegister(dict):
def __init__(self, *args, **kwargs):
super(ShopRegister, self).__init__(*args, **kwargs)
self._data: Dict[str, Goods] = {}
super().__init__(*args, **kwargs)
self._data: dict[str, Goods] = {}
self._flag = True
def before_handle(self, name: str | tuple[str, ...], load_status: bool = True):
@@ -42,7 +42,7 @@ class ShopRegister(dict):
def register_before_handle(name_list: tuple[str, ...], func: Callable):
if load_status:
for name_ in name_list:
if goods := self._data.get(name_):
if self._data.get(name_):
self._data[name_].before_handle.append(func)
_name = (name,) if isinstance(name, str) else name
@@ -59,7 +59,7 @@ class ShopRegister(dict):
def register_after_handle(name_list: tuple[str, ...], func: Callable):
if load_status:
for name_ in name_list:
if goods := self._data.get(name_):
if self._data.get(name_):
self._data[name_].after_handle.append(func)
_name = (name,) if isinstance(name, str) else name
@@ -99,7 +99,7 @@ class ShopRegister(dict):
def add_register_item(func: Callable):
if name in self._data.keys():
raise ValueError("该商品已注册,请替换其他名称!")
for n, p, d, dd, l, s, dl, pa, i, ssm, mnl in zip(
for n, p, d, dd, lmt, s, dl, pa, i, ssm, mnl in zip(
name,
price,
des,
@@ -123,7 +123,7 @@ class ShopRegister(dict):
price=p,
des=d,
discount=dd,
limit_time=l,
limit_time=lmt,
daily_limit=dl,
is_passive=pa,
func=func,
@@ -133,7 +133,7 @@ class ShopRegister(dict):
goods.price = p
goods.des = d
goods.discount = dd
goods.limit_time = l
goods.limit_time = lmt
goods.daily_limit = dl
goods.icon = i
goods.is_passive = pa
@@ -216,7 +216,8 @@ class ShopRegister(dict):
_current_len = len(x)
if _current_len != len(x):
raise ValueError(
f"注册商品 {name} 中 name,price,des,discount,limit_time,load_status,daily_limit 数量不符!"
f"注册商品 {name} 中 name,price,des,discount,limit_time,"
"load_status,daily_limit 数量不符!"
)
_current_len = _current_len if _current_len > -1 else 1
_name = self.__get(name, _current_len)
@@ -249,7 +250,7 @@ class ShopRegister(dict):
return (
value
if isinstance(value, tuple)
else tuple([value for _ in range(_current_len)])
else tuple(value for _ in range(_current_len))
)
def __setitem__(self, key, value):
+87 -114
View File
@@ -1,23 +1,25 @@
import random
from typing import Awaitable, Callable, Literal, Set
from typing import Literal
from collections.abc import Callable, Awaitable
import httpx
import nonebot
from pydantic import BaseModel
from nonebot.adapters import Bot
from nonebot.adapters.discord import Bot as DiscordBot
from nonebot.utils import is_coroutine_callable
from nonebot.adapters.dodo import Bot as DodoBot
from nonebot.adapters.kaiheila import Bot as KaiheilaBot
from nonebot.adapters.onebot.v11 import Bot as v11Bot
from nonebot.adapters.onebot.v12 import Bot as v12Bot
from nonebot.utils import is_coroutine_callable
from nonebot_plugin_alconna.uniseg import Receipt, Target, UniMessage
from pydantic import BaseModel
from nonebot.adapters.discord import Bot as DiscordBot
from nonebot.adapters.kaiheila import Bot as KaiheilaBot
from nonebot_plugin_alconna.uniseg import Target, Receipt, UniMessage
from zhenxun.models.friend_user import FriendUser
from zhenxun.models.group_console import GroupConsole
from zhenxun.services.log import logger
from zhenxun.utils.exception import NotFindSuperuser
from zhenxun.configs.config import BotConfig
from zhenxun.utils.message import MessageUtils
from zhenxun.models.friend_user import FriendUser
from zhenxun.utils.exception import NotFindSuperuser
from zhenxun.models.group_console import GroupConsole
class UserData(BaseModel):
@@ -78,11 +80,11 @@ class PlatformUtils:
Receipt | None: Receipt
"""
if not superuser_id:
platform = cls.get_platform(bot)
platform_superusers = bot.config.PLATFORM_SUPERUSERS.get(platform) or []
if not platform_superusers:
raise NotFindSuperuser()
superuser_id = random.choice(platform_superusers)
if platform := cls.get_platform(bot):
if platform_superusers := BotConfig.get_superuser(platform):
superuser_id = random.choice(platform_superusers)
else:
raise NotFindSuperuser()
if isinstance(message, str):
message = MessageUtils.build_message(message)
return await cls.send_message(bot, superuser_id, None, message)
@@ -128,25 +130,23 @@ class PlatformUtils:
):
max_id = result_data.max_id
result_list = result_data.list
data_list = []
while max_id == 100:
result_data = await bot.get_member_list(
island_source_id=group_id, page_size=100, max_id=0
)
result_list += result_data.list
max_id = result_data.max_id
for user in result_list:
data_list.append(
UserData(
name=user.nick_name,
card=user.personal_nick_name,
avatar_url=user.avatar_url,
user_id=user.dodo_source_id,
group_id=user.island_source_id,
join_time=int(user.join_time.timestamp()),
)
return [
UserData(
name=user.nick_name,
card=user.personal_nick_name,
avatar_url=user.avatar_url,
user_id=user.dodo_source_id,
group_id=user.island_source_id,
join_time=int(user.join_time.timestamp()),
)
return data_list
for user in result_list
]
if isinstance(bot, KaiheilaBot):
if result_data := await bot.guild_userList(guild_id=group_id):
if result_data.users:
@@ -165,9 +165,6 @@ class PlatformUtils:
)
)
return data_list
if isinstance(bot, DiscordBot):
# TODO: discord获取用户
pass
return []
@classmethod
@@ -197,15 +194,14 @@ class PlatformUtils:
role=user["role"],
join_time=user["join_time"],
)
else:
if friend_list := await bot.get_friend_list():
for f in friend_list:
if f["user_id"] == int(user_id):
return UserData(
name=f["nickname"],
card=f["remark"],
user_id=f["user_id"],
)
elif friend_list := await bot.get_friend_list():
for f in friend_list:
if f["user_id"] == int(user_id):
return UserData(
name=f["nickname"],
card=f["remark"],
user_id=f["user_id"],
)
if isinstance(bot, v12Bot):
if group_id:
if user := await bot.get_group_member_info(
@@ -217,50 +213,36 @@ class PlatformUtils:
user_id=user["user_id"],
group_id=group_id,
)
else:
if friend_list := await bot.get_friend_list():
for f in friend_list:
if f["user_id"] == int(user_id):
return UserData(
name=f["user_name"],
card=f["user_remark"],
user_id=f["user_id"],
)
if isinstance(bot, DodoBot):
if group_id:
if user := await bot.get_member_info(
island_source_id=group_id, dodo_source_id=user_id
):
return UserData(
name=user.nick_name,
card=user.personal_nick_name,
avatar_url=user.avatar_url,
user_id=user.dodo_source_id,
group_id=user.island_source_id,
join_time=int(user.join_time.timestamp()),
)
else:
# TODO: DoDo个人数据
pass
if isinstance(bot, KaiheilaBot):
if group_id:
if user := await bot.user_view(guild_id=group_id, user_id=user_id):
second = None
if user.joined_at:
second = int(user.joined_at / 1000)
return UserData(
name=user.nickname or "",
avatar_url=user.avatar,
user_id=user_id,
group_id=group_id,
join_time=second,
)
else:
# TODO: kaiheila用户详情
pass
if isinstance(bot, DiscordBot):
# TODO: discord获取用户
pass
elif friend_list := await bot.get_friend_list():
for f in friend_list:
if f["user_id"] == int(user_id):
return UserData(
name=f["user_name"],
card=f["user_remark"],
user_id=f["user_id"],
)
if isinstance(bot, DodoBot) and group_id:
if user := await bot.get_member_info(
island_source_id=group_id, dodo_source_id=user_id
):
return UserData(
name=user.nick_name,
card=user.personal_nick_name,
avatar_url=user.avatar_url,
user_id=user.dodo_source_id,
group_id=user.island_source_id,
join_time=int(user.join_time.timestamp()),
)
if isinstance(bot, KaiheilaBot) and group_id:
if user := await bot.user_view(guild_id=group_id, user_id=user_id):
second = int(user.joined_at / 1000) if user.joined_at else None
return UserData(
name=user.nickname or "",
avatar_url=user.avatar,
user_id=user_id,
group_id=group_id,
join_time=second,
)
return None
@classmethod
@@ -277,15 +259,13 @@ class PlatformUtils:
for _ in range(3):
try:
return (await client.get(url)).content
except Exception as e:
except Exception:
logger.error(
"获取用户头像错误",
"Util",
target=user_id,
platform=platform,
)
else:
pass
return None
@classmethod
@@ -302,12 +282,10 @@ class PlatformUtils:
for _ in range(3):
try:
return (await client.get(url)).content
except Exception as e:
except Exception:
logger.error(
"获取群头像错误", "Util", target=gid, platform=platform
)
else:
pass
return None
@classmethod
@@ -364,12 +342,12 @@ class PlatformUtils:
target=f"{group.group_id}:{group.channel_id}",
)
else:
_group = [
_group = next(
g
for g in db_group
if g.group_id == group.group_id
and g.channel_id == group.channel_id
][0]
)
_group.group_name = group.group_name
_group.max_member_count = group.max_member_count
_group.member_count = group.member_count
@@ -392,15 +370,13 @@ class PlatformUtils:
返回:
str | None: 平台
"""
if isinstance(bot, (v11Bot, v12Bot)):
if isinstance(bot, v11Bot | v12Bot):
return "qq"
# if isinstance(bot, DodoBot):
# return "dodo"
# if isinstance(bot, KaiheilaBot):
# return "kaiheila"
# if isinstance(bot, DiscordBot):
# return "discord"
return None
if isinstance(bot, DodoBot):
return "dodo"
if isinstance(bot, KaiheilaBot):
return "kaiheila"
return "discord" if isinstance(bot, DiscordBot) else None
@classmethod
async def get_group_list(cls, bot: Bot) -> tuple[list[GroupConsole], str]:
@@ -466,9 +442,6 @@ class PlatformUtils:
if c.type != 0
]
return group_list, "kaiheila"
if isinstance(bot, DiscordBot):
# TODO: discord群组列表
pass
return [], ""
@classmethod
@@ -518,15 +491,15 @@ class PlatformUtils:
)
for f in friend_list
], "qq"
if isinstance(bot, DodoBot):
# TODO: dodo好友列表
pass
if isinstance(bot, KaiheilaBot):
# TODO: kaiheila好友列表
pass
if isinstance(bot, DiscordBot):
# TODO: discord好友列表
pass
# if isinstance(bot, DodoBot):
# # TODO: dodo好友列表
# pass
# if isinstance(bot, KaiheilaBot):
# # TODO: kaiheila好友列表
# pass
# if isinstance(bot, DiscordBot):
# # TODO: discord好友列表
# pass
return [], ""
@classmethod
@@ -549,12 +522,12 @@ class PlatformUtils:
target: 对应平台Target
"""
target = None
if isinstance(bot, (v11Bot, v12Bot)):
if isinstance(bot, v11Bot | v12Bot):
if group_id:
target = Target(group_id)
elif user_id:
target = Target(user_id, private=True)
elif isinstance(bot, (DodoBot, KaiheilaBot)):
elif isinstance(bot, DodoBot | KaiheilaBot):
if group_id and channel_id:
target = Target(channel_id, parent_id=group_id, channel=True)
elif user_id:
@@ -565,8 +538,8 @@ class PlatformUtils:
async def broadcast_group(
message: str | UniMessage,
bot: Bot | list[Bot] | None = None,
bot_id: str | Set[str] | None = None,
ignore_group: Set[int] | None = None,
bot_id: str | set[str] | None = None,
ignore_group: set[int] | None = None,
check_func: Callable[[str], Awaitable] | None = None,
log_cmd: str | None = None,
platform: Literal["qq", "dodo", "kaiheila"] | None = None,
+10 -13
View File
@@ -1,16 +1,16 @@
import os
import time
from collections import defaultdict
from datetime import datetime
from pathlib import Path
from typing import Any
from pathlib import Path
from datetime import datetime
from collections import defaultdict
import pytz
import httpx
import pypinyin
import pytz
from zhenxun.configs.config import Config
from zhenxun.services.log import logger
from zhenxun.configs.config import Config
class ResourceDirManager:
@@ -18,7 +18,7 @@ class ResourceDirManager:
临时文件管理器
"""
temp_path = []
temp_path = [] # noqa: RUF012
@classmethod
def __tree_append(cls, path: Path):
@@ -69,7 +69,7 @@ class CountLimiter:
if day != self.today:
self.today = day
self.count.clear()
return bool(self.count[key] < self.max)
return self.count[key] < self.max
def get_num(self, key):
return self.count[key]
@@ -130,10 +130,7 @@ def cn2py(word: str) -> str:
参数:
word: 文本
"""
temp = ""
for i in pypinyin.pinyin(word, style=pypinyin.NORMAL):
temp += "".join(i)
return temp
return "".join("".join(i) for i in pypinyin.pinyin(word, style=pypinyin.NORMAL))
async def get_user_avatar(uid: int | str) -> bytes | None:
@@ -147,7 +144,7 @@ async def get_user_avatar(uid: int | str) -> bytes | None:
for _ in range(3):
try:
return (await client.get(url)).content
except Exception as e:
except Exception:
logger.error("获取用户头像错误", "Util", target=uid)
return None
@@ -163,7 +160,7 @@ async def get_group_avatar(gid: int | str) -> bytes | None:
for _ in range(3):
try:
return (await client.get(url)).content
except Exception as e:
except Exception:
logger.error("获取群头像错误", "Util", target=gid)
return None
+5 -5
View File
@@ -1,21 +1,21 @@
import asyncio
from nonebot.adapters import Bot
from ruamel.yaml.comments import CommentedSeq
from nonebot_plugin_session import EventSession
# from nonebot.adapters.discord import Bot as DiscordBot
# from nonebot.adapters.dodo import Bot as DodoBot
# from nonebot.adapters.kaiheila import Bot as KaiheilaBot
from nonebot.adapters.onebot.v11 import Bot as v11Bot
from nonebot.adapters.onebot.v12 import Bot as v12Bot
from nonebot_plugin_session import EventSession
from ruamel.yaml.comments import CommentedSeq
from zhenxun.services.log import logger
class WithdrawManager:
_data = {}
_data = {} # noqa: RUF012
_index = 0
@classmethod
@@ -34,7 +34,7 @@ class WithdrawManager:
return True
if withdraw_time[1] == 1 and (session.id2 or session.id3):
return True
if withdraw_time[1] == 0 and not (session.id2 or session.id3):
if withdraw_time[1] == 0 and not session.id2 and not session.id3:
return True
return False
@@ -82,7 +82,7 @@ class WithdrawManager:
if time:
gid = None
_time = 1
if isinstance(time, (tuple, CommentedSeq)):
if isinstance(time, tuple | CommentedSeq):
if time[0] == 0:
return
if session: