mirror of
https://github.com/xuthus83/LittlePaimon.git
synced 2024-12-16 13:40:53 +08:00
Merge branch 'CMHopeSunshine:Bot' into Bot
This commit is contained in:
commit
5cc8901dec
@ -9,15 +9,15 @@ assignees: ''
|
||||
|
||||
### 确认
|
||||
|
||||
- 我的Bot版本已更新到最新,且已尝试使用`poetry install`更新依赖库
|
||||
- 我的Bot版本已更新到最新,且已尝试使用`nb paimon install`更新依赖库
|
||||
- 我已查阅[文档-常见问题](https://docs.paimon.cherishmoon.fun/question.html),无相关解决方案
|
||||
- 我已确认[issue](https://github.com/CMHopeSunshine/LittlePaimon/issues)中没有类似的问题或仍然得不到解决
|
||||
|
||||
### 环境信息
|
||||
|
||||
- 系统版本: Windows10
|
||||
- Python版本: 3.9.10
|
||||
- Nonebot2版本: 2.0.0rc2
|
||||
- 系统版本: Windows10(example)
|
||||
- Python版本: 3.9.10(example)
|
||||
- Nonebot2版本: 2.0.0rc4(example)
|
||||
|
||||
### 问题描述
|
||||
|
||||
|
@ -18,16 +18,24 @@ class ConfigManager:
|
||||
:param value: 新配置值
|
||||
"""
|
||||
if config_name not in cls.config.dict(by_alias=True).keys():
|
||||
return f'没有配置项为{config_name}'
|
||||
if '启用' in config_name or '开关' in config_name or config_name in {'自动接受好友请求', '自动接受群邀请'}:
|
||||
if value not in ['开', '关', 'true', 'false', 'on', 'off']:
|
||||
return '参数错误'
|
||||
value = value in ['开', 'true', 'on']
|
||||
elif config_name != 'CookieWeb地址' and not value.isdigit():
|
||||
return '配置项不合法,必须为数字'
|
||||
cls.config.update(config_name=value)
|
||||
return f"没有配置项为{config_name}"
|
||||
if (
|
||||
"启用" in config_name
|
||||
or "开关" in config_name
|
||||
or config_name in {"自动接受好友请求", "自动接受群邀请", "绑定二维码以链接形式发送"}
|
||||
):
|
||||
if value not in ["开", "关", "true", "false", "on", "off"]:
|
||||
return "参数错误"
|
||||
value = value in ["开", "true", "on"]
|
||||
elif config_name == "重启时修改群名片群列表":
|
||||
return "该配置项暂时不支持此方法修改,请在后台管理页面进行更改"
|
||||
elif config_name not in ["CookieWeb地址", "Web端管理员密码", "Web端token密钥", "github资源地址"]:
|
||||
if not value.isdigit():
|
||||
return "配置项不合法,必须为数字"
|
||||
value = int(value)
|
||||
cls.config.update(**{config_name: value})
|
||||
cls.save()
|
||||
return f'成功设置{config_name}为{value}'
|
||||
return f"成功设置{config_name}为{value}"
|
||||
|
||||
@classmethod
|
||||
def save(cls):
|
||||
|
@ -9,7 +9,7 @@ class ConfigModel(BaseModel):
|
||||
qrcode_bind_use_url: bool = Field(False, alias='绑定二维码以链接形式发送')
|
||||
|
||||
img_use_cache: bool = Field(True, alias='图片资源缓存开关')
|
||||
reboot_card_enable: List[int] = Field([], alias='启用重启时修改群名片群列表')
|
||||
reboot_card_enable: List[int] = Field([], alias='重启时修改群名片群列表')
|
||||
|
||||
sim_gacha_cd_group: int = Field(30, alias='模拟抽卡群冷却')
|
||||
sim_gacha_cd_member: int = Field(60, alias='模拟抽卡群员冷却')
|
||||
|
@ -326,6 +326,11 @@
|
||||
"夜阑",
|
||||
"叶兰"
|
||||
],
|
||||
"10000061": [
|
||||
"绮良良",
|
||||
"草猫",
|
||||
"猫又"
|
||||
],
|
||||
"10000065": [
|
||||
"久岐忍",
|
||||
"忍者",
|
||||
@ -407,10 +412,11 @@
|
||||
"米卡"
|
||||
],
|
||||
"10000081": [
|
||||
"白术"
|
||||
"卡维"
|
||||
],
|
||||
"10000082": [
|
||||
"卡维"
|
||||
"白术",
|
||||
"白师傅"
|
||||
]
|
||||
},
|
||||
"武器": {
|
||||
|
@ -2,11 +2,11 @@
|
||||
"Name": {
|
||||
"UI_RelicIcon_10000_2": "初学者之羽",
|
||||
"UI_RelicIcon_10000_4": "初学者之花",
|
||||
"UI_RelicIcon_10001_5": "感别之冠",
|
||||
"UI_RelicIcon_10001_1": "故人之心",
|
||||
"UI_RelicIcon_10001_5": "逐光之石",
|
||||
"UI_RelicIcon_10001_1": "异国之盏",
|
||||
"UI_RelicIcon_10001_2": "归乡之羽",
|
||||
"UI_RelicIcon_10001_3": "逐光之石",
|
||||
"UI_RelicIcon_10001_4": "异国之盏",
|
||||
"UI_RelicIcon_10001_3": "感别之冠",
|
||||
"UI_RelicIcon_10001_4": "故人之心",
|
||||
"UI_RelicIcon_10002_1": "勇士的壮行",
|
||||
"UI_RelicIcon_10002_2": "勇士的期许",
|
||||
"UI_RelicIcon_10002_3": "勇士的冠冕",
|
||||
@ -211,7 +211,17 @@
|
||||
"UI_RelicIcon_15028_2": "谢落的筵席",
|
||||
"UI_RelicIcon_15028_3": "紫晶的花冠",
|
||||
"UI_RelicIcon_15028_4": "月女的华彩",
|
||||
"UI_RelicIcon_15028_5": "凝结的时刻"
|
||||
"UI_RelicIcon_15028_5": "凝结的时刻",
|
||||
"UI_RelicIcon_15029_1": "勇者们的茶会",
|
||||
"UI_RelicIcon_15029_2": "坏巫师的羽杖",
|
||||
"UI_RelicIcon_15029_3": "恶龙的单片镜",
|
||||
"UI_RelicIcon_15029_4": "旅途中的鲜花",
|
||||
"UI_RelicIcon_15029_5": "水仙的时时刻刻",
|
||||
"UI_RelicIcon_15030_1": "无边酣乐之筵",
|
||||
"UI_RelicIcon_15030_2": "琦色灵彩之羽",
|
||||
"UI_RelicIcon_15030_3": "灵光明烁之心",
|
||||
"UI_RelicIcon_15030_4": "灵光源起之蕊",
|
||||
"UI_RelicIcon_15030_5": "久远花落之时"
|
||||
},
|
||||
"Mapping": {
|
||||
"冒险家之花": "冒险家",
|
||||
@ -418,7 +428,17 @@
|
||||
"谢落的筵席": "乐园遗落之花",
|
||||
"紫晶的花冠": "乐园遗落之花",
|
||||
"月女的华彩": "乐园遗落之花",
|
||||
"凝结的时刻": "乐园遗落之花"
|
||||
"凝结的时刻": "乐园遗落之花",
|
||||
"勇者们的茶会": "水仙之梦",
|
||||
"坏巫师的羽杖": "水仙之梦",
|
||||
"恶龙的单片镜": "水仙之梦",
|
||||
"旅途中的鲜花": "水仙之梦",
|
||||
"水仙的时时刻刻": "水仙之梦",
|
||||
"无边酣乐之筵": "花海甘露之光",
|
||||
"琦色灵彩之羽": "花海甘露之光",
|
||||
"灵光明烁之心": "花海甘露之光",
|
||||
"灵光源起之蕊": "花海甘露之光",
|
||||
"久远花落之时": "花海甘露之光"
|
||||
},
|
||||
"Info": {
|
||||
"冒险家": {
|
||||
|
@ -2190,5 +2190,31 @@
|
||||
"10805": "Skill_E_Mika_01"
|
||||
},
|
||||
"SideIconName": "UI_AvatarIcon_Side_Mika"
|
||||
},
|
||||
"10000081": {
|
||||
"SkillOrder": [
|
||||
10801,
|
||||
10802,
|
||||
10805
|
||||
],
|
||||
"Skills": {
|
||||
"10801": "Skill_A_04",
|
||||
"10802": "Skill_S_Kaveh_01",
|
||||
"10805": "Skill_E_Kaveh_01"
|
||||
},
|
||||
"SideIconName": "UI_AvatarIcon_Side_Kaveh"
|
||||
},
|
||||
"10000082": {
|
||||
"SkillOrder": [
|
||||
10801,
|
||||
10802,
|
||||
10805
|
||||
],
|
||||
"Skills": {
|
||||
"10801": "Skill_A_Catalyst_MD",
|
||||
"10802": "Skill_S_Baizhuer_01",
|
||||
"10805": "Skill_E_Baizhuer_01"
|
||||
},
|
||||
"SideIconName": "UI_AvatarIcon_Side_Baizhuer"
|
||||
}
|
||||
}
|
@ -326,6 +326,12 @@
|
||||
"10801": "普通攻击·西风枪术·镝传",
|
||||
"10802": "星霜的流旋",
|
||||
"10805": "苍翎的颂愿",
|
||||
"10811": "普通攻击·旋规设矩",
|
||||
"10812": "画则巧施",
|
||||
"10815": "繁绘隅穹",
|
||||
"10821": "普通攻击·金匮针解",
|
||||
"10822": "太素诊要",
|
||||
"10825": "愈气全形论",
|
||||
"20001": "风魔炮",
|
||||
"20002": "风魔炮",
|
||||
"20011": "飞行挑战 - 前冲",
|
||||
@ -419,7 +425,6 @@
|
||||
"10384": "抓猫扔鱼",
|
||||
"100540": "普通攻击·故去的追忆",
|
||||
"100541": "旅行者五连击(火)",
|
||||
"100542": "旅行者五连击(水)",
|
||||
"100543": "普通攻击·异邦铁风",
|
||||
"100544": "旅行者五连击(冰)",
|
||||
"100545": "普通攻击·异邦岩锋",
|
||||
@ -427,7 +432,6 @@
|
||||
"100547": "普通攻击·异邦草翦",
|
||||
"100550": "普通攻击·故去的追忆",
|
||||
"100551": "旅行者五连击(火)",
|
||||
"100552": "旅行者五连击(水)",
|
||||
"100553": "普通攻击·异邦铁风",
|
||||
"100554": "旅行者五连击(冰)",
|
||||
"100555": "普通攻击·异邦岩锋",
|
||||
@ -483,14 +487,14 @@
|
||||
"5047010": "枫原万叶空中攻击",
|
||||
"5048010": "烟绯空中攻击",
|
||||
"5049010": "宵宫空中攻击",
|
||||
"5050010": "测试角色50空中攻击",
|
||||
"5050010": "托马空中攻击",
|
||||
"5051010": "优菈空中攻击",
|
||||
"5052010": "雷电将军空中攻击",
|
||||
"5053010": "早柚空中攻击",
|
||||
"5054010": "珊瑚宫心海空中攻击",
|
||||
"5055010": "五郎空中攻击",
|
||||
"5056010": "九条裟罗空中攻击",
|
||||
"5058010": "测试角色空中攻击",
|
||||
"5058010": "八重神子空中攻击",
|
||||
"5057010": "荒泷一斗空中攻击",
|
||||
"5059010": "鹿野院平藏空中攻击",
|
||||
"5060010": "夜兰空中攻击",
|
||||
@ -508,11 +512,13 @@
|
||||
"5073010": "纳西妲空中攻击",
|
||||
"5074010": "莱依拉空中攻击",
|
||||
"5075010": "流浪者空中攻击",
|
||||
"5076010": "空中攻击",
|
||||
"5076010": "珐露珊空中攻击",
|
||||
"5077010": "瑶瑶空中攻击",
|
||||
"5078010": "艾尔海森空中攻击",
|
||||
"5079010": "迪希雅空中攻击",
|
||||
"5080010": "米卡空中攻击"
|
||||
"5080010": "米卡空中攻击",
|
||||
"5081010": "卡维空中攻击",
|
||||
"5082010": "白术空中攻击"
|
||||
},
|
||||
"Icon": {
|
||||
"10001": "",
|
||||
@ -841,6 +847,12 @@
|
||||
"10801": "Skill_A_03",
|
||||
"10802": "Skill_S_Mika_01",
|
||||
"10805": "Skill_E_Mika_01",
|
||||
"10811": "Skill_A_04",
|
||||
"10812": "Skill_S_Kaveh_01",
|
||||
"10815": "Skill_E_Kaveh_01",
|
||||
"10821": "Skill_A_Catalyst_MD",
|
||||
"10822": "Skill_S_Baizhuer_01",
|
||||
"10825": "Skill_E_Baizhuer_01",
|
||||
"20001": "Skill_A_Dvalin_AirGun",
|
||||
"20002": "Skill_A_Dvalin_AirGun",
|
||||
"20011": "Btn_FlightSprint",
|
||||
@ -934,7 +946,6 @@
|
||||
"10384": "Btn_Recon_Bait",
|
||||
"100540": "Skill_A_01",
|
||||
"100541": "Skill_A_01",
|
||||
"100542": "Skill_A_01",
|
||||
"100543": "Skill_A_01",
|
||||
"100544": "Skill_A_01",
|
||||
"100545": "Skill_A_01",
|
||||
@ -942,7 +953,6 @@
|
||||
"100547": "Skill_A_01",
|
||||
"100550": "Skill_A_01",
|
||||
"100551": "Skill_A_01",
|
||||
"100552": "Skill_A_01",
|
||||
"100553": "Skill_A_01",
|
||||
"100554": "Skill_A_01",
|
||||
"100555": "Skill_A_01",
|
||||
@ -1027,6 +1037,8 @@
|
||||
"5077010": "Skill_A_03",
|
||||
"5078010": "Skill_A_01",
|
||||
"5079010": "Skill_A_04",
|
||||
"5080010": "Skill_A_03"
|
||||
"5080010": "Skill_A_03",
|
||||
"5081010": "Skill_A_04",
|
||||
"5082010": "Skill_A_Catalyst_MD"
|
||||
}
|
||||
}
|
@ -407,7 +407,19 @@
|
||||
"803": "游击的心得",
|
||||
"804": "晴霜的祝念",
|
||||
"805": "引示的铃箭",
|
||||
"806": "依随的策援"
|
||||
"806": "依随的策援",
|
||||
"811": "高门的谒礼",
|
||||
"812": "御驿的径迹",
|
||||
"813": "金塔的香献",
|
||||
"814": "百柱的酣宴",
|
||||
"815": "圣古的库藏",
|
||||
"816": "天园的理想",
|
||||
"821": "呿吟至微",
|
||||
"822": "动静精明",
|
||||
"823": "八正定气",
|
||||
"824": "法古观冥",
|
||||
"825": "盈虚藏象",
|
||||
"826": "真邪合离"
|
||||
},
|
||||
"Icon": {
|
||||
"21": "UI_Talent_S_Ayaka_01",
|
||||
@ -817,6 +829,18 @@
|
||||
"803": "UI_Talent_U_Mika_01",
|
||||
"804": "UI_Talent_S_Mika_03",
|
||||
"805": "UI_Talent_U_Mika_02",
|
||||
"806": "UI_Talent_S_Mika_04"
|
||||
"806": "UI_Talent_S_Mika_04",
|
||||
"811": "UI_Talent_S_Kaveh_01",
|
||||
"812": "UI_Talent_S_Kaveh_02",
|
||||
"813": "UI_Talent_U_Kaveh_02",
|
||||
"814": "UI_Talent_S_Kaveh_03",
|
||||
"815": "UI_Talent_U_Kaveh_01",
|
||||
"816": "UI_Talent_S_Kaveh_04",
|
||||
"821": "UI_Talent_S_Baizhuer_01",
|
||||
"822": "UI_Talent_S_Baizhuer_02",
|
||||
"823": "UI_Talent_U_Baizhuer_01",
|
||||
"824": "UI_Talent_S_Baizhuer_03",
|
||||
"825": "UI_Talent_U_Baizhuer_02",
|
||||
"826": "UI_Talent_S_Baizhuer_04"
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -652,6 +652,22 @@
|
||||
"生命值": 1,
|
||||
"元素充能效率": 1
|
||||
}
|
||||
},
|
||||
"白术": {
|
||||
"常规": {
|
||||
"生命值": 1,
|
||||
"元素充能效率": 1,
|
||||
"元素精通": 1
|
||||
}
|
||||
},
|
||||
"卡维": {
|
||||
"常规": {
|
||||
"攻击力": 1,
|
||||
"暴击率": 1,
|
||||
"暴击伤害": 1,
|
||||
"元素精通": 1,
|
||||
"元素充能效率": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"Talent": {
|
||||
@ -926,6 +942,14 @@
|
||||
"米卡": [
|
||||
2,
|
||||
1
|
||||
],
|
||||
"白术": [
|
||||
2,
|
||||
1
|
||||
],
|
||||
"卡维": [
|
||||
2,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
@ -123,6 +123,7 @@
|
||||
"807607555": "天空之卷",
|
||||
"1455107995": "四风原典",
|
||||
"693354267": "尘世之锁",
|
||||
"4007372867": "碧落之珑",
|
||||
"1890163363": "不灭月华",
|
||||
"310247243": "神乐之真意",
|
||||
"1201790667": "千夜浮梦",
|
||||
@ -290,6 +291,7 @@
|
||||
"天空之卷": "法器",
|
||||
"四风原典": "法器",
|
||||
"尘世之锁": "法器",
|
||||
"碧落之珑": "法器",
|
||||
"不灭月华": "法器",
|
||||
"神乐之真意": "法器",
|
||||
"千夜浮梦": "法器",
|
||||
@ -452,6 +454,7 @@
|
||||
"天空之卷": "UI_EquipIcon_Catalyst_Dvalin",
|
||||
"四风原典": "UI_EquipIcon_Catalyst_Fourwinds",
|
||||
"尘世之锁": "UI_EquipIcon_Catalyst_Kunwu",
|
||||
"碧落之珑": "UI_EquipIcon_Catalyst_Morax",
|
||||
"不灭月华": "UI_EquipIcon_Catalyst_Kaleido",
|
||||
"神乐之真意": "UI_EquipIcon_Catalyst_Narukami",
|
||||
"千夜浮梦": "UI_EquipIcon_Catalyst_Ayus",
|
||||
|
@ -19,7 +19,8 @@
|
||||
"旅行者风",
|
||||
"旅行者岩",
|
||||
"旅行者雷",
|
||||
"旅行者草"
|
||||
"旅行者草",
|
||||
"绮良良"
|
||||
],
|
||||
"法器": [
|
||||
"丽莎",
|
||||
@ -161,7 +162,8 @@
|
||||
"纳西妲",
|
||||
"瑶瑶",
|
||||
"艾尔海森",
|
||||
"旅行者草"
|
||||
"旅行者草",
|
||||
"绮良良"
|
||||
]
|
||||
}
|
||||
},
|
||||
|
@ -10,7 +10,8 @@ from nonebot.params import CommandArg, ArgPlainText
|
||||
from nonebot.adapters.onebot.v11 import Bot, Message, MessageEvent, PrivateMessageEvent, FriendRequestEvent, \
|
||||
GroupRequestEvent, \
|
||||
RequestEvent, NoticeEvent, \
|
||||
GroupIncreaseNoticeEvent, FriendAddNoticeEvent, GroupMessageEvent
|
||||
GroupIncreaseNoticeEvent, FriendAddNoticeEvent, GroupMessageEvent, \
|
||||
ActionFailed
|
||||
from nonebot.typing import T_State
|
||||
|
||||
from LittlePaimon.config import config as bot_config
|
||||
@ -105,7 +106,10 @@ async def _(event: PrivateMessageEvent, bot: Bot, state: T_State, id_: str = Arg
|
||||
@requests.handle()
|
||||
async def _(bot: Bot, event: FriendRequestEvent):
|
||||
done[f'add_friend_{event.user_id}'] = datetime.datetime.now()
|
||||
user_info = await bot.get_stranger_info(user_id=event.user_id)
|
||||
try:
|
||||
user_info = await bot.get_stranger_info(user_id=event.user_id)
|
||||
except ActionFailed:
|
||||
user_info = {'nickname': '未知'}
|
||||
base_msg = f'{user_info["nickname"]}({event.user_id})请求添加好友,验证信息为"{event.comment or "无"}"'
|
||||
if bot_config.auto_add_friend:
|
||||
await asyncio.sleep(random.randint(10, 20))
|
||||
@ -121,8 +125,14 @@ async def _(bot: Bot, event: FriendRequestEvent):
|
||||
@requests.handle()
|
||||
async def _(bot: Bot, event: GroupRequestEvent):
|
||||
done[f'add_group_{event.group_id}'] = datetime.datetime.now()
|
||||
user_info = await bot.get_stranger_info(user_id=event.user_id)
|
||||
group_info = await bot.get_group_info(group_id=event.group_id)
|
||||
try:
|
||||
user_info = await bot.get_stranger_info(user_id=event.user_id)
|
||||
except ActionFailed:
|
||||
user_info = {'nickname': '未知'}
|
||||
try:
|
||||
group_info = await bot.get_group_info(group_id=event.group_id)
|
||||
except ActionFailed:
|
||||
group_info = {'group_name': '未知'}
|
||||
base_msg = f'{user_info["nickname"]}({event.user_id})邀请{NICKNAME}加入群{group_info["group_name"]}({event.group_id})'
|
||||
if bot_config.auto_add_group or event.user_id in SUPERUSERS:
|
||||
await asyncio.sleep(random.randint(10, 20))
|
||||
|
@ -108,7 +108,7 @@ async def _(event: MessageEvent, player=CommandPlayer(1)):
|
||||
await update_log.send(f'开始为UID{player[0].uid}更新抽卡记录,请稍候...')
|
||||
try:
|
||||
result = await get_gacha_log_data(player[0].user_id, player[0].uid)
|
||||
await update_log.send(result or 'Stoken已失效,请重新绑定之后再更新', at_sender=True)
|
||||
await update_log.send(result or 'Stoken已失效,请重新绑定或刷新cookie之后再更新', at_sender=True)
|
||||
except Exception as e:
|
||||
logger.info('原神抽卡记录', f'➤➤更新抽卡记录时出现错误:<r>{e}</r>')
|
||||
await update_log.send(f'更新抽卡记录时出现错误:{e}')
|
||||
|
@ -86,7 +86,7 @@ def gacha_log_to_UIGF(user_id: str, uid: str) -> Tuple[bool, str, Optional[Path]
|
||||
"""
|
||||
data, state = load_history_info(user_id, uid)
|
||||
if not state:
|
||||
return False, f'UID{uid}还没有抽卡记录数据,请先更新', None
|
||||
return False, f'UID{uid}还没有抽卡记录数据,可使用命令[更新抽卡记录]更新', None
|
||||
logger.info('原神抽卡记录', '➤', {'用户': user_id, 'UID': uid}, '导出抽卡记录', True)
|
||||
save_path = Path() / 'data' / 'LittlePaimon' / 'user_data' / 'gacha_log_data' / f'gacha_log_UIGF-{user_id}-{uid}.json'
|
||||
uigf_dict = {
|
||||
@ -159,7 +159,7 @@ async def get_gacha_log_data(user_id: str, uid: str):
|
||||
logger.info('原神抽卡记录', '➤➤', {}, 'Stoken已失效,更新失败', False)
|
||||
cookie_info.stoken = None
|
||||
await cookie_info.save()
|
||||
return f'UID{uid}的Stoken已失效,请重新绑定后再更新抽卡记录'
|
||||
return f'UID{uid}的Stoken已失效,请重新绑定或刷新cookie后再更新抽卡记录'
|
||||
data = data['data']['list']
|
||||
if not data:
|
||||
break
|
||||
@ -198,7 +198,7 @@ async def get_gacha_log_img(user_id: str, uid: str, nickname: str):
|
||||
await LastQuery.update_last_query(user_id, uid)
|
||||
data, state = load_history_info(user_id, uid)
|
||||
if not state:
|
||||
return f'UID{uid}还没有抽卡记录数据,请先更新'
|
||||
return f'UID{uid}还没有抽卡记录数据,可使用命令[更新抽卡记录]更新'
|
||||
if player_info := await PlayerInfo.get_or_none(user_id=user_id, uid=uid):
|
||||
return await draw_gacha_log(player_info.user_id, player_info.uid, player_info.nickname, player_info.signature,
|
||||
data)
|
||||
|
@ -83,8 +83,10 @@ async def draw_pool_detail(pool_name: str,
|
||||
not_out: int,
|
||||
record_time: Tuple[datetime.datetime, datetime.datetime]) -> Optional[
|
||||
PMImage]:
|
||||
if not data:
|
||||
|
||||
if total_count == 0:
|
||||
return None
|
||||
|
||||
total_height = 181 + (446 if len(data) > 3 else 0) + 47 + 192 * math.ceil(len(data) / 6) + 20 + 60
|
||||
img = PMImage(size=(1009, total_height), mode='RGBA', color=(255, 255, 255, 0))
|
||||
# 橙线
|
||||
@ -95,7 +97,11 @@ async def draw_pool_detail(pool_name: str,
|
||||
fm.get('bahnschrift_regular', 30), '#252525', 'right')
|
||||
# 数据
|
||||
await img.text('平均出货', 174, 137, fm.get('hywh', 24), (24, 24, 24, 102))
|
||||
ave = round((total_count - not_out) / len(data), 2)
|
||||
|
||||
ave = 0
|
||||
if data:
|
||||
ave = round((total_count - not_out) / len(data), 2)
|
||||
|
||||
await img.text(str(ave), (176, 270), 84,
|
||||
fm.get('bahnschrift_regular', 48, 'Regular'),
|
||||
'#252525', 'center')
|
||||
@ -105,7 +111,8 @@ async def draw_pool_detail(pool_name: str,
|
||||
await img.text('未出五星', 562, 137, fm.get('hywh', 24), (24, 24, 24, 102))
|
||||
await img.text(str(not_out), (562, 655), 84, fm.get('bahnschrift_regular', 48, 'Regular'),
|
||||
'#252525', 'center')
|
||||
lucky = '欧' if ave <= (45 if pool_type == '武器' else 50) else '吉' if ave <= (55 if pool_type == '武器' else 60) else '中' if ave <= (65 if pool_type == '武器' else 70) else '非'
|
||||
lucky_num = ave if ave > 0 else total_count
|
||||
lucky = '欧' if lucky_num <= (45 if pool_type == '武器' else 50) else '吉' if lucky_num <= (55 if pool_type == '武器' else 60) else '中' if lucky_num <= (65 if pool_type == '武器' else 70) else '非'
|
||||
await img.paste(await load_image(RESOURCE_BASE_PATH / 'gacha_log' / f'{lucky}{random.randint(1, 3)}.png'), (753, 68))
|
||||
# 折线图
|
||||
if len(data) > 3:
|
||||
@ -126,14 +133,16 @@ async def draw_pool_detail(pool_name: str,
|
||||
await img.text(str(chara.count), (point, point + 44), height - 48, fm.get('bahnschrift_regular', 30,
|
||||
'Regular'), '#040404', 'center')
|
||||
i += 1
|
||||
# 详细数据统计
|
||||
chara_bg = PMImage(await load_image(RESOURCE_BASE_PATH / 'gacha_log' / 'detail_bg.png'))
|
||||
await chara_bg.stretch((47, chara_bg.height - 20), 192 + 192 * (len(data) // 6), 'height')
|
||||
await img.paste(chara_bg, (1, 655 if len(data) > 3 else 181))
|
||||
await asyncio.gather(
|
||||
*[img.paste(await detail_avatar(data[i]),
|
||||
(18 + i % 6 * 163, (708 if len(data) > 3 else 234) + i // 6 * 192))
|
||||
for i in range(len(data))])
|
||||
if data:
|
||||
# 详细数据统计
|
||||
chara_bg = PMImage(await load_image(RESOURCE_BASE_PATH / 'gacha_log' / 'detail_bg.png'))
|
||||
await chara_bg.stretch((47, chara_bg.height - 20), 192 + 192 * (len(data) // 6), 'height')
|
||||
await img.paste(chara_bg, (1, 655 if len(data) > 3 else 181))
|
||||
await asyncio.gather(
|
||||
*[img.paste(await detail_avatar(data[i]),
|
||||
(18 + i % 6 * 163, (708 if len(data) > 3 else 234) + i // 6 * 192))
|
||||
for i in range(len(data))])
|
||||
|
||||
return img
|
||||
|
||||
|
||||
@ -204,7 +213,8 @@ async def draw_gacha_log(user_id: str, uid: str, nickname: Optional[str], signat
|
||||
await img.text(str(total_gacha_count), (408, 503), 286, fm.get('bahnschrift_regular', 48), '#040404', 'center')
|
||||
await img.text('总计出金', 597, 335, fm.get('hywh', 24), (24, 24, 24, 102))
|
||||
await img.text(str(total_five_star_count), (598, 694), 286, fm.get('bahnschrift_regular', 48), '#040404', 'center')
|
||||
lucky = '欧' if five_star_average <= 50 else '吉' if five_star_average <= 60 else '中' if five_star_average <= 70 else '非'
|
||||
lucky_num = five_star_average if five_star_average>0 else total_gacha_count
|
||||
lucky = '欧' if lucky_num <= 50 else '吉' if lucky_num <= 60 else '中' if lucky_num <= 70 else '非'
|
||||
await img.paste(await load_image(RESOURCE_BASE_PATH / 'gacha_log' / f'{lucky}{random.randint(1, 3)}.png'), (788, 271))
|
||||
four_star_detail = await draw_four_star_detail(list(data4.values()))
|
||||
if total_five_star_count:
|
||||
|
129
LittlePaimon/plugins/star_rail_wiki/__init__.py
Normal file
129
LittlePaimon/plugins/star_rail_wiki/__init__.py
Normal file
@ -0,0 +1,129 @@
|
||||
import datetime
|
||||
from difflib import get_close_matches
|
||||
from re import escape
|
||||
from typing import Dict
|
||||
|
||||
from nonebot import on_regex
|
||||
from nonebot.adapters.onebot.v11 import Message, MessageSegment, ActionFailed
|
||||
from nonebot.internal.matcher import Matcher
|
||||
from nonebot.internal.params import Arg, ArgPlainText
|
||||
from nonebot.params import RegexDict
|
||||
from nonebot.plugin import PluginMetadata
|
||||
from nonebot.typing import T_State
|
||||
|
||||
from LittlePaimon.config import config
|
||||
from LittlePaimon.utils import DRIVER, NICKNAME, logger
|
||||
from LittlePaimon.utils.requests import aiorequests
|
||||
from LittlePaimon.utils.typing import COMMAND_START_RE
|
||||
|
||||
wiki_data: Dict[str, Dict[str, str]] = {}
|
||||
last_update_time: datetime.datetime = datetime.datetime.now()
|
||||
|
||||
GAME_ALIAS = ['星穹铁道', '星铁', '崩铁', '穹轨', '铁轨', '铁道', escape('*'), '']
|
||||
BASE_TYPE = ['图鉴', '材料', '角色图鉴', '角色材料', '遗器图鉴', '光锥图鉴']
|
||||
GAME_ALIAS_RE = '(' + '|'.join(GAME_ALIAS) + ')'
|
||||
BASE_TYPE_RE = '(' + '|'.join(BASE_TYPE) + ')'
|
||||
WIKI_RE = fr'{COMMAND_START_RE}(?P<name>\w{{0,10}}?)(?P<game>{GAME_ALIAS_RE})(?P<type>{BASE_TYPE_RE})'
|
||||
TYPE_MAP = {
|
||||
'角色图鉴': 'role',
|
||||
'角色材料': 'material for role',
|
||||
'遗器图鉴': 'relic',
|
||||
'光锥图鉴': 'lightcone'
|
||||
}
|
||||
|
||||
__plugin_meta__ = PluginMetadata(
|
||||
name='星穹铁道Wiki',
|
||||
description='星穹铁道WIKI百科',
|
||||
usage='',
|
||||
extra={
|
||||
'author': '惜月',
|
||||
'version': '3.0',
|
||||
'priority': 15,
|
||||
},
|
||||
)
|
||||
|
||||
wiki = on_regex(WIKI_RE,
|
||||
priority=8,
|
||||
block=False,
|
||||
state={
|
||||
'pm_name': '星穹铁道wiki',
|
||||
'pm_description': '支持查询:角色、光锥、遗器图鉴和角色材料\n示例:希儿星铁图鉴、与行星相会光锥图鉴',
|
||||
'pm_usage': '<对象名><星铁图鉴|材料>',
|
||||
'pm_priority': 1
|
||||
})
|
||||
|
||||
|
||||
@wiki.handle()
|
||||
async def sr_wiki_handler(state: T_State, regex_dict: dict = RegexDict()):
|
||||
name: str = regex_dict['name']
|
||||
game: str = regex_dict['game']
|
||||
type: str = regex_dict['type']
|
||||
if type in {'图鉴', '材料', '角色图鉴', '角色材料'} and not game:
|
||||
await wiki.finish()
|
||||
if not wiki_data or datetime.datetime.now() - last_update_time > datetime.timedelta(hours=2):
|
||||
await init_data()
|
||||
if not wiki_data:
|
||||
await wiki.finish('无法获取到星穹铁道资源列表,可能是网络问题~')
|
||||
if type in {'图鉴', '角色图鉴'}:
|
||||
type = '角色图鉴'
|
||||
elif type in {'材料', '角色材料'}:
|
||||
type = '角色材料'
|
||||
elif type.startswith('遗器'):
|
||||
type = '遗器图鉴'
|
||||
elif type.startswith('光锥'):
|
||||
type = '光锥图鉴'
|
||||
state['type'] = type
|
||||
if name:
|
||||
state['name'] = Message(name)
|
||||
else:
|
||||
data = list(wiki_data[TYPE_MAP[type]].keys())
|
||||
state['name_list'] = '\n'.join(
|
||||
[' '.join(data[i: i + 3]) for i in range(0, len(data), 3)]
|
||||
)
|
||||
state['times'] = 1
|
||||
|
||||
|
||||
@wiki.got('name', prompt=Message.template('目前支持以下{type}:\n{name_list}\n你要查询哪个呢?'))
|
||||
async def sr_wiki_got(matcher: Matcher,
|
||||
state: T_State,
|
||||
type: str = Arg('type'),
|
||||
name: str = ArgPlainText('name')):
|
||||
if name in {'取消', '退出', '结束'}:
|
||||
await wiki.finish(f'好吧,有需要再找{NICKNAME}')
|
||||
if not name:
|
||||
if state['times'] == 2:
|
||||
await wiki.finish('旅行者似乎不太能理解,下次再问我吧' + MessageSegment.face(146))
|
||||
else:
|
||||
state['times'] += 1
|
||||
await wiki.reject(f'你要查询谁的{type}呢?', at_sender=True)
|
||||
data = wiki_data[TYPE_MAP[type]]
|
||||
matcher.stop_propagation()
|
||||
if matches := get_close_matches(name, data.keys(), cutoff=0.4, n=1):
|
||||
final_name = str(matches[0])
|
||||
try:
|
||||
await wiki.finish(MessageSegment.image(
|
||||
f'{config.github_proxy}https://raw.githubusercontent.com/Nwflower/star-rail-atlas/master{data[final_name]}'
|
||||
))
|
||||
except ActionFailed:
|
||||
await wiki.finish(f'{final_name}的{type}发送失败,可能是网络问题')
|
||||
else:
|
||||
data = list(data.keys())
|
||||
msg = '\n'.join(
|
||||
[' '.join(data[i: i + 3]) for i in range(0, len(data), 3)]
|
||||
)
|
||||
await wiki.finish(f'没有找到相关{type}哦!目前支持以下{type}:\n{msg}\n请重新发起查询!')
|
||||
|
||||
|
||||
async def init_data():
|
||||
try:
|
||||
resp = await aiorequests.get(
|
||||
f'{config.github_proxy}https://raw.githubusercontent.com/Nwflower/star-rail-atlas/master/path.json')
|
||||
data = resp.json()
|
||||
wiki_data.update(data)
|
||||
global last_update_time
|
||||
last_update_time = datetime.datetime.now()
|
||||
except Exception:
|
||||
logger.warning('星穹铁道WIKI', '获取<m>WIKI资源</m>时<r>出错</r>,请尝试更换<m>github资源地址</m>')
|
||||
|
||||
|
||||
DRIVER.on_startup(init_data)
|
@ -281,7 +281,7 @@ async def get_mihoyo_public_data(
|
||||
cookie_info = await get_cookie(user_id, uid, check)
|
||||
check = False
|
||||
if not cookie_info:
|
||||
return '当前没有可使用的cookie,请绑定私人cookie或联系超级管理员添加公共cookie,'
|
||||
return '当前没有可使用的cookie,请使用命令[原神扫码绑定]/[ysb]绑定私人cookie或联系超级管理员添加公共cookie,'
|
||||
if mode == 'abyss':
|
||||
data = await aiorequests.get(
|
||||
url=ABYSS_API,
|
||||
|
@ -1,6 +1,7 @@
|
||||
from typing import Dict
|
||||
|
||||
from nonebot import logger as nb_logger
|
||||
from nonebot.utils import escape_tag
|
||||
|
||||
|
||||
class logger:
|
||||
@ -10,20 +11,20 @@ class logger:
|
||||
|
||||
@staticmethod
|
||||
def info(command: str, info: str = '', param: Dict[str, any] = None, result: str = '', result_type: bool = True):
|
||||
param_str = ' '.join([f'{k}<m>{v}</m>' for k, v in param.items()]) if param else ''
|
||||
result_str = f'<g>{result}</g>' if result_type else f'<r>{result}</r>' if result else ''
|
||||
param_str = ' '.join([f'{k}<m>{escape_tag(str(v))}</m>' for k, v in param.items()]) if param else ''
|
||||
result_str = f'<g>{escape_tag(result)}</g>' if result_type else f'<r>{escape_tag(result)}</r>' if result else ''
|
||||
nb_logger.opt(colors=True).info(f'<u><y>[{command}]</y></u>{info}{param_str}{result_str}')
|
||||
|
||||
@staticmethod
|
||||
def success(command: str, info: str = '', param: Dict[str, any] = None, result: str = ''):
|
||||
param_str = ' '.join([f'{k}<m>{v}</m>' for k, v in param.items()]) if param else ''
|
||||
result_str = f'<g>{result}</g>' if result else ''
|
||||
param_str = ' '.join([f'{k}<m>{escape_tag(str(v))}</m>' for k, v in param.items()]) if param else ''
|
||||
result_str = f'<g>{escape_tag(result)}</g>' if result else ''
|
||||
nb_logger.opt(colors=True).success(f'<u><y>[{command}]</y></u>{info}{param_str}{result_str}')
|
||||
|
||||
@staticmethod
|
||||
def warning(command: str, info: str = '', action: str = ''):
|
||||
nb_logger.opt(colors=True).warning(f'<u><y>[{command}]</y></u>{info}<m>{action}</m>')
|
||||
nb_logger.opt(colors=True).warning(f'<u><y>[{command}]</y></u>{escape_tag(info)}<m>{escape_tag(action)}</m>')
|
||||
|
||||
@staticmethod
|
||||
def debug(command: str, info: str):
|
||||
nb_logger.opt(colors=True).debug(f'<u><y>[{command}]</y></u>{info}')
|
||||
nb_logger.opt(colors=True).debug(f'<u><y>[{command}]</y></u>{escape_tag(info)}')
|
||||
|
@ -37,7 +37,7 @@ CHARACTERS = ['神里绫华', '琴', '丽莎', '芭芭拉', '凯亚', '迪卢克
|
||||
'枫原万叶', '烟绯', '宵宫', '托马', '优菈', '雷电将军', '早柚', '珊瑚宫心海', '五郎', '九条裟罗',
|
||||
'荒泷一斗', '八重神子', '夜兰', '埃洛伊',
|
||||
'申鹤', '云堇', '久岐忍', '神里绫人', '鹿野院平藏', '提纳里', '柯莱', '多莉', '赛诺', '坎蒂丝', '妮露',
|
||||
'纳西妲', '莱依拉', '流浪者', '珐露珊', '艾尔海森', '瑶瑶', '迪希雅', '米卡', '白术', '卡维']
|
||||
'纳西妲', '莱依拉', '流浪者', '珐露珊', '艾尔海森', '瑶瑶', '迪希雅', '米卡', '白术', '卡维', '绮良良']
|
||||
"""全角色"""
|
||||
MALE_CHARACTERS = ['凯亚', '迪卢克', '钟离', '达达利亚', '托马', '荒泷一斗', '神里绫人', '艾尔海森', '白术', '卡维']
|
||||
"""成男角色"""
|
||||
@ -45,7 +45,7 @@ FEMALE_CHARACTERS = ['琴', '丽莎', '北斗', '凝光', '罗莎莉亚', '优
|
||||
'申鹤', '坎蒂丝', '迪希雅']
|
||||
"""成女角色"""
|
||||
GIRL_CHARACTERS = ['神里绫华', '芭芭拉', '安柏', '香菱', '菲谢尔', '诺艾尔', '甘雨', '莫娜', '刻晴', '砂糖', '辛焱',
|
||||
'胡桃', '烟绯', '宵宫', '珊瑚宫心海', '埃洛伊', '云堇', '久岐忍', '柯莱', '妮露', '莱依拉', '珐露珊']
|
||||
'胡桃', '烟绯', '宵宫', '珊瑚宫心海', '埃洛伊', '云堇', '久岐忍', '柯莱', '妮露', '莱依拉', '珐露珊', '绮良良']
|
||||
"""少女角色"""
|
||||
BOY_CHARACTERS = ['雷泽', '温迪', '行秋', '魈', '班尼特', '重云', '阿贝多', '枫原万叶', '五郎', '鹿野院平藏', '提纳里',
|
||||
'赛诺', '流浪者', '米卡']
|
||||
|
3890
poetry.lock
generated
3890
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -38,7 +38,6 @@ playwright = "^1.27.1"
|
||||
qrcode = "^7.3.1"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
nb-cli = "^0.6.7"
|
||||
|
||||
[tool.nonebot]
|
||||
plugins = []
|
||||
|
172
requirements.txt
172
requirements.txt
@ -1,86 +1,90 @@
|
||||
--index-url https://mirrors.aliyun.com/pypi/simple
|
||||
|
||||
aiosqlite==0.17.0; python_version >= "3.7" and python_version < "4.0"
|
||||
amis-python==1.0.6; python_version >= "3.7" and python_version < "4.0"
|
||||
anyio==3.6.2; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
|
||||
apscheduler==3.9.1.post1; python_version >= "3.8" and python_version < "4.0" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8"
|
||||
backports.zoneinfo==0.2.1; python_version >= "3.8" and python_version < "3.9" and python_full_version < "3.0.0" and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8") or python_full_version >= "3.5.0" and python_version < "3.9" and python_version >= "3.8" and (python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8")
|
||||
beautifulsoup4==4.11.1; python_full_version >= "3.6.0"
|
||||
certifi==2022.12.7; python_version >= "3.7"
|
||||
click==8.1.3; python_version >= "3.8" and python_version < "4.0"
|
||||
colorama==0.4.6; python_version >= "3.8" and python_full_version < "3.0.0" and platform_system == "Windows" and python_version < "4.0" and sys_platform == "win32" or python_full_version >= "3.7.0" and platform_system == "Windows" and python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
|
||||
contourpy==1.0.6; python_version >= "3.8"
|
||||
cycler==0.11.0; python_version >= "3.8"
|
||||
ecdsa==0.18.0; python_version >= "2.6" and python_full_version < "3.0.0" or python_full_version >= "3.3.0"
|
||||
expandvars==0.9.0; python_version >= "3.4"
|
||||
fastapi==0.89.1; python_version >= "3.8" and python_version < "4.0"
|
||||
fonttools==4.38.0; python_version >= "3.8"
|
||||
gitdb==4.0.10; python_version >= "3.7"
|
||||
gitpython==3.1.30; python_version >= "3.7"
|
||||
greenlet==2.0.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7"
|
||||
h11==0.14.0; python_version >= "3.8" and python_version < "4.0"
|
||||
httpcore==0.16.3; python_version >= "3.7"
|
||||
httptools==0.5.0; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.5.0"
|
||||
httpx==0.23.3; python_version >= "3.7"
|
||||
idna==3.4
|
||||
iso8601==1.1.0; python_full_version >= "3.6.2" and python_version < "4.0" and python_version >= "3.7"
|
||||
jieba==0.42.1
|
||||
jinja2==3.1.2; python_version >= "3.7" and python_version < "4.0"
|
||||
joblib==1.2.0; python_version >= "3.8"
|
||||
kiwisolver==1.4.4; python_version >= "3.8"
|
||||
loguru==0.6.0; python_version >= "3.8" and python_version < "4.0"
|
||||
lxml==4.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
|
||||
markupsafe==2.1.1; python_version >= "3.7" and python_version < "4.0"
|
||||
matplotlib==3.6.3; python_version >= "3.8"
|
||||
msgpack==1.0.4; python_version >= "3.8" and python_version < "4.0"
|
||||
multidict==6.0.4; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot-adapter-onebot==2.2.0; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot-plugin-apscheduler==0.2.0; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot2==2.0.0rc2; python_version >= "3.8" and python_version < "4.0"
|
||||
numpy==1.24.1; python_version >= "3.8"
|
||||
packaging==23.0; python_version >= "3.8"
|
||||
pillow==9.4.0; python_version >= "3.7"
|
||||
playwright==1.29.1; python_version >= "3.7"
|
||||
psutil==5.9.4; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
|
||||
pyasn1==0.4.8; python_version >= "3.6" and python_version < "4"
|
||||
pydantic==1.10.4; python_version >= "3.8" and python_version < "4.0"
|
||||
pyee==9.0.4; python_version >= "3.7"
|
||||
pygtrie==2.5.0; python_version >= "3.8" and python_version < "4.0"
|
||||
pyparsing==3.0.9; python_full_version >= "3.6.8" and python_version >= "3.8"
|
||||
pypika-tortoise==0.1.6; python_version >= "3.7" and python_version < "4.0"
|
||||
pypinyin==0.47.1; (python_version >= "2.6" and python_full_version < "3.0.0") or (python_full_version >= "3.3.0" and python_version < "4")
|
||||
python-dateutil==2.8.2; python_version >= "3.8" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.8"
|
||||
python-dotenv==0.21.0
|
||||
python-jose==3.3.0
|
||||
pytz-deprecation-shim==0.1.0.post0; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8"
|
||||
pytz==2022.7; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.8" and python_version < "4.0" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8")
|
||||
pyyaml==6.0; python_version >= "3.8" and python_version < "4.0"
|
||||
qrcode==7.3.1; python_version >= "3.6"
|
||||
rfc3986==1.5.0; python_version >= "3.7"
|
||||
rsa==4.9; python_version >= "3.6" and python_version < "4"
|
||||
ruamel.yaml.clib==0.2.7; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.5"
|
||||
ruamel.yaml==0.17.21; python_version >= "3"
|
||||
scikit-learn==1.2.0; python_version >= "3.8"
|
||||
scipy==1.9.3; python_version >= "3.8"
|
||||
setuptools-scm==7.1.0; python_version >= "3.8"
|
||||
shapely==1.8.5.post1; python_version >= "3.6"
|
||||
six==1.16.0; python_version >= "3.8" and python_full_version < "3.0.0" and python_version < "4.0" or python_full_version >= "3.5.0" and python_version >= "3.8" and python_version < "4"
|
||||
smmap==5.0.0; python_version >= "3.7"
|
||||
sniffio==1.3.0; python_full_version >= "3.6.2" and python_version >= "3.8" and python_version < "4.0"
|
||||
soupsieve==2.3.2.post1; python_version >= "3.6" and python_full_version >= "3.6.0"
|
||||
starlette==0.22.0; python_version >= "3.8" and python_version < "4.0"
|
||||
threadpoolctl==3.1.0; python_version >= "3.8"
|
||||
tomli==2.0.1; python_version < "3.11" and python_version >= "3.8"
|
||||
tomlkit==0.11.6; python_version >= "3.8" and python_version < "4.0"
|
||||
tortoise-orm==0.19.2; python_version >= "3.7" and python_version < "4.0"
|
||||
tqdm==4.64.1; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.4.0")
|
||||
typing-extensions==4.4.0; python_version >= "3.8" and python_version <= "3.8"
|
||||
tzdata==2022.7; python_version >= "3.8" and python_version < "4.0" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.8" and platform_system == "Windows"
|
||||
tzlocal==4.2; python_version >= "3.8" and python_version < "4.0" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version < "4" and python_version >= "3.8"
|
||||
ujson==5.7.0; python_version >= "3.7"
|
||||
uvicorn==0.20.0; python_version >= "3.8" and python_version < "4.0"
|
||||
uvloop==0.17.0; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_version < "4.0"
|
||||
watchfiles==0.18.1; python_version >= "3.8" and python_version < "4.0"
|
||||
websockets==10.4; python_version >= "3.8" and python_version < "4.0"
|
||||
win32-setctime==1.1.0; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
|
||||
yarl==1.8.2; python_version >= "3.8" and python_version < "4.0"
|
||||
aiosqlite==0.17.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
amis-python==1.0.7 ; python_version >= "3.8" and python_version < "4.0"
|
||||
anyio==3.6.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
apscheduler==3.10.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
backports-zoneinfo==0.2.1 ; python_version >= "3.8" and python_version < "3.9"
|
||||
beautifulsoup4==4.12.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
certifi==2022.12.7 ; python_version >= "3.8" and python_version < "4.0"
|
||||
click==8.1.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
colorama==0.4.6 ; python_version >= "3.8" and python_version < "4.0" and platform_system == "Windows" or python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
|
||||
contourpy==1.0.7 ; python_version >= "3.8" and python_version < "4.0"
|
||||
cycler==0.11.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
ecdsa==0.18.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
expandvars==0.9.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
fastapi==0.95.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
fonttools==4.39.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
gitdb==4.0.10 ; python_version >= "3.8" and python_version < "4.0"
|
||||
gitpython==3.1.31 ; python_version >= "3.8" and python_version < "4.0"
|
||||
greenlet==2.0.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
h11==0.14.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
httpcore==0.16.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
httptools==0.5.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
httpx==0.23.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
idna==3.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
importlib-resources==5.12.0 ; python_version >= "3.8" and python_version < "3.10"
|
||||
iso8601==1.1.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
jieba==0.42.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
jinja2==3.1.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
joblib==1.2.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
kiwisolver==1.4.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
loguru==0.6.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
lxml==4.9.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
markupsafe==2.1.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
matplotlib==3.7.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
msgpack==1.0.5 ; python_version >= "3.8" and python_version < "4.0"
|
||||
multidict==6.0.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot-adapter-onebot==2.2.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot-plugin-apscheduler==0.2.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot2==2.0.0rc4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
nonebot2[fastapi]==2.0.0rc4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
numpy==1.24.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
packaging==23.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pillow==9.5.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
playwright==1.32.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
psutil==5.9.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pyasn1==0.4.8 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pydantic==1.10.7 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pydantic[dotenv]==1.10.7 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pyee==9.0.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pygtrie==2.5.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pyparsing==3.0.9 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pypika-tortoise==0.1.6 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pypinyin==0.47.1 ; python_version >= "3.8" and python_version < "4"
|
||||
pypng==0.20220715.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
python-dotenv==1.0.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
python-jose==3.3.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pytz-deprecation-shim==0.1.0.post0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pytz==2023.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
pyyaml==6.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
qrcode==7.4.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
rfc3986[idna2008]==1.5.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
rsa==4.9 ; python_version >= "3.8" and python_version < "4"
|
||||
ruamel-yaml-clib==0.2.7 ; platform_python_implementation == "CPython" and python_version < "3.11" and python_version >= "3.8"
|
||||
ruamel-yaml==0.17.21 ; python_version >= "3.8" and python_version < "4.0"
|
||||
scikit-learn==1.2.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
scipy==1.9.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
setuptools==67.6.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
shapely==1.8.5.post1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
six==1.16.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
smmap==5.0.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
sniffio==1.3.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
soupsieve==2.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
starlette==0.26.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
threadpoolctl==3.1.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11"
|
||||
tortoise-orm==0.19.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
tqdm==4.65.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
typing-extensions==4.5.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
tzdata==2023.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
tzlocal==4.3 ; python_version >= "3.8" and python_version < "4.0"
|
||||
ujson==5.7.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
uvicorn[standard]==0.21.1 ; python_version >= "3.8" and python_version < "4.0"
|
||||
uvloop==0.17.0 ; sys_platform != "win32" and sys_platform != "cygwin" and platform_python_implementation != "PyPy" and python_version >= "3.8" and python_version < "4.0"
|
||||
watchfiles==0.19.0 ; python_version >= "3.8" and python_version < "4.0"
|
||||
websockets==10.4 ; python_version >= "3.8" and python_version < "4.0"
|
||||
win32-setctime==1.1.0 ; python_version >= "3.8" and python_version < "4.0" and sys_platform == "win32"
|
||||
yarl==1.8.2 ; python_version >= "3.8" and python_version < "4.0"
|
||||
zipp==3.15.0 ; python_version >= "3.8" and python_version < "3.10"
|
||||
|
Loading…
x
Reference in New Issue
Block a user