diff --git a/LittlePaimon/__init__.py b/LittlePaimon/__init__.py index d64b2c7..32463cd 100644 --- a/LittlePaimon/__init__.py +++ b/LittlePaimon/__init__.py @@ -2,7 +2,7 @@ from pathlib import Path from nonebot import load_plugins, get_driver, logger, load_plugin from typing import List -# from LittlePaimon.utils.migration import migrate_database +from LittlePaimon import database from LittlePaimon.utils.tool import check_resource DRIVER = get_driver() @@ -10,13 +10,13 @@ __version__ = '3.0.0rc2' try: SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers] -except KeyError: +except Exception: SUPERUSERS = [] logger.warning('请在.env.prod文件中中配置超级用户SUPERUSERS') try: NICKNAME: str = list(DRIVER.config.nickname)[0] -except KeyError: +except Exception: NICKNAME = '派蒙' logo = """ @@ -30,18 +30,13 @@ logo = """ @DRIVER.on_startup async def startup(): - from LittlePaimon.database import connect logger.opt(colors=True).info(logo) - await connect() + await database.connect() from LittlePaimon import web - # await migrate_database() await check_resource() -@DRIVER.on_shutdown -async def shutdown(): - from LittlePaimon.database import disconnect - await disconnect() +DRIVER.on_shutdown(database.disconnect) load_plugins(str(Path(__file__).parent / 'plugins')) diff --git a/LittlePaimon/config/__init__.py b/LittlePaimon/config/__init__.py index a3cad6d..16379f2 100644 --- a/LittlePaimon/config/__init__.py +++ b/LittlePaimon/config/__init__.py @@ -1,4 +1,3 @@ -from .path import * from .config.manage import ConfigManager, ConfigModel from .plugin.manage import PluginManager, HIDDEN_PLUGINS, MatcherInfo, PluginInfo diff --git a/LittlePaimon/config/config/manage.py b/LittlePaimon/config/config/manage.py index b533ad5..c075839 100644 --- a/LittlePaimon/config/config/manage.py +++ b/LittlePaimon/config/config/manage.py @@ -1,5 +1,5 @@ from LittlePaimon.utils.files import load_yaml, save_yaml -from LittlePaimon.config.path import PAIMON_CONFIG +from LittlePaimon.utils.path import PAIMON_CONFIG from .model import ConfigModel diff --git a/LittlePaimon/config/plugin/manage.py b/LittlePaimon/config/plugin/manage.py index 2cadac1..28afa90 100644 --- a/LittlePaimon/config/plugin/manage.py +++ b/LittlePaimon/config/plugin/manage.py @@ -10,7 +10,7 @@ from nonebot.message import run_preprocessor from nonebot.adapters.onebot.v11 import MessageEvent, PrivateMessageEvent, GroupMessageEvent from LittlePaimon import DRIVER, SUPERUSERS from LittlePaimon.utils import logger -from LittlePaimon.config.path import PLUGIN_CONFIG +from LittlePaimon.utils.path import PLUGIN_CONFIG from LittlePaimon.utils.files import load_yaml, save_yaml from LittlePaimon.database.models import PluginPermission, PluginStatistics from .model import MatcherInfo, PluginInfo diff --git a/LittlePaimon/database/__init__.py b/LittlePaimon/database/__init__.py index ae68d39..b86f93d 100644 --- a/LittlePaimon/database/__init__.py +++ b/LittlePaimon/database/__init__.py @@ -4,7 +4,7 @@ from pathlib import Path from tortoise import Tortoise from nonebot.log import logger from LittlePaimon.utils import scheduler -from LittlePaimon.config.path import GENSHIN_DB_PATH, SUB_DB_PATH, GENSHIN_VOICE_DB_PATH, MANAGER_DB_PATH, \ +from LittlePaimon.utils.path import GENSHIN_DB_PATH, SUB_DB_PATH, GENSHIN_VOICE_DB_PATH, MANAGER_DB_PATH, \ LEARNING_CHAT_DB_PATH, YSC_TEMP_IMG_PATH from .models import * diff --git a/LittlePaimon/database/models/character.py b/LittlePaimon/database/models/character.py index 53b9129..30ddaaa 100644 --- a/LittlePaimon/database/models/character.py +++ b/LittlePaimon/database/models/character.py @@ -5,7 +5,7 @@ from typing import Optional, Dict, Iterator from tortoise import fields from tortoise.models import Model -from LittlePaimon.config import JSON_DATA +from LittlePaimon.utils.path import JSON_DATA from LittlePaimon.utils.alias import get_name_by_id from LittlePaimon.utils.files import load_json from LittlePaimon.utils.typing import * diff --git a/LittlePaimon/plugins/Genshin_Calendar/event.py b/LittlePaimon/plugins/Genshin_Calendar/event.py index abfe286..7f7799d 100644 --- a/LittlePaimon/plugins/Genshin_Calendar/event.py +++ b/LittlePaimon/plugins/Genshin_Calendar/event.py @@ -6,7 +6,7 @@ from pathlib import Path from typing import Optional from dateutil.relativedelta import relativedelta -from LittlePaimon.utils import aiorequests +from LittlePaimon.utils.requests import aiorequests res = Path(__file__).parent / 'template' # type 0 普通常驻任务深渊 1 新闻 2 蛋池 3 限时活动H5 diff --git a/LittlePaimon/plugins/Genshin_Voice/__init__.py b/LittlePaimon/plugins/Genshin_Voice/__init__.py index f7591f5..433c6a6 100644 --- a/LittlePaimon/plugins/Genshin_Voice/__init__.py +++ b/LittlePaimon/plugins/Genshin_Voice/__init__.py @@ -2,16 +2,16 @@ import random from typing import Union from nonebot import on_command -from nonebot.adapters.onebot.v11.exception import ActionFailed from nonebot.adapters.onebot.v11 import Message, MessageEvent, GroupMessageEvent, PrivateMessageEvent +from nonebot.adapters.onebot.v11.exception import ActionFailed from nonebot.params import CommandArg from nonebot.permission import SUPERUSER from nonebot.plugin import PluginMetadata from LittlePaimon.config import config -from LittlePaimon.utils.message import CommandCharacter, CommandLang, MessageBuild -from LittlePaimon.utils.alias import get_match_alias from LittlePaimon.database import GenshinVoice +from LittlePaimon.utils.alias import get_match_alias +from LittlePaimon.utils.message import CommandCharacter, CommandLang, MessageBuild from .handler import GuessVoice, get_character_voice, get_rank, get_voice_list from .resources import update_voice_resources diff --git a/LittlePaimon/plugins/Genshin_Voice/draw.py b/LittlePaimon/plugins/Genshin_Voice/draw.py index 424595b..3bfe034 100644 --- a/LittlePaimon/plugins/Genshin_Voice/draw.py +++ b/LittlePaimon/plugins/Genshin_Voice/draw.py @@ -1,10 +1,11 @@ import asyncio from typing import List -from LittlePaimon.config import RESOURCE_BASE_PATH + from LittlePaimon.database import GenshinVoice from LittlePaimon.utils.files import load_image -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.image import PMImage, font_manager as fm +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH async def draw_table_line(img: PMImage, voice_id: int, voice_name: str, voice_content: str, i: int): diff --git a/LittlePaimon/plugins/Genshin_Voice/resources.py b/LittlePaimon/plugins/Genshin_Voice/resources.py index 8f777f2..079862d 100644 --- a/LittlePaimon/plugins/Genshin_Voice/resources.py +++ b/LittlePaimon/plugins/Genshin_Voice/resources.py @@ -5,8 +5,8 @@ from typing import Dict, Optional from lxml import etree from LittlePaimon.database import GenshinVoice -from LittlePaimon.utils import aiorequests from LittlePaimon.utils import logger +from LittlePaimon.utils.requests import aiorequests async def get_character_list() -> Optional[Dict[str, int]]: diff --git a/LittlePaimon/plugins/NoticeAndRequest/config.py b/LittlePaimon/plugins/NoticeAndRequest/config.py index dee3ecd..4bf3944 100644 --- a/LittlePaimon/plugins/NoticeAndRequest/config.py +++ b/LittlePaimon/plugins/NoticeAndRequest/config.py @@ -1,5 +1,5 @@ from typing import Dict, Union -from LittlePaimon.config import GREET_CONFIG, GREET_CONFIG_DEFAULT +from LittlePaimon.utils.path import GREET_CONFIG, GREET_CONFIG_DEFAULT from LittlePaimon.utils.files import load_yaml, save_yaml diff --git a/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py b/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py index ea53dc8..c656f6d 100644 --- a/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py +++ b/LittlePaimon/plugins/Paimon_Abyss/abyss_statistics.py @@ -1,15 +1,16 @@ import datetime -from typing import Dict, Any, Tuple from collections import defaultdict +from typing import Dict, Any, Tuple import pytz from nonebot import get_bot + from LittlePaimon.database import AbyssInfo -from LittlePaimon.utils import aiorequests from LittlePaimon.utils.files import load_image -from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.utils.image import PMImage, font_manager as fm, get_qq_avatar from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.requests import aiorequests async def get_user_avatar(user_id: str, size: Tuple[int, int] = (60, 60)): diff --git a/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py b/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py index b020acf..adf8027 100644 --- a/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py +++ b/LittlePaimon/plugins/Paimon_Abyss/draw_abyss.py @@ -1,11 +1,11 @@ import asyncio import datetime -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils.image import PMImage, font_manager as fm -from LittlePaimon.utils.files import load_image -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.database import AbyssInfo +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.files import load_image +from LittlePaimon.utils.image import PMImage, font_manager as fm +from LittlePaimon.utils.message import MessageBuild def datetime_to_cn(time: datetime.datetime) -> str: diff --git a/LittlePaimon/plugins/Paimon_Abyss/youchuang/api.py b/LittlePaimon/plugins/Paimon_Abyss/youchuang/api.py index 232a13e..63cfa88 100644 --- a/LittlePaimon/plugins/Paimon_Abyss/youchuang/api.py +++ b/LittlePaimon/plugins/Paimon_Abyss/youchuang/api.py @@ -1,6 +1,7 @@ from typing import List, Tuple from pydantic import parse_obj_as + from LittlePaimon.utils.requests import aiorequests from .models import TeamRateResult, TeamRate diff --git a/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py b/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py index fa8f233..933d1d4 100644 --- a/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py +++ b/LittlePaimon/plugins/Paimon_Abyss/youchuang/draw.py @@ -2,11 +2,11 @@ import asyncio from typing import List from LittlePaimon.database import Character, LastQuery -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils.files import load_image from LittlePaimon.utils.alias import get_chara_icon +from LittlePaimon.utils.files import load_image from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH from .api import get_team_rate from .models import TeamRate diff --git a/LittlePaimon/plugins/Paimon_Autobbs/__init__.py b/LittlePaimon/plugins/Paimon_Autobbs/__init__.py index eefb946..b462ad7 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/__init__.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/__init__.py @@ -1,17 +1,17 @@ from typing import Union from nonebot import on_command -from nonebot.rule import to_me -from nonebot.permission import SUPERUSER from nonebot.adapters.onebot.v11 import GroupMessageEvent, PrivateMessageEvent +from nonebot.permission import SUPERUSER from nonebot.plugin import PluginMetadata +from nonebot.rule import to_me from LittlePaimon.database import MihoyoBBSSub, PrivateCookie from LittlePaimon.utils import logger from LittlePaimon.utils.message import CommandUID, CommandSwitch from .coin_handle import mhy_bbs_coin, bbs_auto_coin -from .sign_handle import mhy_bbs_sign, bbs_auto_sign from .draw import draw_result +from .sign_handle import mhy_bbs_sign, bbs_auto_sign __plugin_meta__ = PluginMetadata( name='米游社签到及获取', diff --git a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py index 25debe1..65a0db5 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/coin_handle.py @@ -6,9 +6,11 @@ from collections import defaultdict from typing import Tuple from nonebot import get_bot + from LittlePaimon.config import config from LittlePaimon.database import PrivateCookie, MihoyoBBSSub, LastQuery -from LittlePaimon.utils import logger, aiorequests, scheduler +from LittlePaimon.utils import logger, scheduler +from LittlePaimon.utils.requests import aiorequests from LittlePaimon.utils.api import random_text, random_hex, get_old_version_ds, get_ds # 米游社的API列表 diff --git a/LittlePaimon/plugins/Paimon_Autobbs/draw.py b/LittlePaimon/plugins/Paimon_Autobbs/draw.py index 6e2f96b..c51ac7e 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/draw.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/draw.py @@ -1,10 +1,11 @@ import math -from enum import IntEnum, auto from collections import defaultdict -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils.message import MessageBuild +from enum import IntEnum, auto + from LittlePaimon.utils.files import load_image from LittlePaimon.utils.image import PMImage, font_manager as fm +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH class SignResult(IntEnum): diff --git a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py index 3e759d2..3b9fdf5 100644 --- a/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py +++ b/LittlePaimon/plugins/Paimon_Autobbs/sign_handle.py @@ -3,14 +3,17 @@ import datetime import json import random import time -from nonebot import get_bot from collections import defaultdict from typing import Tuple, Dict, Any, Optional, Union + +from nonebot import get_bot + from LittlePaimon import DRIVER from LittlePaimon.config import config from LittlePaimon.database import MihoyoBBSSub, LastQuery, PrivateCookie -from LittlePaimon.utils import logger, scheduler, aiorequests +from LittlePaimon.utils import logger, scheduler from LittlePaimon.utils.api import get_mihoyo_private_data, get_sign_reward_list, mihoyo_sign_headers, check_retcode +from LittlePaimon.utils.requests import aiorequests from .draw import SignResult, draw_result SIGN_ACTION_API = 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign' diff --git a/LittlePaimon/plugins/Paimon_Bind/__init__.py b/LittlePaimon/plugins/Paimon_Bind/__init__.py index 98f186a..6b78b30 100644 --- a/LittlePaimon/plugins/Paimon_Bind/__init__.py +++ b/LittlePaimon/plugins/Paimon_Bind/__init__.py @@ -11,7 +11,8 @@ from nonebot.typing import T_State from LittlePaimon import NICKNAME from LittlePaimon.config import config -from LittlePaimon.database import LastQuery, PrivateCookie, PublicCookie, Character, PlayerInfo, DailyNoteSub, MihoyoBBSSub +from LittlePaimon.database import LastQuery, PrivateCookie, PublicCookie, Character, PlayerInfo, DailyNoteSub, \ + MihoyoBBSSub from LittlePaimon.utils import logger from LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie from LittlePaimon.utils.message import recall_message diff --git a/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py b/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py index 6c8992b..9bee44f 100644 --- a/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py +++ b/LittlePaimon/plugins/Paimon_CloudGenshin/__init__.py @@ -1,13 +1,13 @@ import re import uuid + from nonebot import on_command -from nonebot.params import CommandArg, ArgPlainText from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent +from nonebot.params import CommandArg, ArgPlainText from nonebot.plugin import PluginMetadata from nonebot.typing import T_State from LittlePaimon.database import CloudGenshinSub - from .handler import get_cloud_genshin_info __plugin_meta__ = PluginMetadata( diff --git a/LittlePaimon/plugins/Paimon_CloudGenshin/api.py b/LittlePaimon/plugins/Paimon_CloudGenshin/api.py index 767d6ae..7409c41 100644 --- a/LittlePaimon/plugins/Paimon_CloudGenshin/api.py +++ b/LittlePaimon/plugins/Paimon_CloudGenshin/api.py @@ -1,4 +1,4 @@ -from LittlePaimon.utils import aiorequests +from LittlePaimon.utils.requests import aiorequests host = 'https://api-cloudgame.mihoyo.com/' diff --git a/LittlePaimon/plugins/Paimon_DailyNote/draw.py b/LittlePaimon/plugins/Paimon_DailyNote/draw.py index 3917cc9..2ecd615 100644 --- a/LittlePaimon/plugins/Paimon_DailyNote/draw.py +++ b/LittlePaimon/plugins/Paimon_DailyNote/draw.py @@ -1,11 +1,11 @@ import datetime import random -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils import load_image +from LittlePaimon.utils.files import load_image from LittlePaimon.utils.image import PMImage from LittlePaimon.utils.image import font_manager as fm from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH async def draw_daily_note_card(data, uid): diff --git a/LittlePaimon/plugins/Paimon_DailyNote/handler.py b/LittlePaimon/plugins/Paimon_DailyNote/handler.py index 7cd55eb..8c6fe82 100644 --- a/LittlePaimon/plugins/Paimon_DailyNote/handler.py +++ b/LittlePaimon/plugins/Paimon_DailyNote/handler.py @@ -6,8 +6,8 @@ import time import pytz from nonebot import get_bot -from nonebot.params import CommandArg, Depends from nonebot.adapters.onebot.v11 import Message +from nonebot.params import CommandArg, Depends from LittlePaimon.config import config from LittlePaimon.database import DailyNoteSub, Player diff --git a/LittlePaimon/plugins/Paimon_Gacha/__init__.py b/LittlePaimon/plugins/Paimon_Gacha/__init__.py index ebbe07a..4ff92c2 100644 --- a/LittlePaimon/plugins/Paimon_Gacha/__init__.py +++ b/LittlePaimon/plugins/Paimon_Gacha/__init__.py @@ -4,9 +4,9 @@ from nonebot import on_command, on_regex from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent from nonebot.params import RegexDict, CommandArg from nonebot.plugin import PluginMetadata + from LittlePaimon.config import config from LittlePaimon.utils.tool import freq_limiter - from .data_handle import load_user_data from .draw import draw_gacha_img diff --git a/LittlePaimon/plugins/Paimon_Gacha/data_handle.py b/LittlePaimon/plugins/Paimon_Gacha/data_handle.py index 48ba580..8d7ac88 100644 --- a/LittlePaimon/plugins/Paimon_Gacha/data_handle.py +++ b/LittlePaimon/plugins/Paimon_Gacha/data_handle.py @@ -1,5 +1,5 @@ -from LittlePaimon.config.path import GACHA_SIM -from LittlePaimon.utils import load_json, save_json +from LittlePaimon.utils.files import load_json, save_json +from LittlePaimon.utils.path import GACHA_SIM def load_user_data(user_id: int) -> dict: diff --git a/LittlePaimon/plugins/Paimon_Gacha/draw.py b/LittlePaimon/plugins/Paimon_Gacha/draw.py index a7f648a..0878fc8 100644 --- a/LittlePaimon/plugins/Paimon_Gacha/draw.py +++ b/LittlePaimon/plugins/Paimon_Gacha/draw.py @@ -3,9 +3,9 @@ from io import BytesIO from PIL import Image, ImageDraw -from LittlePaimon.config.path import GACHA_RES -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.image import font_manager +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import GACHA_RES from .data_handle import load_json from .data_source import get_once_data, get_gacha_data diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/__init__.py b/LittlePaimon/plugins/Paimon_Gacha_Log/__init__.py index 52833e3..4082a9f 100644 --- a/LittlePaimon/plugins/Paimon_Gacha_Log/__init__.py +++ b/LittlePaimon/plugins/Paimon_Gacha_Log/__init__.py @@ -1,4 +1,5 @@ from typing import Union + from nonebot import on_command from nonebot.adapters.onebot.v11 import Bot, MessageEvent, GroupMessageEvent, PrivateMessageEvent from nonebot.plugin import PluginMetadata diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py b/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py index 43d10c0..3d5036a 100644 --- a/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py +++ b/LittlePaimon/plugins/Paimon_Gacha_Log/data_source.py @@ -1,20 +1,22 @@ import asyncio -import time -from typing import Dict, Union, Tuple, Optional -from pathlib import Path import datetime +import time +from pathlib import Path +from typing import Dict, Union, Tuple, Optional from nonebot import on_notice -from nonebot.rule import Rule from nonebot.adapters.onebot.v11 import GroupUploadNoticeEvent, NoticeEvent +from nonebot.rule import Rule + from LittlePaimon import __version__ from LittlePaimon.database import PlayerInfo -from LittlePaimon.config import GACHA_LOG +from LittlePaimon.utils import logger +from LittlePaimon.utils.requests import aiorequests from LittlePaimon.utils.api import get_authkey_by_stoken -from LittlePaimon.utils import aiorequests, logger from LittlePaimon.utils.files import load_json, save_json -from .models import GachaItem, GachaLogInfo, GACHA_TYPE_LIST +from LittlePaimon.utils.path import GACHA_LOG from .draw import draw_gacha_log +from .models import GachaItem, GachaLogInfo, GACHA_TYPE_LIST GACHA_LOG_API = 'https://hk4e-api.mihoyo.com/event/gacha_info/api/getGachaLog' HEADERS: Dict[str, str] = { diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py b/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py index b8f6116..d10e222 100644 --- a/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py +++ b/LittlePaimon/plugins/Paimon_Gacha_Log/draw.py @@ -4,10 +4,10 @@ import math import random from typing import Tuple, List, Optional -from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.utils.files import load_image -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.image import PMImage, get_qq_avatar, font_manager as fm +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH from .models import GachaLogInfo, FiveStarItem, FourStarItem avatar_point = [69, 156, 259, 358, 456, 558, 645, 746, 840, 945] diff --git a/LittlePaimon/plugins/Paimon_Gacha_Log/models.py b/LittlePaimon/plugins/Paimon_Gacha_Log/models.py index 72cd4c3..f2f4177 100644 --- a/LittlePaimon/plugins/Paimon_Gacha_Log/models.py +++ b/LittlePaimon/plugins/Paimon_Gacha_Log/models.py @@ -1,6 +1,8 @@ import datetime from typing import List, Dict, Tuple, Optional + from pydantic import BaseModel + from LittlePaimon.utils.alias import get_chara_icon, get_weapon_icon GACHA_TYPE_LIST = {'100': '新手祈愿', '200': '常驻祈愿', '302': '武器祈愿', '301': '角色祈愿', '400': '角色祈愿'} diff --git a/LittlePaimon/plugins/Paimon_Info/__init__.py b/LittlePaimon/plugins/Paimon_Info/__init__.py index 25f9374..5e4037e 100644 --- a/LittlePaimon/plugins/Paimon_Info/__init__.py +++ b/LittlePaimon/plugins/Paimon_Info/__init__.py @@ -8,8 +8,8 @@ from nonebot.typing import T_State from LittlePaimon import NICKNAME from LittlePaimon.database import PlayerAlias -from LittlePaimon.config import YSC_TEMP_IMG_PATH from LittlePaimon.utils import logger +from LittlePaimon.utils.path import YSC_TEMP_IMG_PATH from LittlePaimon.utils.message import CommandPlayer, CommandCharacter, CommandUID from LittlePaimon.utils.genshin import GenshinInfoManager from LittlePaimon.utils.tool import freq_limiter diff --git a/LittlePaimon/plugins/Paimon_Info/damage_model.py b/LittlePaimon/plugins/Paimon_Info/damage_model.py index 1133a21..ce95ae1 100644 --- a/LittlePaimon/plugins/Paimon_Info/damage_model.py +++ b/LittlePaimon/plugins/Paimon_Info/damage_model.py @@ -1,7 +1,7 @@ import random from typing import Tuple, Dict, Optional, List, Union -from LittlePaimon.config.path import JSON_DATA +from LittlePaimon.utils.path import JSON_DATA from LittlePaimon.utils.files import load_json from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.image import PMImage, font_manager diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py b/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py index bbf9225..d1d4c6a 100644 --- a/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py +++ b/LittlePaimon/plugins/Paimon_Info/draw_character_bag.py @@ -3,13 +3,13 @@ import datetime import math from typing import List -from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.database import Character, PlayerInfo, Player -from LittlePaimon.utils.files import load_image from LittlePaimon.utils.alias import get_chara_icon +from LittlePaimon.utils.files import load_image from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH from .draw_player_card import get_avatar, draw_weapon_icon RESOURCES = RESOURCE_BASE_PATH / 'chara_bag' diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_card.py b/LittlePaimon/plugins/Paimon_Info/draw_character_card.py index c1500e5..4c6825e 100644 --- a/LittlePaimon/plugins/Paimon_Info/draw_character_card.py +++ b/LittlePaimon/plugins/Paimon_Info/draw_character_card.py @@ -1,12 +1,12 @@ import math -from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.database import Character -from LittlePaimon.utils import aiorequests from LittlePaimon.utils.files import load_image from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.requests import aiorequests ICON = RESOURCE_BASE_PATH / 'icon' ARTIFACT_ICON = RESOURCE_BASE_PATH / 'artifact' diff --git a/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py b/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py index 64394a2..06466e0 100644 --- a/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py +++ b/LittlePaimon/plugins/Paimon_Info/draw_character_detail.py @@ -1,12 +1,12 @@ from nonebot import logger -from LittlePaimon.config.path import ENKA_RES, RESOURCE_BASE_PATH -from LittlePaimon.utils import load_image +from LittlePaimon.database import Character +from LittlePaimon.utils.alias import get_chara_icon +from LittlePaimon.utils.files import load_image from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild -from LittlePaimon.utils.alias import get_chara_icon -from LittlePaimon.database import Character +from LittlePaimon.utils.path import ENKA_RES, RESOURCE_BASE_PATH from .damage_cal import get_role_dmg # weapon_url = 'https://upload-bbs.mihoyo.com/game_record/genshin/equip/{}.png' diff --git a/LittlePaimon/plugins/Paimon_Info/draw_player_card.py b/LittlePaimon/plugins/Paimon_Info/draw_player_card.py index da1c17c..cea4bc8 100644 --- a/LittlePaimon/plugins/Paimon_Info/draw_player_card.py +++ b/LittlePaimon/plugins/Paimon_Info/draw_player_card.py @@ -1,12 +1,12 @@ import asyncio from typing import List, Tuple, Optional -from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.database import PlayerInfo, Character, PlayerWorldInfo, Weapon, Player -from LittlePaimon.utils.files import load_image from LittlePaimon.utils.alias import get_chara_icon +from LittlePaimon.utils.files import load_image from LittlePaimon.utils.image import PMImage, get_qq_avatar, font_manager as fm from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH RESOURCES = RESOURCE_BASE_PATH / 'player_card' ICON = RESOURCE_BASE_PATH / 'icon' diff --git a/LittlePaimon/plugins/Paimon_MonthInfo/draw.py b/LittlePaimon/plugins/Paimon_MonthInfo/draw.py index c38beb3..4a9f13d 100644 --- a/LittlePaimon/plugins/Paimon_MonthInfo/draw.py +++ b/LittlePaimon/plugins/Paimon_MonthInfo/draw.py @@ -1,9 +1,9 @@ import random -from LittlePaimon.config.path import RESOURCE_BASE_PATH from LittlePaimon.utils.files import load_image -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.image import PMImage, font_manager as fm +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH RES = RESOURCE_BASE_PATH / 'monthinfo' diff --git a/LittlePaimon/plugins/Paimon_MonthInfo/handler.py b/LittlePaimon/plugins/Paimon_MonthInfo/handler.py index e910437..a4944bb 100644 --- a/LittlePaimon/plugins/Paimon_MonthInfo/handler.py +++ b/LittlePaimon/plugins/Paimon_MonthInfo/handler.py @@ -1,6 +1,6 @@ from LittlePaimon.database import Player -from LittlePaimon.utils.api import get_mihoyo_private_data from LittlePaimon.utils import logger +from LittlePaimon.utils.api import get_mihoyo_private_data from .draw import draw_monthinfo_card diff --git a/LittlePaimon/plugins/Paimon_Wiki/__init__.py b/LittlePaimon/plugins/Paimon_Wiki/__init__.py index 2e817f6..16c5741 100644 --- a/LittlePaimon/plugins/Paimon_Wiki/__init__.py +++ b/LittlePaimon/plugins/Paimon_Wiki/__init__.py @@ -1,23 +1,22 @@ -import time +import datetime from nonebot import on_regex, on_command from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment, GroupMessageEvent -from nonebot.adapters.onebot.v11.helpers import HandleCancellation from nonebot.adapters.onebot.v11.exception import ActionFailed +from nonebot.adapters.onebot.v11.helpers import HandleCancellation from nonebot.params import RegexDict, ArgPlainText, CommandArg, Arg -from nonebot.plugin import PluginMetadata from nonebot.permission import SUPERUSER +from nonebot.plugin import PluginMetadata from nonebot.typing import T_State from LittlePaimon import NICKNAME -from LittlePaimon.utils.alias import get_match_alias -from LittlePaimon.utils.tool import freq_limiter -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.database import PlayerAlias -from LittlePaimon.config import RESOURCE_BASE_PATH -from .draw_map import init_map, draw_map, get_full_map +from LittlePaimon.utils.alias import get_match_alias +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.tool import freq_limiter from .draw_daily_material import draw_material - +from .draw_map import init_map, draw_map, get_full_map __paimon_help__ = { 'type': '原神Wiki', @@ -44,12 +43,13 @@ __plugin_meta__ = PluginMetadata( } ) -daily_material = on_regex(r'(?P现在|(今|明|后)(天|日)|周(一|二|三|四|五|六|日))(天赋|角色|武器)?材料', priority=11, block=True, state={ - 'pm_name': '每日材料', - 'pm_description': '查看某日开放材料刷取的角色和武器', - 'pm_usage': '<今天|周几>材料', - 'pm_priority': 8 -}) +daily_material = on_regex(r'^(?P现在|(今|明|后)(天|日)|周(一|二|三|四|五|六|日))(天赋|角色|武器)?材料$', + priority=11, block=True, state={ + 'pm_name': '每日材料', + 'pm_description': '查看某日开放材料刷取的角色和武器', + 'pm_usage': '<今天|周几>材料', + 'pm_priority': 8 + }) material_map = on_command('材料图鉴', priority=11, block=True, state={ 'pm_name': '材料图鉴', 'pm_description': '查看某个材料的介绍和采集点。', @@ -69,31 +69,27 @@ generate_map = on_command('生成地图', priority=1, block=True, permission=SUP 'pm_priority': 11 }) +week_str = ['周一', '周二', '周三', '周四', '周五', '周六'] + @daily_material.handle() async def _(event: MessageEvent, regex_dict: dict = RegexDict()): - await daily_material.send('开始获取每日材料,请稍候...') - if regex_dict['day'] in ['今日', '今天', '现在']: - day = time.strftime("%w") - elif regex_dict['day'] in ['明日', '明天']: - day = str(int(time.strftime("%w")) + 1) - elif regex_dict['day'] in ['后日', '后天']: - day = str(int(time.strftime("%w")) + 2) + if regex_dict['day'] in {'今日', '今天', '现在'}: + day = datetime.datetime.now().weekday() + elif regex_dict['day'] in {'明日', '明天'}: + day = (datetime.datetime.now() + datetime.timedelta(days=1)).weekday() + elif regex_dict['day'] in {'后日', '后天'}: + day = (datetime.datetime.now() + datetime.timedelta(days=2)).weekday() elif regex_dict['day'] == '周日': await daily_material.finish('周日所有材料都可以刷哦!', at_sender=True) elif regex_dict['day'].startswith('周'): + await daily_material.send('开始获取每日材料,请稍候...') await daily_material.finish(await draw_material(str(event.user_id), regex_dict['day'])) - if day == '0': + if day == 6: await daily_material.finish('周日所有材料都可以刷哦!', at_sender=True) else: - await daily_material.finish(await draw_material(str(event.user_id), { - '1': '周一', - '2': '周二', - '3': '周三', - '4': '周四', - '5': '周五', - '6': '周六', - }[day]), at_sender=True) + await daily_material.send('开始获取每日材料,请稍候...') + await daily_material.finish(await draw_material(str(event.user_id), week_str[day]), at_sender=True) @material_map.handle() @@ -119,7 +115,8 @@ async def _(event: MessageEvent, state: T_State, map_: str = ArgPlainText('map') state['map'] = Message(map_) -@material_map.got('name', prompt='请输入要查询的材料名称,或回答【取消】退出', parameterless=[HandleCancellation(f'好吧,有需要再找{NICKNAME}')]) +@material_map.got('name', prompt='请输入要查询的材料名称,或回答【取消】退出', + parameterless=[HandleCancellation(f'好吧,有需要再找{NICKNAME}')]) async def _(event: MessageEvent, map_: str = ArgPlainText('map'), name: str = ArgPlainText('name')): if (file_path := RESOURCE_BASE_PATH / 'genshin_map' / 'results' / f'{map_}_{name}.png').exists(): await material_map.finish(MessageSegment.image(file_path), at_sender=True) @@ -245,12 +242,14 @@ def create_wiki_matcher(pattern: str, help_fun: str, help_name: str): if choice not in match_alias: state['times'] = state['times'] + 1 if 'times' in state else 1 if state['times'] == 1: - await maps.reject(f'请旅行者从上面的{state["type"]}中选一个问{NICKNAME}\n回答\"取消\"可以取消查询', at_sender=True) + await maps.reject(f'请旅行者从上面的{state["type"]}中选一个问{NICKNAME}\n回答\"取消\"可以取消查询', + at_sender=True) elif state['times'] == 2: await maps.reject(f'别调戏{NICKNAME}啦,快选一个吧,不想问了请回答\"取消\"!', at_sender=True) elif state['times'] >= 3: - await maps.finish(f'看来旅行者您有点神志不清哦(,下次再问{NICKNAME}吧{MessageSegment.face(146)}', at_sender=True) + await maps.finish(f'看来旅行者您有点神志不清哦(,下次再问{NICKNAME}吧{MessageSegment.face(146)}', + at_sender=True) try: await maps.finish(MessageSegment.image(state['img_url'].format(choice))) except ActionFailed: diff --git a/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py b/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py index abaaa6d..de2f070 100644 --- a/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py +++ b/LittlePaimon/plugins/Paimon_Wiki/draw_daily_material.py @@ -1,11 +1,13 @@ import math from pathlib import Path -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils import aiorequests, scheduler + +from LittlePaimon.database import Character, LastQuery +from LittlePaimon.utils import scheduler from LittlePaimon.utils.files import save_json, load_json, load_image from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild -from LittlePaimon.database import Character, LastQuery +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.requests import aiorequests week_cn = { 'monday': '周一', diff --git a/LittlePaimon/plugins/Paimon_Wiki/draw_map.py b/LittlePaimon/plugins/Paimon_Wiki/draw_map.py index 632686b..ec925e0 100644 --- a/LittlePaimon/plugins/Paimon_Wiki/draw_map.py +++ b/LittlePaimon/plugins/Paimon_Wiki/draw_map.py @@ -1,14 +1,16 @@ import math from typing import List -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils import logger, aiorequests + +from PIL import Image, ImageFile, ImageOps + +from LittlePaimon.utils import logger from LittlePaimon.utils.files import load_image from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.message import MessageBuild - +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from LittlePaimon.utils.requests import aiorequests from .genshinmap import utils, models, request, img, XYPoint -from PIL import Image, ImageFile, ImageOps ImageFile.LOAD_TRUNCATED_IMAGES = True Image.MAX_IMAGE_PIXELS = None diff --git a/LittlePaimon/plugins/plugin_manager/__init__.py b/LittlePaimon/plugins/plugin_manager/__init__.py index 096ac72..6ad6b8b 100644 --- a/LittlePaimon/plugins/plugin_manager/__init__.py +++ b/LittlePaimon/plugins/plugin_manager/__init__.py @@ -1,21 +1,55 @@ import asyncio from nonebot import on_regex, on_command +from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent, PrivateMessageEvent, MessageEvent from nonebot.params import RegexDict, CommandArg from nonebot.permission import SUPERUSER -from nonebot.adapters.onebot.v11 import Message, GroupMessageEvent, PrivateMessageEvent, MessageEvent +from nonebot.plugin import PluginMetadata +from nonebot.rule import Rule from nonebot.typing import T_State from LittlePaimon import SUPERUSERS from LittlePaimon.config import ConfigManager, PluginManager +from LittlePaimon.database import PluginPermission from LittlePaimon.utils import logger from LittlePaimon.utils.message import CommandObjectID -from LittlePaimon.database import PluginPermission from .draw_help import draw_help -manage_cmd = on_regex(r'^pm (?Pban|unban) (?P([\w ]*)|all|全部) ?(-g (?P[\d ]*) ?)?(-u (?P[\d ]*) ?)?(?P-r)?', priority=1) -help_cmd = on_command('help', aliases={'帮助', '菜单', 'pm help'}, priority=1) -set_config_cmd = on_command('pm set', priority=1, permission=SUPERUSER) +__plugin_meta__ = PluginMetadata( + name="插件管理", + description="对派蒙插件进行管理", + usage='...', + extra={ + 'author': '惜月', + 'priority': 99, + } +) + + +def fullmatch(msg: Message = CommandArg()) -> bool: + return not bool(msg) + + +manage_cmd = on_regex( + r'^pm (?Pban|unban) (?P([\w ]*)|all|全部) ?(-g (?P[\d ]*) ?)?(-u (?P[\d ]*) ?)?(?P-r)?', + priority=1, state={ + 'pm_name': 'pm-ban|unban', + 'pm_description': '禁用|取消禁用插件的群|用户使用权限', + 'pm_usage': 'pm ban|unban <插件名>', + 'pm_priority': 1 + }) +help_cmd = on_command('help', aliases={'帮助', '菜单', 'pm help'}, priority=1, rule=Rule(fullmatch), state={ + 'pm_name': 'pm-help', + 'pm_description': '查看本帮助', + 'pm_usage': 'help', + 'pm_priority': 3 +}) +set_config_cmd = on_command('pm set', priority=1, permission=SUPERUSER, state={ + 'pm_name': 'pm-set', + 'pm_description': '设置bot的配置项', + 'pm_usage': 'pm set<配置名> <值>', + 'pm_priority': 2 +}) cache_help = {} @@ -31,7 +65,8 @@ async def _(event: GroupMessageEvent, state: T_State, match: dict = RegexDict(), for plugin in match['plugin'].strip().split(' '): if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']: state['plugin'].append(plugin) - elif module_name := list(filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())): + elif module_name := list( + filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())): state['plugin'].append(module_name[0]) else: state['plugin_no_exist'].append(plugin) @@ -53,7 +88,8 @@ async def _(event: PrivateMessageEvent, state: T_State, match: dict = RegexDict( for plugin in match['plugin'].strip().split(' '): if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']: state['plugin'].append(plugin) - elif module_name := list(filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())): + elif module_name := list( + filter(lambda x: PluginManager.plugins[x].name == plugin, PluginManager.plugins.keys())): state['plugin'].append(module_name[0]) else: state['plugin_no_exist'].append(plugin) @@ -75,31 +111,42 @@ async def _(state: T_State): if 'all' in state['plugin']: await PluginPermission.filter(session_id=group_id, session_type='group').update(status=state['bool']) else: - await asyncio.gather(*[PluginPermission.filter(name=plugin, session_id=group_id, session_type='group').update(status=state['bool']) for plugin in state['plugin']]) - logger.info('插件管理器', f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}的插件{" ".join(state["plugin"])}使用权限') - await manage_cmd.finish(f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') + await asyncio.gather(*[ + PluginPermission.filter(name=plugin, session_id=group_id, session_type='group').update( + status=state['bool']) for plugin in state['plugin']]) + logger.info('插件管理器', + f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}的插件{" ".join(state["plugin"])}使用权限') + await manage_cmd.finish( + f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') elif state['user'] and not state['group']: for user_id in state['user']: if 'all' in state['plugin']: await PluginPermission.filter(session_id=user_id, session_type='user').update(status=state['bool']) else: - await asyncio.gather(*[PluginPermission.filter(name=plugin, session_id=user_id, session_type='user').update(status=state['bool']) for plugin in state['plugin']]) + await asyncio.gather(*[ + PluginPermission.filter(name=plugin, session_id=user_id, session_type='user').update( + status=state['bool']) for plugin in state['plugin']]) logger.info('插件管理器', f'已{"启用" if state["bool"] else "禁用"}用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限') - await manage_cmd.finish(f'已{"启用" if state["bool"] else "禁用"}用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') + await manage_cmd.finish( + f'已{"启用" if state["bool"] else "禁用"}用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') else: for group_id in state['group']: if 'all' in state['plugin']: plugin_list = await PluginPermission.filter(session_id=group_id, session_type='group').all() else: - plugin_list = list(await asyncio.gather(*[PluginPermission.get_or_none(name=p, session_id=group_id, session_type='group') for p in state['plugin']])) + plugin_list = list(await asyncio.gather( + *[PluginPermission.get_or_none(name=p, session_id=group_id, session_type='group') for p in + state['plugin']])) for plugin in plugin_list: if plugin is not None: - plugin.ban = list(set(plugin.ban) - set(state['user'])) if state['bool'] else list(set(plugin.ban) | set(state['user'])) + plugin.ban = list(set(plugin.ban) - set(state['user'])) if state['bool'] else list( + set(plugin.ban) | set(state['user'])) await plugin.save() logger.info('插件管理器', f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}中用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限') - await manage_cmd.finish(f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}中用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') + await manage_cmd.finish( + f'已{"启用" if state["bool"] else "禁用"}群{" ".join(map(str, state["group"]))}中用户{" ".join(map(str, state["user"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') @help_cmd.handle() @@ -107,7 +154,9 @@ async def _(event: MessageEvent, session_id: int = CommandObjectID()): if session_id in cache_help: await help_cmd.finish(cache_help[session_id]) else: - plugin_list = await PluginManager.get_plugin_list(event.message_type, event.user_id if isinstance(event, PrivateMessageEvent) else event.group_id if isinstance(event, GroupMessageEvent) else event.guild_id) + plugin_list = await PluginManager.get_plugin_list(event.message_type, event.user_id if isinstance(event, + PrivateMessageEvent) else event.group_id if isinstance( + event, GroupMessageEvent) else event.guild_id) img = await draw_help(plugin_list) cache_help[session_id] = img await help_cmd.finish(img) @@ -121,4 +170,3 @@ async def _(event: MessageEvent, msg: Message = CommandArg()): else: result = ConfigManager.set_config(msg[0], msg[1]) await set_config_cmd.finish(result) - diff --git a/LittlePaimon/plugins/plugin_manager/draw_help.py b/LittlePaimon/plugins/plugin_manager/draw_help.py index d017b87..a9787d9 100644 --- a/LittlePaimon/plugins/plugin_manager/draw_help.py +++ b/LittlePaimon/plugins/plugin_manager/draw_help.py @@ -2,11 +2,11 @@ import math from typing import List from LittlePaimon import __version__ -from LittlePaimon.config import RESOURCE_BASE_PATH -from LittlePaimon.utils.image import PMImage, font_manager as fm -from LittlePaimon.utils.files import load_image -from LittlePaimon.utils.message import MessageBuild from LittlePaimon.config import PluginInfo +from LittlePaimon.utils.files import load_image +from LittlePaimon.utils.image import PMImage, font_manager as fm +from LittlePaimon.utils.message import MessageBuild +from LittlePaimon.utils.path import RESOURCE_BASE_PATH async def draw_plugin_card(plugin: PluginInfo): diff --git a/LittlePaimon/plugins/tools/__init__.py b/LittlePaimon/plugins/tools/__init__.py index 52cf746..d4f7e5e 100644 --- a/LittlePaimon/plugins/tools/__init__.py +++ b/LittlePaimon/plugins/tools/__init__.py @@ -1,8 +1,9 @@ from nonebot import on_command -from nonebot.params import CommandArg -from nonebot.rule import Rule from nonebot.adapters.onebot.v11 import Message, MessageEvent, MessageSegment +from nonebot.params import CommandArg from nonebot.plugin import PluginMetadata +from nonebot.rule import Rule + from LittlePaimon import SUPERUSERS from LittlePaimon.config import config from LittlePaimon.utils.brower import screenshot diff --git a/LittlePaimon/utils/__init__.py b/LittlePaimon/utils/__init__.py index 9824bc7..b293228 100644 --- a/LittlePaimon/utils/__init__.py +++ b/LittlePaimon/utils/__init__.py @@ -1,4 +1,2 @@ -from .files import * -from .requests import aiorequests from .logger import logger from .scheduler import scheduler diff --git a/LittlePaimon/utils/alias.py b/LittlePaimon/utils/alias.py index 0396619..54dbac8 100644 --- a/LittlePaimon/utils/alias.py +++ b/LittlePaimon/utils/alias.py @@ -2,7 +2,7 @@ import difflib from typing import Union, Literal, List, Optional from .files import load_json -from LittlePaimon.config import JSON_DATA +from .path import JSON_DATA alias_file = load_json(JSON_DATA / 'alias.json') info_file = load_json(JSON_DATA / 'genshin_info.json') diff --git a/LittlePaimon/utils/api.py b/LittlePaimon/utils/api.py index acaf447..d63abd8 100644 --- a/LittlePaimon/utils/api.py +++ b/LittlePaimon/utils/api.py @@ -1,16 +1,16 @@ import hashlib +import json import random import re import string import time -import json from typing import Optional, Literal, Union, Tuple -from LittlePaimon.utils import logger from nonebot import logger as nb_logger from tortoise.queryset import Q from LittlePaimon.database import PublicCookie, PrivateCookie, CookieCache +from LittlePaimon.utils import logger from .requests import aiorequests # MIHOYO_API = 'https://api-takumi-record.mihoyo.com/' diff --git a/LittlePaimon/utils/brower.py b/LittlePaimon/utils/brower.py index 39b1935..785cbfe 100644 --- a/LittlePaimon/utils/brower.py +++ b/LittlePaimon/utils/brower.py @@ -1,7 +1,8 @@ -from typing import Optional, Literal, Tuple, Union, List, AsyncGenerator, AsyncIterator -from playwright.async_api import Page, Browser, Playwright, async_playwright, Error from contextlib import asynccontextmanager from contextlib import suppress +from typing import Optional, Literal, Tuple, Union, List, AsyncGenerator, AsyncIterator + +from playwright.async_api import Page, Browser, Playwright, async_playwright, Error from LittlePaimon import DRIVER from LittlePaimon.utils import logger diff --git a/LittlePaimon/utils/files.py b/LittlePaimon/utils/files.py index cbfdf7f..9d03dd3 100644 --- a/LittlePaimon/utils/files.py +++ b/LittlePaimon/utils/files.py @@ -2,16 +2,25 @@ try: import ujson as json except ImportError: import json +import hashlib from pathlib import Path -from typing import Union, Optional, Tuple, Dict from ssl import SSLCertVerificationError +from typing import Union, Optional, Tuple, Dict import httpx -from PIL import Image -from .requests import aiorequests import tqdm.asyncio +from PIL import Image from ruamel import yaml +from LittlePaimon.utils.path import RESOURCE_BASE_PATH +from .requests import aiorequests + +# 删除从安柏计划下载的问号图标 +if (temp_path := RESOURCE_BASE_PATH / 'avatar' / 'UI_AvatarIcon_Wanderer.png').exists() and hashlib.md5(temp_path.read_bytes()).hexdigest() == 'a8827dfecb36640e59b319d1dd6190f4': + temp_path.unlink() +if (temp_path := RESOURCE_BASE_PATH / 'avatar' / 'UI_AvatarIcon_Faruzan.png').exists() and hashlib.md5(temp_path.read_bytes()).hexdigest() == 'a8827dfecb36640e59b319d1dd6190f4': + temp_path.unlink() + cache_image: Dict[str, any] = {} headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'} diff --git a/LittlePaimon/utils/filter.py b/LittlePaimon/utils/filter.py index 7ff033a..3ef033a 100644 --- a/LittlePaimon/utils/filter.py +++ b/LittlePaimon/utils/filter.py @@ -3,7 +3,7 @@ from typing import Union from nonebot.adapters.onebot.v11 import Message -from LittlePaimon.config import JSON_DATA +from .path import JSON_DATA class DFAFilter: diff --git a/LittlePaimon/utils/genshin.py b/LittlePaimon/utils/genshin.py index 0135459..93c7c0a 100644 --- a/LittlePaimon/utils/genshin.py +++ b/LittlePaimon/utils/genshin.py @@ -4,15 +4,16 @@ from typing import Optional, List, Union, Tuple import pytz -from LittlePaimon.config import JSON_DATA, config -from LittlePaimon.database import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo +from LittlePaimon.config import config from LittlePaimon.database import Artifact, CharacterProperty, Artifacts, Talents, Talent -from LittlePaimon.utils import logger -from LittlePaimon.utils.files import load_json -from LittlePaimon.utils.api import get_enka_data, get_mihoyo_public_data, get_mihoyo_private_data -from LittlePaimon.utils.typing import DataSourceType -from LittlePaimon.utils.alias import get_name_by_id -from LittlePaimon.utils.typing import CHARACTERS +from LittlePaimon.database import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo +from .alias import get_name_by_id +from .api import get_enka_data, get_mihoyo_public_data, get_mihoyo_private_data +from .files import load_json +from .logger import logger +from .path import JSON_DATA +from .typing import CHARACTERS +from .typing import DataSourceType ra_score = load_json(JSON_DATA / 'score.json') talent_map = load_json(JSON_DATA / 'role_skill.json') diff --git a/LittlePaimon/utils/image.py b/LittlePaimon/utils/image.py index bc92bce..82508c0 100644 --- a/LittlePaimon/utils/image.py +++ b/LittlePaimon/utils/image.py @@ -1,16 +1,14 @@ -import contextlib -import hashlib from io import BytesIO from pathlib import Path from typing import Tuple, Union, Literal, List import matplotlib.pyplot as plt from PIL import Image, ImageDraw, ImageFont, ImageOps - -from LittlePaimon.config import FONTS_PATH -from LittlePaimon.utils.requests import aiorequests from nonebot.utils import run_sync +from .path import FONTS_PATH +from .requests import aiorequests + plt.switch_backend('agg') diff --git a/LittlePaimon/utils/logger.py b/LittlePaimon/utils/logger.py index 870e6fb..4e287f9 100644 --- a/LittlePaimon/utils/logger.py +++ b/LittlePaimon/utils/logger.py @@ -1,6 +1,7 @@ -from nonebot import logger as nb_logger from typing import Dict +from nonebot import logger as nb_logger + class logger: """ diff --git a/LittlePaimon/utils/message.py b/LittlePaimon/utils/message.py index f2e7f88..9ef33bd 100644 --- a/LittlePaimon/utils/message.py +++ b/LittlePaimon/utils/message.py @@ -14,11 +14,12 @@ from nonebot.typing import T_State from LittlePaimon import NICKNAME from LittlePaimon.database import LastQuery, PrivateCookie, Player, PlayerAlias -from LittlePaimon.utils import aiorequests, load_image -from LittlePaimon.utils.alias import get_match_alias -from LittlePaimon.utils.image import PMImage -from LittlePaimon.utils.filter import filter_msg -from LittlePaimon.utils.typing import CHARACTERS, MALE_CHARACTERS, FEMALE_CHARACTERS, GIRL_CHARACTERS, BOY_CHARACTERS, \ +from .alias import get_match_alias +from .files import load_image +from .filter import filter_msg +from .image import PMImage +from .requests import aiorequests +from .typing import CHARACTERS, MALE_CHARACTERS, FEMALE_CHARACTERS, GIRL_CHARACTERS, BOY_CHARACTERS, \ LOLI_CHARACTERS @@ -97,9 +98,9 @@ class MessageBuild: def CommandPlayer(limit: int = 3, only_cn: bool = True) -> List[Player]: """ 获取查询操作中的user_id、uid和图片,并将过滤uid后的msg存放到T_State中 - :param limit: 限制个数 - :param only_cn: 是否只接受国服uid - :return: 查询对象列表 + :param limit: 限制个数 + :param only_cn: 是否只接受国服uid + :return: 查询对象列表 """ async def _player(event: MessageEvent, matcher: Matcher, state: T_State, msg: Message = CommandArg()) -> List[ diff --git a/LittlePaimon/utils/migration.py b/LittlePaimon/utils/migration.py index 4acf6b1..675e239 100644 --- a/LittlePaimon/utils/migration.py +++ b/LittlePaimon/utils/migration.py @@ -1,8 +1,9 @@ +import datetime import sqlite3 from pathlib import Path -import datetime -from LittlePaimon.utils import logger + from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery, DailyNoteSub, MihoyoBBSSub +from .logger import logger async def migrate_database(): diff --git a/LittlePaimon/config/path.py b/LittlePaimon/utils/path.py similarity index 97% rename from LittlePaimon/config/path.py rename to LittlePaimon/utils/path.py index c832c7d..d62f30f 100644 --- a/LittlePaimon/config/path.py +++ b/LittlePaimon/utils/path.py @@ -41,7 +41,7 @@ GACHA_LOG.mkdir(parents=True, exist_ok=True) FONTS_PATH = Path() / 'resources' / 'fonts' FONTS_PATH.mkdir(parents=True, exist_ok=True) # JSON数据路径 -JSON_DATA = Path(__file__).parent / 'data' +JSON_DATA = Path(__file__).parent.parent / 'config' / 'data' # 插件管理器文件存放目录 PLUGIN_CONFIG = Path() / 'config' / 'plugins' PLUGIN_CONFIG.mkdir(parents=True, exist_ok=True) diff --git a/LittlePaimon/utils/requests.py b/LittlePaimon/utils/requests.py index a84c676..867b548 100644 --- a/LittlePaimon/utils/requests.py +++ b/LittlePaimon/utils/requests.py @@ -5,8 +5,8 @@ from ssl import SSLCertVerificationError from typing import Dict, Optional, Any, Union, Tuple import httpx -from PIL import Image import tqdm.asyncio +from PIL import Image from nonebot import logger @@ -97,6 +97,9 @@ class aiorequests: params=params, timeout=timeout, **kwargs) + # 不保存安柏计划的问号图标 + if resp.headers.get('etag') == 'W/"6363798a-13c7"': + save_path = False resp = resp.read() if b'NoSuchKey' in resp or b'character not exists' in resp: return 'No Such File' @@ -108,6 +111,8 @@ class aiorequests: params=params, timeout=timeout, **kwargs) + if resp.headers.get('etag') == 'W/"6363798a-13c7"': + save_path = False resp = resp.read() if b'error' in resp: return 'No Such File' diff --git a/LittlePaimon/utils/scheduler.py b/LittlePaimon/utils/scheduler.py index 4effaa5..9af253e 100644 --- a/LittlePaimon/utils/scheduler.py +++ b/LittlePaimon/utils/scheduler.py @@ -1,9 +1,8 @@ import logging +from apscheduler.schedulers.asyncio import AsyncIOScheduler from nonebot import get_driver from nonebot.log import LoguruHandler, logger -from apscheduler.schedulers.asyncio import AsyncIOScheduler - from pydantic import Field, BaseSettings diff --git a/LittlePaimon/utils/status.py b/LittlePaimon/utils/status.py index bebcf3e..1d0db78 100644 --- a/LittlePaimon/utils/status.py +++ b/LittlePaimon/utils/status.py @@ -1,5 +1,6 @@ import asyncio import datetime + import psutil from nonebot import get_bot diff --git a/LittlePaimon/utils/tool.py b/LittlePaimon/utils/tool.py index 8a10e40..f2ac657 100644 --- a/LittlePaimon/utils/tool.py +++ b/LittlePaimon/utils/tool.py @@ -7,7 +7,8 @@ import time from collections import defaultdict from pathlib import Path -from LittlePaimon.utils import aiorequests, logger +from .logger import logger +from .requests import aiorequests RESOURCE_BASE_PATH = Path() / 'resources' / 'LittlePaimon' diff --git a/LittlePaimon/utils/typing.py b/LittlePaimon/utils/typing.py index f576a94..4454461 100644 --- a/LittlePaimon/utils/typing.py +++ b/LittlePaimon/utils/typing.py @@ -1,5 +1,7 @@ from typing import Literal, List + from pydantic import BaseModel, parse_raw_as + try: import ujson as json except ImportError: diff --git a/LittlePaimon/utils/update.py b/LittlePaimon/utils/update.py index 7fde8bc..8b58dea 100644 --- a/LittlePaimon/utils/update.py +++ b/LittlePaimon/utils/update.py @@ -1,10 +1,12 @@ import datetime from pathlib import Path + import git -from nonebot.utils import run_sync from git.exc import GitCommandError, InvalidGitRepositoryError +from nonebot.utils import run_sync + from LittlePaimon import __version__, NICKNAME -from LittlePaimon.utils import aiorequests +from .requests import aiorequests async def check_update(): diff --git a/LittlePaimon/web/__init__.py b/LittlePaimon/web/__init__.py index 2a1b931..fc7fcd3 100644 --- a/LittlePaimon/web/__init__.py +++ b/LittlePaimon/web/__init__.py @@ -1,11 +1,12 @@ import nonebot from fastapi import FastAPI from fastapi.responses import HTMLResponse + from LittlePaimon import DRIVER -from LittlePaimon.utils import logger from LittlePaimon.config import config -from .pages import admin_app, login_page, bind_cookie_page, blank_page +from LittlePaimon.utils import logger from .api import BaseApiRouter +from .pages import admin_app, login_page, bind_cookie_page, blank_page app: FastAPI = nonebot.get_app() app.include_router(BaseApiRouter) diff --git a/LittlePaimon/web/api/__init__.py b/LittlePaimon/web/api/__init__.py index e311b81..a263230 100644 --- a/LittlePaimon/web/api/__init__.py +++ b/LittlePaimon/web/api/__init__.py @@ -1,10 +1,12 @@ from fastapi import APIRouter -from .cookie import route as cookie_route -from .plugin import route as plugin_route + from .bot_info import route as bot_info_route -from .status import route as status_route +from .cookie import route as cookie_route from .login import route as login_route +from .plugin import route as plugin_route +from .status import route as status_route from .utils import authentication + # from .learning_chat import route as chat_route BaseApiRouter = APIRouter(prefix='/LittlePaimon/api') diff --git a/LittlePaimon/web/api/bot_info.py b/LittlePaimon/web/api/bot_info.py index f671add..21f7a80 100644 --- a/LittlePaimon/web/api/bot_info.py +++ b/LittlePaimon/web/api/bot_info.py @@ -4,14 +4,15 @@ import os import sys from pathlib import Path -from fastapi.responses import JSONResponse from fastapi import APIRouter +from fastapi.responses import JSONResponse from nonebot import get_bot from nonebot.adapters.onebot.v11 import Bot + from LittlePaimon import SUPERUSERS -from LittlePaimon.utils.update import update from LittlePaimon.utils.files import save_json from LittlePaimon.utils.tool import cache +from LittlePaimon.utils.update import update from .utils import authentication route = APIRouter() diff --git a/LittlePaimon/web/api/cookie.py b/LittlePaimon/web/api/cookie.py index e8f7fc2..364355b 100644 --- a/LittlePaimon/web/api/cookie.py +++ b/LittlePaimon/web/api/cookie.py @@ -1,10 +1,11 @@ import datetime from typing import Optional -from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery -from fastapi.responses import JSONResponse + from fastapi import APIRouter +from fastapi.responses import JSONResponse from pydantic import BaseModel +from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery from LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie from .utils import authentication diff --git a/LittlePaimon/web/api/login.py b/LittlePaimon/web/api/login.py index c2803b8..7099e2c 100644 --- a/LittlePaimon/web/api/login.py +++ b/LittlePaimon/web/api/login.py @@ -1,6 +1,7 @@ from fastapi import APIRouter from fastapi.responses import JSONResponse from pydantic import BaseModel + from LittlePaimon import SUPERUSERS from LittlePaimon.config import config from .utils import create_token diff --git a/LittlePaimon/web/api/plugin.py b/LittlePaimon/web/api/plugin.py index c2ab6e7..c52950e 100644 --- a/LittlePaimon/web/api/plugin.py +++ b/LittlePaimon/web/api/plugin.py @@ -1,11 +1,12 @@ import datetime from pathlib import Path -from fastapi.responses import JSONResponse from fastapi import APIRouter +from fastapi.responses import JSONResponse from LittlePaimon.config import ConfigManager, ConfigModel, PluginManager, PluginInfo from LittlePaimon.database import PluginPermission + try: from LittlePaimon.plugins.plugin_manager import cache_help except Exception: diff --git a/LittlePaimon/web/api/status.py b/LittlePaimon/web/api/status.py index 6ffce4e..f1cd186 100644 --- a/LittlePaimon/web/api/status.py +++ b/LittlePaimon/web/api/status.py @@ -1,13 +1,10 @@ -import asyncio - # from nonebot import logger # from nonebot.log import default_filter, default_format # from LittlePaimon import DRIVER -from LittlePaimon.utils.status import get_status - -from fastapi.responses import JSONResponse from fastapi import APIRouter +from fastapi.responses import JSONResponse +from LittlePaimon.utils.status import get_status from .utils import authentication show_logs = [] diff --git a/LittlePaimon/web/api/utils.py b/LittlePaimon/web/api/utils.py index 312580d..dc2cc7e 100644 --- a/LittlePaimon/web/api/utils.py +++ b/LittlePaimon/web/api/utils.py @@ -3,6 +3,7 @@ from typing import Optional from fastapi import Header, HTTPException, Depends from jose import jwt + from LittlePaimon import SUPERUSERS from LittlePaimon.config import config diff --git a/LittlePaimon/web/pages/__init__.py b/LittlePaimon/web/pages/__init__.py index 99121ed..eb4fc0e 100644 --- a/LittlePaimon/web/pages/__init__.py +++ b/LittlePaimon/web/pages/__init__.py @@ -1,3 +1,3 @@ -from .main import admin_app, blank_page -from .login import login_page from .bind_cookie import bind_cookie_page +from .login import login_page +from .main import admin_app, blank_page diff --git a/LittlePaimon/web/pages/bind_cookie.py b/LittlePaimon/web/pages/bind_cookie.py index f7501bd..e6d9a32 100644 --- a/LittlePaimon/web/pages/bind_cookie.py +++ b/LittlePaimon/web/pages/bind_cookie.py @@ -1,6 +1,5 @@ -from amis import AmisAPI, Collapse, Form, InputNumber, Textarea, Action, LevelEnum, Divider, Page, Html, Remark from LittlePaimon import __version__ - +from amis import AmisAPI, Collapse, Form, InputNumber, Textarea, Action, LevelEnum, Divider, Page, Html collapse_text = "

