🐛 修复今日材料报错,优化import

This commit is contained in:
CMHopeSunshine 2022-11-05 17:57:21 +08:00
parent b9e6b07eda
commit b0c2576ffd
76 changed files with 295 additions and 209 deletions

View File

@ -2,7 +2,7 @@ from pathlib import Path
from nonebot import load_plugins, get_driver, logger, load_plugin from nonebot import load_plugins, get_driver, logger, load_plugin
from typing import List from typing import List
# from LittlePaimon.utils.migration import migrate_database from LittlePaimon import database
from LittlePaimon.utils.tool import check_resource from LittlePaimon.utils.tool import check_resource
DRIVER = get_driver() DRIVER = get_driver()
@ -10,13 +10,13 @@ __version__ = '3.0.0rc2'
try: try:
SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers] SUPERUSERS: List[int] = [int(s) for s in DRIVER.config.superusers]
except KeyError: except Exception:
SUPERUSERS = [] SUPERUSERS = []
logger.warning('请在.env.prod文件中中配置超级用户SUPERUSERS') logger.warning('请在.env.prod文件中中配置超级用户SUPERUSERS')
try: try:
NICKNAME: str = list(DRIVER.config.nickname)[0] NICKNAME: str = list(DRIVER.config.nickname)[0]
except KeyError: except Exception:
NICKNAME = '派蒙' NICKNAME = '派蒙'
logo = """<g> logo = """<g>
@ -30,18 +30,13 @@ logo = """<g>
@DRIVER.on_startup @DRIVER.on_startup
async def startup(): async def startup():
from LittlePaimon.database import connect
logger.opt(colors=True).info(logo) logger.opt(colors=True).info(logo)
await connect() await database.connect()
from LittlePaimon import web from LittlePaimon import web
# await migrate_database()
await check_resource() await check_resource()
@DRIVER.on_shutdown DRIVER.on_shutdown(database.disconnect)
async def shutdown():
from LittlePaimon.database import disconnect
await disconnect()
load_plugins(str(Path(__file__).parent / 'plugins')) load_plugins(str(Path(__file__).parent / 'plugins'))

View File

@ -1,4 +1,3 @@
from .path import *
from .config.manage import ConfigManager, ConfigModel from .config.manage import ConfigManager, ConfigModel
from .plugin.manage import PluginManager, HIDDEN_PLUGINS, MatcherInfo, PluginInfo from .plugin.manage import PluginManager, HIDDEN_PLUGINS, MatcherInfo, PluginInfo

View File

@ -1,5 +1,5 @@
from LittlePaimon.utils.files import load_yaml, save_yaml 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 from .model import ConfigModel

View File

@ -10,7 +10,7 @@ from nonebot.message import run_preprocessor
from nonebot.adapters.onebot.v11 import MessageEvent, PrivateMessageEvent, GroupMessageEvent from nonebot.adapters.onebot.v11 import MessageEvent, PrivateMessageEvent, GroupMessageEvent
from LittlePaimon import DRIVER, SUPERUSERS from LittlePaimon import DRIVER, SUPERUSERS
from LittlePaimon.utils import logger 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.utils.files import load_yaml, save_yaml
from LittlePaimon.database.models import PluginPermission, PluginStatistics from LittlePaimon.database.models import PluginPermission, PluginStatistics
from .model import MatcherInfo, PluginInfo from .model import MatcherInfo, PluginInfo

View File

@ -4,7 +4,7 @@ from pathlib import Path
from tortoise import Tortoise from tortoise import Tortoise
from nonebot.log import logger from nonebot.log import logger
from LittlePaimon.utils import scheduler 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 LEARNING_CHAT_DB_PATH, YSC_TEMP_IMG_PATH
from .models import * from .models import *

View File

@ -5,7 +5,7 @@ from typing import Optional, Dict, Iterator
from tortoise import fields from tortoise import fields
from tortoise.models import Model 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.alias import get_name_by_id
from LittlePaimon.utils.files import load_json from LittlePaimon.utils.files import load_json
from LittlePaimon.utils.typing import * from LittlePaimon.utils.typing import *

View File

@ -6,7 +6,7 @@ from pathlib import Path
from typing import Optional from typing import Optional
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from LittlePaimon.utils import aiorequests from LittlePaimon.utils.requests import aiorequests
res = Path(__file__).parent / 'template' res = Path(__file__).parent / 'template'
# type 0 普通常驻任务深渊 1 新闻 2 蛋池 3 限时活动H5 # type 0 普通常驻任务深渊 1 新闻 2 蛋池 3 限时活动H5

View File

@ -2,16 +2,16 @@ import random
from typing import Union from typing import Union
from nonebot import on_command 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 import Message, MessageEvent, GroupMessageEvent, PrivateMessageEvent
from nonebot.adapters.onebot.v11.exception import ActionFailed
from nonebot.params import CommandArg from nonebot.params import CommandArg
from nonebot.permission import SUPERUSER from nonebot.permission import SUPERUSER
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from LittlePaimon.config import config 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.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 .handler import GuessVoice, get_character_voice, get_rank, get_voice_list
from .resources import update_voice_resources from .resources import update_voice_resources

View File

@ -1,10 +1,11 @@
import asyncio import asyncio
from typing import List from typing import List
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.database import GenshinVoice from LittlePaimon.database import GenshinVoice
from LittlePaimon.utils.files import load_image 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.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): async def draw_table_line(img: PMImage, voice_id: int, voice_name: str, voice_content: str, i: int):

View File

@ -5,8 +5,8 @@ from typing import Dict, Optional
from lxml import etree from lxml import etree
from LittlePaimon.database import GenshinVoice from LittlePaimon.database import GenshinVoice
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils import logger from LittlePaimon.utils import logger
from LittlePaimon.utils.requests import aiorequests
async def get_character_list() -> Optional[Dict[str, int]]: async def get_character_list() -> Optional[Dict[str, int]]:

View File

@ -1,5 +1,5 @@
from typing import Dict, Union 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 from LittlePaimon.utils.files import load_yaml, save_yaml

View File

@ -1,15 +1,16 @@
import datetime import datetime
from typing import Dict, Any, Tuple
from collections import defaultdict from collections import defaultdict
from typing import Dict, Any, Tuple
import pytz import pytz
from nonebot import get_bot from nonebot import get_bot
from LittlePaimon.database import AbyssInfo from LittlePaimon.database import AbyssInfo
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils.files import load_image 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.image import PMImage, font_manager as fm, get_qq_avatar
from LittlePaimon.utils.message import MessageBuild 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)): async def get_user_avatar(user_id: str, size: Tuple[int, int] = (60, 60)):

View File

@ -1,11 +1,11 @@
import asyncio import asyncio
import datetime 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.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: def datetime_to_cn(time: datetime.datetime) -> str:

View File

@ -1,6 +1,7 @@
from typing import List, Tuple from typing import List, Tuple
from pydantic import parse_obj_as from pydantic import parse_obj_as
from LittlePaimon.utils.requests import aiorequests from LittlePaimon.utils.requests import aiorequests
from .models import TeamRateResult, TeamRate from .models import TeamRateResult, TeamRate

View File

@ -2,11 +2,11 @@ import asyncio
from typing import List from typing import List
from LittlePaimon.database import Character, LastQuery 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.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.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.path import RESOURCE_BASE_PATH
from .api import get_team_rate from .api import get_team_rate
from .models import TeamRate from .models import TeamRate

View File

@ -1,17 +1,17 @@
from typing import Union from typing import Union
from nonebot import on_command 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.adapters.onebot.v11 import GroupMessageEvent, PrivateMessageEvent
from nonebot.permission import SUPERUSER
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from nonebot.rule import to_me
from LittlePaimon.database import MihoyoBBSSub, PrivateCookie from LittlePaimon.database import MihoyoBBSSub, PrivateCookie
from LittlePaimon.utils import logger from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandUID, CommandSwitch from LittlePaimon.utils.message import CommandUID, CommandSwitch
from .coin_handle import mhy_bbs_coin, bbs_auto_coin 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 .draw import draw_result
from .sign_handle import mhy_bbs_sign, bbs_auto_sign
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(
name='米游社签到及获取', name='米游社签到及获取',

View File

@ -6,9 +6,11 @@ from collections import defaultdict
from typing import Tuple from typing import Tuple
from nonebot import get_bot from nonebot import get_bot
from LittlePaimon.config import config from LittlePaimon.config import config
from LittlePaimon.database import PrivateCookie, MihoyoBBSSub, LastQuery 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 from LittlePaimon.utils.api import random_text, random_hex, get_old_version_ds, get_ds
# 米游社的API列表 # 米游社的API列表

View File

@ -1,10 +1,11 @@
import math import math
from enum import IntEnum, auto
from collections import defaultdict from collections import defaultdict
from LittlePaimon.config import RESOURCE_BASE_PATH from enum import IntEnum, auto
from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.files import load_image from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.image import PMImage, font_manager as fm 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): class SignResult(IntEnum):

View File

@ -3,14 +3,17 @@ import datetime
import json import json
import random import random
import time import time
from nonebot import get_bot
from collections import defaultdict from collections import defaultdict
from typing import Tuple, Dict, Any, Optional, Union from typing import Tuple, Dict, Any, Optional, Union
from nonebot import get_bot
from LittlePaimon import DRIVER from LittlePaimon import DRIVER
from LittlePaimon.config import config from LittlePaimon.config import config
from LittlePaimon.database import MihoyoBBSSub, LastQuery, PrivateCookie 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.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 from .draw import SignResult, draw_result
SIGN_ACTION_API = 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign' SIGN_ACTION_API = 'https://api-takumi.mihoyo.com/event/bbs_sign_reward/sign'

View File

@ -11,7 +11,8 @@ from nonebot.typing import T_State
from LittlePaimon import NICKNAME from LittlePaimon import NICKNAME
from LittlePaimon.config import config 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 import logger
from LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie from LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie
from LittlePaimon.utils.message import recall_message from LittlePaimon.utils.message import recall_message

View File

@ -1,13 +1,13 @@
import re import re
import uuid import uuid
from nonebot import on_command from nonebot import on_command
from nonebot.params import CommandArg, ArgPlainText
from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent
from nonebot.params import CommandArg, ArgPlainText
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State from nonebot.typing import T_State
from LittlePaimon.database import CloudGenshinSub from LittlePaimon.database import CloudGenshinSub
from .handler import get_cloud_genshin_info from .handler import get_cloud_genshin_info
__plugin_meta__ = PluginMetadata( __plugin_meta__ = PluginMetadata(

View File

@ -1,4 +1,4 @@
from LittlePaimon.utils import aiorequests from LittlePaimon.utils.requests import aiorequests
host = 'https://api-cloudgame.mihoyo.com/' host = 'https://api-cloudgame.mihoyo.com/'

View File

@ -1,11 +1,11 @@
import datetime import datetime
import random import random
from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.utils.files import load_image
from LittlePaimon.utils import load_image
from LittlePaimon.utils.image import PMImage from LittlePaimon.utils.image import PMImage
from LittlePaimon.utils.image import font_manager as fm from LittlePaimon.utils.image import font_manager as fm
from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.path import RESOURCE_BASE_PATH
async def draw_daily_note_card(data, uid): async def draw_daily_note_card(data, uid):

View File

@ -6,8 +6,8 @@ import time
import pytz import pytz
from nonebot import get_bot from nonebot import get_bot
from nonebot.params import CommandArg, Depends
from nonebot.adapters.onebot.v11 import Message from nonebot.adapters.onebot.v11 import Message
from nonebot.params import CommandArg, Depends
from LittlePaimon.config import config from LittlePaimon.config import config
from LittlePaimon.database import DailyNoteSub, Player from LittlePaimon.database import DailyNoteSub, Player

View File

@ -4,9 +4,9 @@ from nonebot import on_command, on_regex
from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent from nonebot.adapters.onebot.v11 import MessageEvent, Message, GroupMessageEvent
from nonebot.params import RegexDict, CommandArg from nonebot.params import RegexDict, CommandArg
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from LittlePaimon.config import config from LittlePaimon.config import config
from LittlePaimon.utils.tool import freq_limiter from LittlePaimon.utils.tool import freq_limiter
from .data_handle import load_user_data from .data_handle import load_user_data
from .draw import draw_gacha_img from .draw import draw_gacha_img

View File

@ -1,5 +1,5 @@
from LittlePaimon.config.path import GACHA_SIM from LittlePaimon.utils.files import load_json, save_json
from LittlePaimon.utils import load_json, save_json from LittlePaimon.utils.path import GACHA_SIM
def load_user_data(user_id: int) -> dict: def load_user_data(user_id: int) -> dict:

View File

@ -3,9 +3,9 @@ from io import BytesIO
from PIL import Image, ImageDraw 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.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_handle import load_json
from .data_source import get_once_data, get_gacha_data from .data_source import get_once_data, get_gacha_data

View File

@ -1,4 +1,5 @@
from typing import Union from typing import Union
from nonebot import on_command from nonebot import on_command
from nonebot.adapters.onebot.v11 import Bot, MessageEvent, GroupMessageEvent, PrivateMessageEvent from nonebot.adapters.onebot.v11 import Bot, MessageEvent, GroupMessageEvent, PrivateMessageEvent
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata

View File

@ -1,20 +1,22 @@
import asyncio import asyncio
import time
from typing import Dict, Union, Tuple, Optional
from pathlib import Path
import datetime import datetime
import time
from pathlib import Path
from typing import Dict, Union, Tuple, Optional
from nonebot import on_notice from nonebot import on_notice
from nonebot.rule import Rule
from nonebot.adapters.onebot.v11 import GroupUploadNoticeEvent, NoticeEvent from nonebot.adapters.onebot.v11 import GroupUploadNoticeEvent, NoticeEvent
from nonebot.rule import Rule
from LittlePaimon import __version__ from LittlePaimon import __version__
from LittlePaimon.database import PlayerInfo 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.api import get_authkey_by_stoken
from LittlePaimon.utils import aiorequests, logger
from LittlePaimon.utils.files import load_json, save_json 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 .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' GACHA_LOG_API = 'https://hk4e-api.mihoyo.com/event/gacha_info/api/getGachaLog'
HEADERS: Dict[str, str] = { HEADERS: Dict[str, str] = {

View File

@ -4,10 +4,10 @@ import math
import random import random
from typing import Tuple, List, Optional from typing import Tuple, List, Optional
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.utils.files import load_image 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.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 from .models import GachaLogInfo, FiveStarItem, FourStarItem
avatar_point = [69, 156, 259, 358, 456, 558, 645, 746, 840, 945] avatar_point = [69, 156, 259, 358, 456, 558, 645, 746, 840, 945]

View File

@ -1,6 +1,8 @@
import datetime import datetime
from typing import List, Dict, Tuple, Optional from typing import List, Dict, Tuple, Optional
from pydantic import BaseModel from pydantic import BaseModel
from LittlePaimon.utils.alias import get_chara_icon, get_weapon_icon from LittlePaimon.utils.alias import get_chara_icon, get_weapon_icon
GACHA_TYPE_LIST = {'100': '新手祈愿', '200': '常驻祈愿', '302': '武器祈愿', '301': '角色祈愿', '400': '角色祈愿'} GACHA_TYPE_LIST = {'100': '新手祈愿', '200': '常驻祈愿', '302': '武器祈愿', '301': '角色祈愿', '400': '角色祈愿'}

View File

@ -8,8 +8,8 @@ from nonebot.typing import T_State
from LittlePaimon import NICKNAME from LittlePaimon import NICKNAME
from LittlePaimon.database import PlayerAlias from LittlePaimon.database import PlayerAlias
from LittlePaimon.config import YSC_TEMP_IMG_PATH
from LittlePaimon.utils import logger 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.message import CommandPlayer, CommandCharacter, CommandUID
from LittlePaimon.utils.genshin import GenshinInfoManager from LittlePaimon.utils.genshin import GenshinInfoManager
from LittlePaimon.utils.tool import freq_limiter from LittlePaimon.utils.tool import freq_limiter

View File

@ -1,7 +1,7 @@
import random import random
from typing import Tuple, Dict, Optional, List, Union 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.files import load_json
from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager from LittlePaimon.utils.image import PMImage, font_manager

View File

@ -3,13 +3,13 @@ import datetime
import math import math
from typing import List from typing import List
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.database import Character, PlayerInfo, Player 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.alias import get_chara_icon
from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.path import RESOURCE_BASE_PATH
from .draw_player_card import get_avatar, draw_weapon_icon from .draw_player_card import get_avatar, draw_weapon_icon
RESOURCES = RESOURCE_BASE_PATH / 'chara_bag' RESOURCES = RESOURCE_BASE_PATH / 'chara_bag'

View File

@ -1,12 +1,12 @@
import math import math
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.database import Character from LittlePaimon.database import Character
from LittlePaimon.utils import aiorequests
from LittlePaimon.utils.files import load_image from LittlePaimon.utils.files import load_image
from LittlePaimon.utils.genshin import GenshinTools from LittlePaimon.utils.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild 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' ICON = RESOURCE_BASE_PATH / 'icon'
ARTIFACT_ICON = RESOURCE_BASE_PATH / 'artifact' ARTIFACT_ICON = RESOURCE_BASE_PATH / 'artifact'

View File

@ -1,12 +1,12 @@
from nonebot import logger from nonebot import logger
from LittlePaimon.config.path import ENKA_RES, RESOURCE_BASE_PATH from LittlePaimon.database import Character
from LittlePaimon.utils 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.genshin import GenshinTools
from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.alias import get_chara_icon from LittlePaimon.utils.path import ENKA_RES, RESOURCE_BASE_PATH
from LittlePaimon.database import Character
from .damage_cal import get_role_dmg from .damage_cal import get_role_dmg
# weapon_url = 'https://upload-bbs.mihoyo.com/game_record/genshin/equip/{}.png' # weapon_url = 'https://upload-bbs.mihoyo.com/game_record/genshin/equip/{}.png'

View File

@ -1,12 +1,12 @@
import asyncio import asyncio
from typing import List, Tuple, Optional from typing import List, Tuple, Optional
from LittlePaimon.config import RESOURCE_BASE_PATH
from LittlePaimon.database import PlayerInfo, Character, PlayerWorldInfo, Weapon, Player 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.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.image import PMImage, get_qq_avatar, font_manager as fm
from LittlePaimon.utils.message import MessageBuild from LittlePaimon.utils.message import MessageBuild
from LittlePaimon.utils.path import RESOURCE_BASE_PATH
RESOURCES = RESOURCE_BASE_PATH / 'player_card' RESOURCES = RESOURCE_BASE_PATH / 'player_card'
ICON = RESOURCE_BASE_PATH / 'icon' ICON = RESOURCE_BASE_PATH / 'icon'

View File

@ -1,9 +1,9 @@
import random import random
from LittlePaimon.config.path import RESOURCE_BASE_PATH
from LittlePaimon.utils.files import load_image 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.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' RES = RESOURCE_BASE_PATH / 'monthinfo'

View File

@ -1,6 +1,6 @@
from LittlePaimon.database import Player from LittlePaimon.database import Player
from LittlePaimon.utils.api import get_mihoyo_private_data
from LittlePaimon.utils import logger from LittlePaimon.utils import logger
from LittlePaimon.utils.api import get_mihoyo_private_data
from .draw import draw_monthinfo_card from .draw import draw_monthinfo_card

View File

@ -1,23 +1,22 @@
import time import datetime
from nonebot import on_regex, on_command from nonebot import on_regex, on_command
from nonebot.adapters.onebot.v11 import MessageEvent, Message, MessageSegment, GroupMessageEvent 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.exception import ActionFailed
from nonebot.adapters.onebot.v11.helpers import HandleCancellation
from nonebot.params import RegexDict, ArgPlainText, CommandArg, Arg from nonebot.params import RegexDict, ArgPlainText, CommandArg, Arg
from nonebot.plugin import PluginMetadata
from nonebot.permission import SUPERUSER from nonebot.permission import SUPERUSER
from nonebot.plugin import PluginMetadata
from nonebot.typing import T_State from nonebot.typing import T_State
from LittlePaimon import NICKNAME 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.database import PlayerAlias
from LittlePaimon.config import RESOURCE_BASE_PATH from LittlePaimon.utils.alias import get_match_alias
from .draw_map import init_map, draw_map, get_full_map 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_daily_material import draw_material
from .draw_map import init_map, draw_map, get_full_map
__paimon_help__ = { __paimon_help__ = {
'type': '原神Wiki', 'type': '原神Wiki',
@ -44,12 +43,13 @@ __plugin_meta__ = PluginMetadata(
} }
) )
daily_material = on_regex(r'(?P<day>现在|(今|明|后)(天|日)|周(一|二|三|四|五|六|日))(天赋|角色|武器)?材料', priority=11, block=True, state={ daily_material = on_regex(r'^(?P<day>现在|(今|明|后)(天|日)|周(一|二|三|四|五|六|日))(天赋|角色|武器)?材料$',
priority=11, block=True, state={
'pm_name': '每日材料', 'pm_name': '每日材料',
'pm_description': '查看某日开放材料刷取的角色和武器', 'pm_description': '查看某日开放材料刷取的角色和武器',
'pm_usage': '<今天|周几>材料', 'pm_usage': '<今天|周几>材料',
'pm_priority': 8 'pm_priority': 8
}) })
material_map = on_command('材料图鉴', priority=11, block=True, state={ material_map = on_command('材料图鉴', priority=11, block=True, state={
'pm_name': '材料图鉴', 'pm_name': '材料图鉴',
'pm_description': '查看某个材料的介绍和采集点。', 'pm_description': '查看某个材料的介绍和采集点。',
@ -69,31 +69,27 @@ generate_map = on_command('生成地图', priority=1, block=True, permission=SUP
'pm_priority': 11 'pm_priority': 11
}) })
week_str = ['周一', '周二', '周三', '周四', '周五', '周六']
@daily_material.handle() @daily_material.handle()
async def _(event: MessageEvent, regex_dict: dict = RegexDict()): async def _(event: MessageEvent, regex_dict: dict = RegexDict()):
await daily_material.send('开始获取每日材料,请稍候...') if regex_dict['day'] in {'今日', '今天', '现在'}:
if regex_dict['day'] in ['今日', '今天', '现在']: day = datetime.datetime.now().weekday()
day = time.strftime("%w") elif regex_dict['day'] in {'明日', '明天'}:
elif regex_dict['day'] in ['明日', '明天']: day = (datetime.datetime.now() + datetime.timedelta(days=1)).weekday()
day = str(int(time.strftime("%w")) + 1) elif regex_dict['day'] in {'后日', '后天'}:
elif regex_dict['day'] in ['后日', '后天']: day = (datetime.datetime.now() + datetime.timedelta(days=2)).weekday()
day = str(int(time.strftime("%w")) + 2)
elif regex_dict['day'] == '周日': elif regex_dict['day'] == '周日':
await daily_material.finish('周日所有材料都可以刷哦!', at_sender=True) await daily_material.finish('周日所有材料都可以刷哦!', at_sender=True)
elif regex_dict['day'].startswith(''): elif regex_dict['day'].startswith(''):
await daily_material.send('开始获取每日材料,请稍候...')
await daily_material.finish(await draw_material(str(event.user_id), regex_dict['day'])) 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) await daily_material.finish('周日所有材料都可以刷哦!', at_sender=True)
else: else:
await daily_material.finish(await draw_material(str(event.user_id), { await daily_material.send('开始获取每日材料,请稍候...')
'1': '周一', await daily_material.finish(await draw_material(str(event.user_id), week_str[day]), at_sender=True)
'2': '周二',
'3': '周三',
'4': '周四',
'5': '周五',
'6': '周六',
}[day]), at_sender=True)
@material_map.handle() @material_map.handle()
@ -119,7 +115,8 @@ async def _(event: MessageEvent, state: T_State, map_: str = ArgPlainText('map')
state['map'] = Message(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')): 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(): 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) 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: if choice not in match_alias:
state['times'] = state['times'] + 1 if 'times' in state else 1 state['times'] = state['times'] + 1 if 'times' in state else 1
if state['times'] == 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: elif state['times'] == 2:
await maps.reject(f'别调戏{NICKNAME}啦,快选一个吧,不想问了请回答\"取消\"', at_sender=True) await maps.reject(f'别调戏{NICKNAME}啦,快选一个吧,不想问了请回答\"取消\"', at_sender=True)
elif state['times'] >= 3: 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: try:
await maps.finish(MessageSegment.image(state['img_url'].format(choice))) await maps.finish(MessageSegment.image(state['img_url'].format(choice)))
except ActionFailed: except ActionFailed:

View File

@ -1,11 +1,13 @@
import math import math
from pathlib import Path 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.files import save_json, load_json, load_image
from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild 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 = { week_cn = {
'monday': '周一', 'monday': '周一',

View File

@ -1,14 +1,16 @@
import math import math
from typing import List 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.files import load_image
from LittlePaimon.utils.image import PMImage, font_manager as fm from LittlePaimon.utils.image import PMImage, font_manager as fm
from LittlePaimon.utils.message import MessageBuild 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 .genshinmap import utils, models, request, img, XYPoint
from PIL import Image, ImageFile, ImageOps
ImageFile.LOAD_TRUNCATED_IMAGES = True ImageFile.LOAD_TRUNCATED_IMAGES = True
Image.MAX_IMAGE_PIXELS = None Image.MAX_IMAGE_PIXELS = None

View File

@ -1,21 +1,55 @@
import asyncio import asyncio
from nonebot import on_regex, on_command 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.params import RegexDict, CommandArg
from nonebot.permission import SUPERUSER 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 nonebot.typing import T_State
from LittlePaimon import SUPERUSERS from LittlePaimon import SUPERUSERS
from LittlePaimon.config import ConfigManager, PluginManager from LittlePaimon.config import ConfigManager, PluginManager
from LittlePaimon.database import PluginPermission
from LittlePaimon.utils import logger from LittlePaimon.utils import logger
from LittlePaimon.utils.message import CommandObjectID from LittlePaimon.utils.message import CommandObjectID
from LittlePaimon.database import PluginPermission
from .draw_help import draw_help from .draw_help import draw_help
manage_cmd = on_regex(r'^pm (?P<func>ban|unban) (?P<plugin>([\w ]*)|all|全部) ?(-g (?P<group>[\d ]*) ?)?(-u (?P<user>[\d ]*) ?)?(?P<reserve>-r)?', priority=1) __plugin_meta__ = PluginMetadata(
help_cmd = on_command('help', aliases={'帮助', '菜单', 'pm help'}, priority=1) name="插件管理",
set_config_cmd = on_command('pm set', priority=1, permission=SUPERUSER) description="对派蒙插件进行管理",
usage='...',
extra={
'author': '惜月',
'priority': 99,
}
)
def fullmatch(msg: Message = CommandArg()) -> bool:
return not bool(msg)
manage_cmd = on_regex(
r'^pm (?P<func>ban|unban) (?P<plugin>([\w ]*)|all|全部) ?(-g (?P<group>[\d ]*) ?)?(-u (?P<user>[\d ]*) ?)?(?P<reserve>-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 = {} cache_help = {}
@ -31,7 +65,8 @@ async def _(event: GroupMessageEvent, state: T_State, match: dict = RegexDict(),
for plugin in match['plugin'].strip().split(' '): for plugin in match['plugin'].strip().split(' '):
if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']: if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']:
state['plugin'].append(plugin) 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]) state['plugin'].append(module_name[0])
else: else:
state['plugin_no_exist'].append(plugin) 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(' '): for plugin in match['plugin'].strip().split(' '):
if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']: if plugin in PluginManager.plugins.keys() or plugin in ['all', '全部']:
state['plugin'].append(plugin) 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]) state['plugin'].append(module_name[0])
else: else:
state['plugin_no_exist'].append(plugin) state['plugin_no_exist'].append(plugin)
@ -75,31 +111,42 @@ async def _(state: T_State):
if 'all' in state['plugin']: if 'all' in state['plugin']:
await PluginPermission.filter(session_id=group_id, session_type='group').update(status=state['bool']) await PluginPermission.filter(session_id=group_id, session_type='group').update(status=state['bool'])
else: else:
await asyncio.gather(*[PluginPermission.filter(name=plugin, session_id=group_id, session_type='group').update(status=state['bool']) for plugin in state['plugin']]) await asyncio.gather(*[
logger.info('插件管理器', f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}群<m>{" ".join(map(str, state["group"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限') PluginPermission.filter(name=plugin, session_id=group_id, session_type='group').update(
await manage_cmd.finish(f'{"启用" if state["bool"] else "禁用"}{" ".join(map(str, state["group"]))}的插件{" ".join(state["plugin"])}使用权限{extra_msg}') status=state['bool']) for plugin in state['plugin']])
logger.info('插件管理器',
f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}群<m>{" ".join(map(str, state["group"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限')
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']: elif state['user'] and not state['group']:
for user_id in state['user']: for user_id in state['user']:
if 'all' in state['plugin']: if 'all' in state['plugin']:
await PluginPermission.filter(session_id=user_id, session_type='user').update(status=state['bool']) await PluginPermission.filter(session_id=user_id, session_type='user').update(status=state['bool'])
else: 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('插件管理器', logger.info('插件管理器',
f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}用户<m>{" ".join(map(str, state["user"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限') f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}用户<m>{" ".join(map(str, state["user"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限')
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: else:
for group_id in state['group']: for group_id in state['group']:
if 'all' in state['plugin']: if 'all' in state['plugin']:
plugin_list = await PluginPermission.filter(session_id=group_id, session_type='group').all() plugin_list = await PluginPermission.filter(session_id=group_id, session_type='group').all()
else: 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: for plugin in plugin_list:
if plugin is not None: 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() await plugin.save()
logger.info('插件管理器', logger.info('插件管理器',
f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}群<m>{" ".join(map(str, state["group"]))}</m>中用户<m>{" ".join(map(str, state["user"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限') f'{"<g>启用</g>" if state["bool"] else "<r>禁用</r>"}群<m>{" ".join(map(str, state["group"]))}</m>中用户<m>{" ".join(map(str, state["user"]))}</m>的插件<m>{" ".join(state["plugin"])}</m>使用权限')
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() @help_cmd.handle()
@ -107,7 +154,9 @@ async def _(event: MessageEvent, session_id: int = CommandObjectID()):
if session_id in cache_help: if session_id in cache_help:
await help_cmd.finish(cache_help[session_id]) await help_cmd.finish(cache_help[session_id])
else: 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) img = await draw_help(plugin_list)
cache_help[session_id] = img cache_help[session_id] = img
await help_cmd.finish(img) await help_cmd.finish(img)
@ -121,4 +170,3 @@ async def _(event: MessageEvent, msg: Message = CommandArg()):
else: else:
result = ConfigManager.set_config(msg[0], msg[1]) result = ConfigManager.set_config(msg[0], msg[1])
await set_config_cmd.finish(result) await set_config_cmd.finish(result)

View File

@ -2,11 +2,11 @@ import math
from typing import List from typing import List
from LittlePaimon import __version__ 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.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): async def draw_plugin_card(plugin: PluginInfo):

View File

@ -1,8 +1,9 @@
from nonebot import on_command 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.adapters.onebot.v11 import Message, MessageEvent, MessageSegment
from nonebot.params import CommandArg
from nonebot.plugin import PluginMetadata from nonebot.plugin import PluginMetadata
from nonebot.rule import Rule
from LittlePaimon import SUPERUSERS from LittlePaimon import SUPERUSERS
from LittlePaimon.config import config from LittlePaimon.config import config
from LittlePaimon.utils.brower import screenshot from LittlePaimon.utils.brower import screenshot

View File

@ -1,4 +1,2 @@
from .files import *
from .requests import aiorequests
from .logger import logger from .logger import logger
from .scheduler import scheduler from .scheduler import scheduler

View File

@ -2,7 +2,7 @@ import difflib
from typing import Union, Literal, List, Optional from typing import Union, Literal, List, Optional
from .files import load_json from .files import load_json
from LittlePaimon.config import JSON_DATA from .path import JSON_DATA
alias_file = load_json(JSON_DATA / 'alias.json') alias_file = load_json(JSON_DATA / 'alias.json')
info_file = load_json(JSON_DATA / 'genshin_info.json') info_file = load_json(JSON_DATA / 'genshin_info.json')

View File

@ -1,16 +1,16 @@
import hashlib import hashlib
import json
import random import random
import re import re
import string import string
import time import time
import json
from typing import Optional, Literal, Union, Tuple from typing import Optional, Literal, Union, Tuple
from LittlePaimon.utils import logger
from nonebot import logger as nb_logger from nonebot import logger as nb_logger
from tortoise.queryset import Q from tortoise.queryset import Q
from LittlePaimon.database import PublicCookie, PrivateCookie, CookieCache from LittlePaimon.database import PublicCookie, PrivateCookie, CookieCache
from LittlePaimon.utils import logger
from .requests import aiorequests from .requests import aiorequests
# MIHOYO_API = 'https://api-takumi-record.mihoyo.com/' # MIHOYO_API = 'https://api-takumi-record.mihoyo.com/'

View File

@ -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 asynccontextmanager
from contextlib import suppress 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 import DRIVER
from LittlePaimon.utils import logger from LittlePaimon.utils import logger

View File

@ -2,16 +2,25 @@ try:
import ujson as json import ujson as json
except ImportError: except ImportError:
import json import json
import hashlib
from pathlib import Path from pathlib import Path
from typing import Union, Optional, Tuple, Dict
from ssl import SSLCertVerificationError from ssl import SSLCertVerificationError
from typing import Union, Optional, Tuple, Dict
import httpx import httpx
from PIL import Image
from .requests import aiorequests
import tqdm.asyncio import tqdm.asyncio
from PIL import Image
from ruamel import yaml 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] = {} 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'} 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'}

View File

@ -3,7 +3,7 @@ from typing import Union
from nonebot.adapters.onebot.v11 import Message from nonebot.adapters.onebot.v11 import Message
from LittlePaimon.config import JSON_DATA from .path import JSON_DATA
class DFAFilter: class DFAFilter:

View File

@ -4,15 +4,16 @@ from typing import Optional, List, Union, Tuple
import pytz import pytz
from LittlePaimon.config import JSON_DATA, config from LittlePaimon.config import config
from LittlePaimon.database import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo
from LittlePaimon.database import Artifact, CharacterProperty, Artifacts, Talents, Talent from LittlePaimon.database import Artifact, CharacterProperty, Artifacts, Talents, Talent
from LittlePaimon.utils import logger from LittlePaimon.database import PlayerInfo, Character, LastQuery, PrivateCookie, AbyssInfo
from LittlePaimon.utils.files import load_json from .alias import get_name_by_id
from LittlePaimon.utils.api import get_enka_data, get_mihoyo_public_data, get_mihoyo_private_data from .api import get_enka_data, get_mihoyo_public_data, get_mihoyo_private_data
from LittlePaimon.utils.typing import DataSourceType from .files import load_json
from LittlePaimon.utils.alias import get_name_by_id from .logger import logger
from LittlePaimon.utils.typing import CHARACTERS from .path import JSON_DATA
from .typing import CHARACTERS
from .typing import DataSourceType
ra_score = load_json(JSON_DATA / 'score.json') ra_score = load_json(JSON_DATA / 'score.json')
talent_map = load_json(JSON_DATA / 'role_skill.json') talent_map = load_json(JSON_DATA / 'role_skill.json')

View File

@ -1,16 +1,14 @@
import contextlib
import hashlib
from io import BytesIO from io import BytesIO
from pathlib import Path from pathlib import Path
from typing import Tuple, Union, Literal, List from typing import Tuple, Union, Literal, List
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from PIL import Image, ImageDraw, ImageFont, ImageOps 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 nonebot.utils import run_sync
from .path import FONTS_PATH
from .requests import aiorequests
plt.switch_backend('agg') plt.switch_backend('agg')

View File

@ -1,6 +1,7 @@
from nonebot import logger as nb_logger
from typing import Dict from typing import Dict
from nonebot import logger as nb_logger
class logger: class logger:
""" """

View File

@ -14,11 +14,12 @@ from nonebot.typing import T_State
from LittlePaimon import NICKNAME from LittlePaimon import NICKNAME
from LittlePaimon.database import LastQuery, PrivateCookie, Player, PlayerAlias from LittlePaimon.database import LastQuery, PrivateCookie, Player, PlayerAlias
from LittlePaimon.utils import aiorequests, load_image from .alias import get_match_alias
from LittlePaimon.utils.alias import get_match_alias from .files import load_image
from LittlePaimon.utils.image import PMImage from .filter import filter_msg
from LittlePaimon.utils.filter import filter_msg from .image import PMImage
from LittlePaimon.utils.typing import CHARACTERS, MALE_CHARACTERS, FEMALE_CHARACTERS, GIRL_CHARACTERS, BOY_CHARACTERS, \ from .requests import aiorequests
from .typing import CHARACTERS, MALE_CHARACTERS, FEMALE_CHARACTERS, GIRL_CHARACTERS, BOY_CHARACTERS, \
LOLI_CHARACTERS LOLI_CHARACTERS

View File

@ -1,8 +1,9 @@
import datetime
import sqlite3 import sqlite3
from pathlib import Path from pathlib import Path
import datetime
from LittlePaimon.utils import logger
from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery, DailyNoteSub, MihoyoBBSSub from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery, DailyNoteSub, MihoyoBBSSub
from .logger import logger
async def migrate_database(): async def migrate_database():

View File

@ -41,7 +41,7 @@ GACHA_LOG.mkdir(parents=True, exist_ok=True)
FONTS_PATH = Path() / 'resources' / 'fonts' FONTS_PATH = Path() / 'resources' / 'fonts'
FONTS_PATH.mkdir(parents=True, exist_ok=True) FONTS_PATH.mkdir(parents=True, exist_ok=True)
# JSON数据路径 # JSON数据路径
JSON_DATA = Path(__file__).parent / 'data' JSON_DATA = Path(__file__).parent.parent / 'config' / 'data'
# 插件管理器文件存放目录 # 插件管理器文件存放目录
PLUGIN_CONFIG = Path() / 'config' / 'plugins' PLUGIN_CONFIG = Path() / 'config' / 'plugins'
PLUGIN_CONFIG.mkdir(parents=True, exist_ok=True) PLUGIN_CONFIG.mkdir(parents=True, exist_ok=True)

View File

@ -5,8 +5,8 @@ from ssl import SSLCertVerificationError
from typing import Dict, Optional, Any, Union, Tuple from typing import Dict, Optional, Any, Union, Tuple
import httpx import httpx
from PIL import Image
import tqdm.asyncio import tqdm.asyncio
from PIL import Image
from nonebot import logger from nonebot import logger
@ -97,6 +97,9 @@ class aiorequests:
params=params, params=params,
timeout=timeout, timeout=timeout,
**kwargs) **kwargs)
# 不保存安柏计划的问号图标
if resp.headers.get('etag') == 'W/"6363798a-13c7"':
save_path = False
resp = resp.read() resp = resp.read()
if b'NoSuchKey' in resp or b'character not exists' in resp: if b'NoSuchKey' in resp or b'character not exists' in resp:
return 'No Such File' return 'No Such File'
@ -108,6 +111,8 @@ class aiorequests:
params=params, params=params,
timeout=timeout, timeout=timeout,
**kwargs) **kwargs)
if resp.headers.get('etag') == 'W/"6363798a-13c7"':
save_path = False
resp = resp.read() resp = resp.read()
if b'error' in resp: if b'error' in resp:
return 'No Such File' return 'No Such File'

View File

@ -1,9 +1,8 @@
import logging import logging
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from nonebot import get_driver from nonebot import get_driver
from nonebot.log import LoguruHandler, logger from nonebot.log import LoguruHandler, logger
from apscheduler.schedulers.asyncio import AsyncIOScheduler
from pydantic import Field, BaseSettings from pydantic import Field, BaseSettings

View File

@ -1,5 +1,6 @@
import asyncio import asyncio
import datetime import datetime
import psutil import psutil
from nonebot import get_bot from nonebot import get_bot

View File

@ -7,7 +7,8 @@ import time
from collections import defaultdict from collections import defaultdict
from pathlib import Path from pathlib import Path
from LittlePaimon.utils import aiorequests, logger from .logger import logger
from .requests import aiorequests
RESOURCE_BASE_PATH = Path() / 'resources' / 'LittlePaimon' RESOURCE_BASE_PATH = Path() / 'resources' / 'LittlePaimon'

View File

@ -1,5 +1,7 @@
from typing import Literal, List from typing import Literal, List
from pydantic import BaseModel, parse_raw_as from pydantic import BaseModel, parse_raw_as
try: try:
import ujson as json import ujson as json
except ImportError: except ImportError:

View File

@ -1,10 +1,12 @@
import datetime import datetime
from pathlib import Path from pathlib import Path
import git import git
from nonebot.utils import run_sync
from git.exc import GitCommandError, InvalidGitRepositoryError from git.exc import GitCommandError, InvalidGitRepositoryError
from nonebot.utils import run_sync
from LittlePaimon import __version__, NICKNAME from LittlePaimon import __version__, NICKNAME
from LittlePaimon.utils import aiorequests from .requests import aiorequests
async def check_update(): async def check_update():

View File

@ -1,11 +1,12 @@
import nonebot import nonebot
from fastapi import FastAPI from fastapi import FastAPI
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
from LittlePaimon import DRIVER from LittlePaimon import DRIVER
from LittlePaimon.utils import logger
from LittlePaimon.config import config 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 .api import BaseApiRouter
from .pages import admin_app, login_page, bind_cookie_page, blank_page
app: FastAPI = nonebot.get_app() app: FastAPI = nonebot.get_app()
app.include_router(BaseApiRouter) app.include_router(BaseApiRouter)

View File

@ -1,10 +1,12 @@
from fastapi import APIRouter 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 .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 .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 .utils import authentication
# from .learning_chat import route as chat_route # from .learning_chat import route as chat_route
BaseApiRouter = APIRouter(prefix='/LittlePaimon/api') BaseApiRouter = APIRouter(prefix='/LittlePaimon/api')

View File

@ -4,14 +4,15 @@ import os
import sys import sys
from pathlib import Path from pathlib import Path
from fastapi.responses import JSONResponse
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse
from nonebot import get_bot from nonebot import get_bot
from nonebot.adapters.onebot.v11 import Bot from nonebot.adapters.onebot.v11 import Bot
from LittlePaimon import SUPERUSERS from LittlePaimon import SUPERUSERS
from LittlePaimon.utils.update import update
from LittlePaimon.utils.files import save_json from LittlePaimon.utils.files import save_json
from LittlePaimon.utils.tool import cache from LittlePaimon.utils.tool import cache
from LittlePaimon.utils.update import update
from .utils import authentication from .utils import authentication
route = APIRouter() route = APIRouter()

View File

@ -1,10 +1,11 @@
import datetime import datetime
from typing import Optional from typing import Optional
from LittlePaimon.database import PublicCookie, PrivateCookie, LastQuery
from fastapi.responses import JSONResponse
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse
from pydantic import BaseModel 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 LittlePaimon.utils.api import get_bind_game_info, get_stoken_by_cookie
from .utils import authentication from .utils import authentication

View File

@ -1,6 +1,7 @@
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse from fastapi.responses import JSONResponse
from pydantic import BaseModel from pydantic import BaseModel
from LittlePaimon import SUPERUSERS from LittlePaimon import SUPERUSERS
from LittlePaimon.config import config from LittlePaimon.config import config
from .utils import create_token from .utils import create_token

View File

@ -1,11 +1,12 @@
import datetime import datetime
from pathlib import Path from pathlib import Path
from fastapi.responses import JSONResponse
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse
from LittlePaimon.config import ConfigManager, ConfigModel, PluginManager, PluginInfo from LittlePaimon.config import ConfigManager, ConfigModel, PluginManager, PluginInfo
from LittlePaimon.database import PluginPermission from LittlePaimon.database import PluginPermission
try: try:
from LittlePaimon.plugins.plugin_manager import cache_help from LittlePaimon.plugins.plugin_manager import cache_help
except Exception: except Exception:

View File

@ -1,13 +1,10 @@
import asyncio
# from nonebot import logger # from nonebot import logger
# from nonebot.log import default_filter, default_format # from nonebot.log import default_filter, default_format
# from LittlePaimon import DRIVER # from LittlePaimon import DRIVER
from LittlePaimon.utils.status import get_status
from fastapi.responses import JSONResponse
from fastapi import APIRouter from fastapi import APIRouter
from fastapi.responses import JSONResponse
from LittlePaimon.utils.status import get_status
from .utils import authentication from .utils import authentication
show_logs = [] show_logs = []

View File

@ -3,6 +3,7 @@ from typing import Optional
from fastapi import Header, HTTPException, Depends from fastapi import Header, HTTPException, Depends
from jose import jwt from jose import jwt
from LittlePaimon import SUPERUSERS from LittlePaimon import SUPERUSERS
from LittlePaimon.config import config from LittlePaimon.config import config

View File

@ -1,3 +1,3 @@
from .main import admin_app, blank_page
from .login import login_page
from .bind_cookie import bind_cookie_page from .bind_cookie import bind_cookie_page
from .login import login_page
from .main import admin_app, blank_page

View File

@ -1,6 +1,5 @@
from amis import AmisAPI, Collapse, Form, InputNumber, Textarea, Action, LevelEnum, Divider, Page, Html, Remark
from LittlePaimon import __version__ from LittlePaimon import __version__
from amis import AmisAPI, Collapse, Form, InputNumber, Textarea, Action, LevelEnum, Divider, Page, Html
collapse_text = "<h2>重要提醒:</h2>Cookie的作用相当于账号密码非常重要如是非可信任的机器人请勿绑定<br><h2>获取方法:</h2>详见<a href='https://docs.qq.com/doc/DQ3JLWk1vQVllZ2Z1'>Cookie获取教程</a>" collapse_text = "<h2>重要提醒:</h2>Cookie的作用相当于账号密码非常重要如是非可信任的机器人请勿绑定<br><h2>获取方法:</h2>详见<a href='https://docs.qq.com/doc/DQ3JLWk1vQVllZ2Z1'>Cookie获取教程</a>"
api = AmisAPI(method='post', url='/LittlePaimon/api/bind_cookie') api = AmisAPI(method='post', url='/LittlePaimon/api/bind_cookie')

View File

@ -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_button = [Action(label='保存', level=LevelEnum.success, type='submit'),
Action(label='重置', level=LevelEnum.warning, type='reset')] Action(label='重置', level=LevelEnum.warning, type='reset')]

View File

@ -1,5 +1,5 @@
from amis import Page, PageSchema, Html, Property, Service, Flex, ActionType, LevelEnum, Divider
from LittlePaimon import __version__ from LittlePaimon import __version__
from amis import Page, PageSchema, Html, Property, Service, Flex, ActionType, LevelEnum, Divider
logo = Html(html=f''' logo = Html(html=f'''
<p align="center"> <p align="center">

View File

@ -1,10 +1,10 @@
from LittlePaimon import __version__ from LittlePaimon import __version__
from amis import App, PageSchema, Tpl, Page, DropDownButton, ActionType, LevelEnum, Flex from amis import App, PageSchema, Tpl, Page, 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 .config_manage import page as config_page 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 # from .learning_chat_manage import page as learning_chat_page