重要提醒:

Cookie的作用相当于账号密码,非常重要,如是非可信任的机器人,请勿绑定!!

获取方法:

详见Cookie获取教程" api = AmisAPI(method='post', url='/LittlePaimon/api/bind_cookie') diff --git a/LittlePaimon/web/pages/config_manage.py b/LittlePaimon/web/pages/config_manage.py index ca0ac8a..a19a8dc 100644 --- a/LittlePaimon/web/pages/config_manage.py +++ b/LittlePaimon/web/pages/config_manage.py @@ -1,4 +1,5 @@ -from amis import Action, Divider, Form, InputText, LevelEnum, Page, PageSchema, Switch, Remark, InputNumber, InputTime, InputTimeRange, Alert, Editor, Tabs, TabsModeEnum, Select +from amis import Action, Divider, Form, InputText, LevelEnum, Page, PageSchema, Switch, Remark, InputNumber, InputTime, InputTimeRange, Alert, Editor, \ + Select action_button = [Action(label='保存', level=LevelEnum.success, type='submit'), Action(label='重置', level=LevelEnum.warning, type='reset')] diff --git a/LittlePaimon/web/pages/home_page.py b/LittlePaimon/web/pages/home_page.py index 9ca2fe9..be3a68c 100644 --- a/LittlePaimon/web/pages/home_page.py +++ b/LittlePaimon/web/pages/home_page.py @@ -1,5 +1,5 @@ -from amis import Page, PageSchema, Html, Property, Service, Flex, ActionType, LevelEnum, Divider from LittlePaimon import __version__ +from amis import Page, PageSchema, Html, Property, Service, Flex, ActionType, LevelEnum, Divider logo = Html(html=f'''

diff --git a/LittlePaimon/web/pages/main.py b/LittlePaimon/web/pages/main.py index a545c0b..5333cd3 100644 --- a/LittlePaimon/web/pages/main.py +++ b/LittlePaimon/web/pages/main.py @@ -1,10 +1,10 @@ from LittlePaimon import __version__ -from amis import App, PageSchema, Tpl, Page, DropDownButton, ActionType, LevelEnum, Flex -from .public_cookie import page as public_cookie_page -from .private_cookie import page as private_cookie_page -from .plugin_manage import page as plugin_manage_page -from .home_page import page as home_page +from amis import App, PageSchema, Tpl, Page, Flex from .config_manage import page as config_page +from .home_page import page as home_page +from .plugin_manage import page as plugin_manage_page +from .private_cookie import page as private_cookie_page +from .public_cookie import page as public_cookie_page # from .learning_chat_manage import page as learning_chat_page