mirror of
https://github.com/KimigaiiWuyi/GenshinUID.git
synced 2025-06-01 13:09:56 +08:00
规范引号
This commit is contained in:
parent
8fd1ad6e8f
commit
cfc755dc0a
24
README.md
24
README.md
@ -12,17 +12,18 @@
|
|||||||
<a><img src="https://s2.loli.net/2022/02/01/QlS4piWXw5rZO3D.png"></a>
|
<a><img src="https://s2.loli.net/2022/02/01/QlS4piWXw5rZO3D.png"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
## 丨我该如何安装该插件?
|
## 丨我该如何安装该插件?
|
||||||
|
|
||||||
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp) & [HoshinoBot](https://github.com/Ice-Cirno/HoshinoBot),**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85hoshinobot-)**。
|
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
|
||||||
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp) & [NoneBot2](https://github.com/nonebot/nonebot2),**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85nonebot2)**。(**开发者正在使用**)
|
& [HoshinoBot](https://github.com/Ice-Cirno/HoshinoBot),**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85hoshinobot-)**。
|
||||||
|
+ 如果你使用的是[Go-cqhttp](https://github.com/Mrs4s/go-cqhttp)
|
||||||
|
& [NoneBot2](https://github.com/nonebot/nonebot2),**安装方法查看[此处](https://github.com/KimigaiiWuyi/GenshinUID/wiki#%E4%B8%A8%E5%AE%89%E8%A3%85nonebot2)**。(**开发者正在使用**)
|
||||||
|
|
||||||
+ 如果你想在QQ官方的频道Bot使用此插件,你需要**做好以下准备**:
|
+ 如果你想在QQ官方的频道Bot使用此插件,你需要**做好以下准备**:
|
||||||
- 拥有QQ频道机器人的开发者账号(类型:私域)
|
- 拥有QQ频道机器人的开发者账号(类型:私域)
|
||||||
- 拥有已经备案好的服务器地址(视情况后期官方放开本地图片发送而定)
|
- 拥有已经备案好的服务器地址(视情况后期官方放开本地图片发送而定)
|
||||||
- **腾讯频道Bot官方的文档**,查看[此处](https://bot.q.qq.com/wiki/#)
|
- **腾讯频道Bot官方的文档**,查看[此处](https://bot.q.qq.com/wiki/#)
|
||||||
- 安装方法:基于官方的[PythonSDK](https://github.com/tencent-connect/botpy),本插件的安装方法可自行摸索。
|
- 安装方法:基于官方的[PythonSDK](https://github.com/tencent-connect/botpy),本插件的安装方法可自行摸索。
|
||||||
|
|
||||||
## 丨我该如何获取Cookies?[#92](https://github.com/KimigaiiWuyi/GenshinUID/issues/92)([@RemKeeper](https://github.com/RemKeeper))
|
## 丨我该如何获取Cookies?[#92](https://github.com/KimigaiiWuyi/GenshinUID/issues/92)([@RemKeeper](https://github.com/RemKeeper))
|
||||||
|
|
||||||
@ -73,8 +74,10 @@ if (ask == true) {
|
|||||||
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
|
- [PaimonBot](https://github.com/XiaoMiku01/PaimonBot) - 插件原始代码来自于它
|
||||||
- [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它
|
- [YuanShen_User_Info](https://github.com/Womsxd/YuanShen_User_Info) - 米游社API来自于它
|
||||||
- *[MiniGG](https://www.minigg.cn/)* - Wiki API来自于它
|
- *[MiniGG](https://www.minigg.cn/)* - Wiki API来自于它
|
||||||
- [@MingxuanGame](https://github.com/MingxuanGame) - [Nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1)分支新建与维护
|
- [@MingxuanGame](https://github.com/MingxuanGame)
|
||||||
- [@shirokurakana](https://github.com/shirokurakana) - [Nonebot2-beta1分支的修复与优化](https://github.com/KimigaiiWuyi/GenshinUID/pull/118)
|
- [Nonebot2-beta1](https://github.com/KimigaiiWuyi/GenshinUID/tree/nonebot2-beta1)分支新建与维护
|
||||||
|
- [@shirokurakana](https://github.com/shirokurakana)
|
||||||
|
- [Nonebot2-beta1分支的修复与优化](https://github.com/KimigaiiWuyi/GenshinUID/pull/118)
|
||||||
- [@AMEKENN](https://github.com/AMEKENN) - 米游社签到部分的代码指导
|
- [@AMEKENN](https://github.com/AMEKENN) - 米游社签到部分的代码指导
|
||||||
- [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献
|
- [@lgc233](https://github.com/lgc2333) - 众多优秀PR贡献
|
||||||
- [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档
|
- [@RemKeeper](https://github.com/RemKeeper) - 简易Cookies获取文档
|
||||||
@ -88,4 +91,5 @@ if (ask == true) {
|
|||||||
+ 如果本插件对你有帮助,不要忘了点个Star~
|
+ 如果本插件对你有帮助,不要忘了点个Star~
|
||||||
+ 本项目仅供学习使用,请勿用于商业用途
|
+ 本项目仅供学习使用,请勿用于商业用途
|
||||||
+ [爱发电](https://afdian.net/@KimigaiiWuyi)
|
+ [爱发电](https://afdian.net/@KimigaiiWuyi)
|
||||||
+ [GPL-3.0 License](https://github.com/KimigaiiWuyi/GenshinUID/blob/main/LICENSE) © [@KimigaiiWuyi](https://github.com/KimigaiiWuyi)
|
+ [GPL-3.0 License](https://github.com/KimigaiiWuyi/GenshinUID/blob/main/LICENSE)
|
||||||
|
© [@KimigaiiWuyi](https://github.com/KimigaiiWuyi)
|
||||||
|
722
genshinuid.py
722
genshinuid.py
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -7,47 +7,47 @@ from httpx import AsyncClient
|
|||||||
from get_data import old_version_get_ds_token, random_hex
|
from get_data import old_version_get_ds_token, random_hex
|
||||||
|
|
||||||
# 米游社的API列表
|
# 米游社的API列表
|
||||||
bbs_Cookieurl = "https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket={}"
|
bbs_Cookieurl = 'https://webapi.account.mihoyo.com/Api/cookie_accountinfo_by_loginticket?login_ticket={}'
|
||||||
bbs_Cookieurl2 = "https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket" \
|
bbs_Cookieurl2 = 'https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket' \
|
||||||
"?login_ticket={}&token_types=3&uid={}"
|
'?login_ticket={}&token_types=3&uid={}'
|
||||||
bbs_Taskslist = "https://bbs-api.mihoyo.com/apihub/sapi/getUserMissionsState" # 获取任务列表
|
bbs_Taskslist = 'https://bbs-api.mihoyo.com/apihub/sapi/getUserMissionsState' # 获取任务列表
|
||||||
bbs_Signurl = "https://bbs-api.mihoyo.com/apihub/sapi/signIn?gids={}" # post
|
bbs_Signurl = 'https://bbs-api.mihoyo.com/apihub/sapi/signIn?gids={}' # post
|
||||||
bbs_Listurl = "https://bbs-api.mihoyo.com/post/api/getForumPostList?" \
|
bbs_Listurl = 'https://bbs-api.mihoyo.com/post/api/getForumPostList?' \
|
||||||
"forum_id={}&is_good=false&is_hot=false&page_size=20&sort_type=1"
|
'forum_id={}&is_good=false&is_hot=false&page_size=20&sort_type=1'
|
||||||
bbs_Detailurl = "https://bbs-api.mihoyo.com/post/api/getPostFull?post_id={}"
|
bbs_Detailurl = 'https://bbs-api.mihoyo.com/post/api/getPostFull?post_id={}'
|
||||||
bbs_Shareurl = "https://bbs-api.mihoyo.com/apihub/api/getShareConf?entity_id={}&entity_type=1"
|
bbs_Shareurl = 'https://bbs-api.mihoyo.com/apihub/api/getShareConf?entity_id={}&entity_type=1'
|
||||||
bbs_Likeurl = "https://bbs-api.mihoyo.com/apihub/sapi/upvotePost" # post json
|
bbs_Likeurl = 'https://bbs-api.mihoyo.com/apihub/sapi/upvotePost' # post json
|
||||||
|
|
||||||
mihoyobbs_List = [{
|
mihoyobbs_List = [{
|
||||||
"id": "1",
|
'id' : '1',
|
||||||
"forumId": "1",
|
'forumId': '1',
|
||||||
"name": "崩坏3",
|
'name' : '崩坏3',
|
||||||
"url": "https://bbs.mihoyo.com/bh3/"
|
'url' : 'https://bbs.mihoyo.com/bh3/'
|
||||||
}, {
|
}, {
|
||||||
"id": "2",
|
'id' : '2',
|
||||||
"forumId": "26",
|
'forumId': '26',
|
||||||
"name": "原神",
|
'name' : '原神',
|
||||||
"url": "https://bbs.mihoyo.com/ys/"
|
'url' : 'https://bbs.mihoyo.com/ys/'
|
||||||
}, {
|
}, {
|
||||||
"id": "3",
|
'id' : '3',
|
||||||
"forumId": "30",
|
'forumId': '30',
|
||||||
"name": "崩坏2",
|
'name' : '崩坏2',
|
||||||
"url": "https://bbs.mihoyo.com/bh2/"
|
'url' : 'https://bbs.mihoyo.com/bh2/'
|
||||||
}, {
|
}, {
|
||||||
"id": "4",
|
'id' : '4',
|
||||||
"forumId": "37",
|
'forumId': '37',
|
||||||
"name": "未定事件簿",
|
'name' : '未定事件簿',
|
||||||
"url": "https://bbs.mihoyo.com/wd/"
|
'url' : 'https://bbs.mihoyo.com/wd/'
|
||||||
}, {
|
}, {
|
||||||
"id": "5",
|
'id' : '5',
|
||||||
"forumId": "34",
|
'forumId': '34',
|
||||||
"name": "大别野",
|
'name' : '大别野',
|
||||||
"url": "https://bbs.mihoyo.com/dby/"
|
'url' : 'https://bbs.mihoyo.com/dby/'
|
||||||
}, {
|
}, {
|
||||||
"id": "6",
|
'id' : '6',
|
||||||
"forumId": "52",
|
'forumId': '52',
|
||||||
"name": "崩坏:星穹铁道",
|
'name' : '崩坏:星穹铁道',
|
||||||
"url": "https://bbs.mihoyo.com/sr/"
|
'url' : 'https://bbs.mihoyo.com/sr/'
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
|
||||||
@ -58,26 +58,26 @@ def random_text(num: int) -> str:
|
|||||||
class MihoyoBBSCoin:
|
class MihoyoBBSCoin:
|
||||||
def __init__(self, cookies):
|
def __init__(self, cookies):
|
||||||
self.headers = {
|
self.headers = {
|
||||||
"DS": old_version_get_ds_token(True),
|
'DS' : old_version_get_ds_token(True),
|
||||||
"cookie": cookies,
|
'cookie' : cookies,
|
||||||
"x-rpc-client_type": "2",
|
'x-rpc-client_type' : '2',
|
||||||
"x-rpc-app_version": "2.7.0",
|
'x-rpc-app_version' : '2.7.0',
|
||||||
"x-rpc-sys_version": "6.0.1",
|
'x-rpc-sys_version' : '6.0.1',
|
||||||
"x-rpc-channel": "mihoyo",
|
'x-rpc-channel' : 'mihoyo',
|
||||||
"x-rpc-device_id": random_hex(32),
|
'x-rpc-device_id' : random_hex(32),
|
||||||
"x-rpc-device_name": random_text(random.randint(1, 10)),
|
'x-rpc-device_name' : random_text(random.randint(1, 10)),
|
||||||
"x-rpc-device_model": "Mi 10",
|
'x-rpc-device_model': 'Mi 10',
|
||||||
"Referer": "https://app.mihoyo.com",
|
'Referer' : 'https://app.mihoyo.com',
|
||||||
"Host": "bbs-api.mihoyo.com",
|
'Host' : 'bbs-api.mihoyo.com',
|
||||||
"User-Agent": "okhttp/4.8.0"
|
'User-Agent' : 'okhttp/4.8.0'
|
||||||
}
|
}
|
||||||
self.Task_do = {
|
self.Task_do = {
|
||||||
"bbs_Sign": False,
|
'bbs_Sign' : False,
|
||||||
"bbs_Read_posts": False,
|
'bbs_Read_posts' : False,
|
||||||
"bbs_Read_posts_num": 3,
|
'bbs_Read_posts_num': 3,
|
||||||
"bbs_Like_posts": False,
|
'bbs_Like_posts' : False,
|
||||||
"bbs_Like_posts_num": 5,
|
'bbs_Like_posts_num': 5,
|
||||||
"bbs_Share": False
|
'bbs_Share' : False
|
||||||
}
|
}
|
||||||
self.mihoyobbs_List_Use = []
|
self.mihoyobbs_List_Use = []
|
||||||
self.Today_getcoins = 0
|
self.Today_getcoins = 0
|
||||||
@ -92,145 +92,145 @@ class MihoyoBBSCoin:
|
|||||||
read = await self.read_posts()
|
read = await self.read_posts()
|
||||||
like = await self.like_posts()
|
like = await self.like_posts()
|
||||||
share = await self.share_post()
|
share = await self.share_post()
|
||||||
im = start + "\n" + sign + "\n" + read + "\n" + like + "\n" + share
|
im = start + '\n' + sign + '\n' + read + '\n' + like + '\n' + share
|
||||||
return im
|
return im
|
||||||
|
|
||||||
async def load_mihoyo_bbs_list_use(self):
|
async def load_mihoyo_bbs_list_use(self):
|
||||||
for i in [2, 5]:
|
for i in [2, 5]:
|
||||||
for k in mihoyobbs_List:
|
for k in mihoyobbs_List:
|
||||||
if i == int(k["id"]):
|
if i == int(k['id']):
|
||||||
self.mihoyobbs_List_Use.append(k)
|
self.mihoyobbs_List_Use.append(k)
|
||||||
|
|
||||||
# 获取任务列表,用来判断做了哪些任务
|
# 获取任务列表,用来判断做了哪些任务
|
||||||
async def get_tasks_list(self):
|
async def get_tasks_list(self):
|
||||||
# log.info("正在获取任务列表")
|
# log.info('正在获取任务列表')
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.get(url=bbs_Taskslist, headers=self.headers)
|
req = await client.get(url=bbs_Taskslist, headers=self.headers)
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if "err" in data["message"] or data["retcode"] == -100:
|
if 'err' in data['message'] or data['retcode'] == -100:
|
||||||
return "你的Cookies已失效。"
|
return '你的Cookies已失效。'
|
||||||
# log.error("获取任务列表失败,你的cookie可能已过期,请重新设置cookie。")
|
# log.error('获取任务列表失败,你的cookie可能已过期,请重新设置cookie。')
|
||||||
else:
|
else:
|
||||||
self.Today_getcoins = data["data"]["can_get_points"]
|
self.Today_getcoins = data['data']['can_get_points']
|
||||||
self.Today_have_getcoins = data["data"]["already_received_points"]
|
self.Today_have_getcoins = data['data']['already_received_points']
|
||||||
self.Have_coins = data["data"]["total_points"]
|
self.Have_coins = data['data']['total_points']
|
||||||
# 如果当日可获取米游币数量为0直接判断全部任务都完成了
|
# 如果当日可获取米游币数量为0直接判断全部任务都完成了
|
||||||
if self.Today_getcoins == 0:
|
if self.Today_getcoins == 0:
|
||||||
self.Task_do["bbs_Sign"] = True
|
self.Task_do['bbs_Sign'] = True
|
||||||
self.Task_do["bbs_Read_posts"] = True
|
self.Task_do['bbs_Read_posts'] = True
|
||||||
self.Task_do["bbs_Like_posts"] = True
|
self.Task_do['bbs_Like_posts'] = True
|
||||||
self.Task_do["bbs_Share"] = True
|
self.Task_do['bbs_Share'] = True
|
||||||
else:
|
else:
|
||||||
# 如果第0个大于或等于62则直接判定任务没做
|
# 如果第0个大于或等于62则直接判定任务没做
|
||||||
if data["data"]["states"][0]["mission_id"] >= 62:
|
if data['data']['states'][0]['mission_id'] >= 62:
|
||||||
# log.info(f"新的一天,今天可以获得{self.Today_getcoins}个米游币")
|
# log.info(f'新的一天,今天可以获得{self.Today_getcoins}个米游币')
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
# log.info(f"似乎还有任务没完成,今天还能获得{self.Today_getcoins}")
|
# log.info(f'似乎还有任务没完成,今天还能获得{self.Today_getcoins}')
|
||||||
for i in data["data"]["states"]:
|
for i in data['data']['states']:
|
||||||
# 58是讨论区签到
|
# 58是讨论区签到
|
||||||
if i["mission_id"] == 58:
|
if i['mission_id'] == 58:
|
||||||
if i["is_get_award"]:
|
if i['is_get_award']:
|
||||||
self.Task_do["bbs_Sign"] = True
|
self.Task_do['bbs_Sign'] = True
|
||||||
# 59是看帖子
|
# 59是看帖子
|
||||||
elif i["mission_id"] == 59:
|
elif i['mission_id'] == 59:
|
||||||
if i["is_get_award"]:
|
if i['is_get_award']:
|
||||||
self.Task_do["bbs_Read_posts"] = True
|
self.Task_do['bbs_Read_posts'] = True
|
||||||
else:
|
else:
|
||||||
self.Task_do["bbs_Read_posts_num"] -= i["happened_times"]
|
self.Task_do['bbs_Read_posts_num'] -= i['happened_times']
|
||||||
# 60是给帖子点赞
|
# 60是给帖子点赞
|
||||||
elif i["mission_id"] == 60:
|
elif i['mission_id'] == 60:
|
||||||
if i["is_get_award"]:
|
if i['is_get_award']:
|
||||||
self.Task_do["bbs_Like_posts"] = True
|
self.Task_do['bbs_Like_posts'] = True
|
||||||
else:
|
else:
|
||||||
self.Task_do["bbs_Like_posts_num"] -= i["happened_times"]
|
self.Task_do['bbs_Like_posts_num'] -= i['happened_times']
|
||||||
# 61是分享帖子
|
# 61是分享帖子
|
||||||
elif i["mission_id"] == 61:
|
elif i['mission_id'] == 61:
|
||||||
if i["is_get_award"]:
|
if i['is_get_award']:
|
||||||
self.Task_do["bbs_Share"] = True
|
self.Task_do['bbs_Share'] = True
|
||||||
# 分享帖子,是最后一个任务,到这里了下面都是一次性任务,直接跳出循环
|
# 分享帖子,是最后一个任务,到这里了下面都是一次性任务,直接跳出循环
|
||||||
break
|
break
|
||||||
return "开始执行~"
|
return '开始执行~'
|
||||||
|
|
||||||
# 获取要帖子列表
|
# 获取要帖子列表
|
||||||
async def get_list(self) -> list:
|
async def get_list(self) -> list:
|
||||||
temp_list = []
|
temp_list = []
|
||||||
print("正在获取帖子列表......")
|
print('正在获取帖子列表......')
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.get(url=bbs_Listurl.format(self.mihoyobbs_List_Use[0]["forumId"]), headers=self.headers)
|
req = await client.get(url=bbs_Listurl.format(self.mihoyobbs_List_Use[0]['forumId']), headers=self.headers)
|
||||||
data = req.json()
|
data = req.json()
|
||||||
for n in range(5):
|
for n in range(5):
|
||||||
temp_list.append([data["data"]["list"][n]["post"]["post_id"], data["data"]["list"][n]["post"]["subject"]])
|
temp_list.append([data['data']['list'][n]['post']['post_id'], data['data']['list'][n]['post']['subject']])
|
||||||
# log.info("已获取{}个帖子".format(len(temp_list)))
|
# log.info('已获取{}个帖子'.format(len(temp_list)))
|
||||||
return temp_list
|
return temp_list
|
||||||
|
|
||||||
# 进行签到操作
|
# 进行签到操作
|
||||||
async def signing(self):
|
async def signing(self):
|
||||||
if self.Task_do["bbs_Sign"]:
|
if self.Task_do['bbs_Sign']:
|
||||||
return "讨论区任务已经完成过了~"
|
return '讨论区任务已经完成过了~'
|
||||||
else:
|
else:
|
||||||
for i in self.mihoyobbs_List_Use:
|
for i in self.mihoyobbs_List_Use:
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.post(url=bbs_Signurl.format(i["id"]), data={}, headers=self.headers)
|
req = await client.post(url=bbs_Signurl.format(i['id']), data={}, headers=self.headers)
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if "err" not in data["message"]:
|
if 'err' not in data['message']:
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
else:
|
else:
|
||||||
return "你的Cookies已失效。"
|
return '你的Cookies已失效。'
|
||||||
return "已完成签到任务~"
|
return '已完成签到任务~'
|
||||||
|
|
||||||
# 看帖子
|
# 看帖子
|
||||||
async def read_posts(self):
|
async def read_posts(self):
|
||||||
if self.Task_do["bbs_Read_posts"]:
|
if self.Task_do['bbs_Read_posts']:
|
||||||
return "看帖任务已经完成过了~"
|
return '看帖任务已经完成过了~'
|
||||||
else:
|
else:
|
||||||
num_ok = 0
|
num_ok = 0
|
||||||
for i in range(self.Task_do["bbs_Read_posts_num"]):
|
for i in range(self.Task_do['bbs_Read_posts_num']):
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.get(url=bbs_Detailurl.format(self.postsList[i][0]), headers=self.headers)
|
req = await client.get(url=bbs_Detailurl.format(self.postsList[i][0]), headers=self.headers)
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if data["message"] == "OK":
|
if data['message'] == 'OK':
|
||||||
num_ok += 1
|
num_ok += 1
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
return "已完成看帖任务~共计成功{}次~".format(str(num_ok))
|
return '已完成看帖任务~共计成功{}次~'.format(str(num_ok))
|
||||||
|
|
||||||
# 点赞
|
# 点赞
|
||||||
async def like_posts(self):
|
async def like_posts(self):
|
||||||
if self.Task_do["bbs_Like_posts"]:
|
if self.Task_do['bbs_Like_posts']:
|
||||||
return "点赞任务已经完成过了~"
|
return '点赞任务已经完成过了~'
|
||||||
else:
|
else:
|
||||||
num_ok = 0
|
num_ok = 0
|
||||||
num_cancel = 0
|
num_cancel = 0
|
||||||
for i in range(self.Task_do["bbs_Like_posts_num"]):
|
for i in range(self.Task_do['bbs_Like_posts_num']):
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.post(url=bbs_Likeurl, headers=self.headers,
|
req = await client.post(url=bbs_Likeurl, headers=self.headers,
|
||||||
json={"post_id": self.postsList[i][0], "is_cancel": False})
|
json={'post_id': self.postsList[i][0], 'is_cancel': False})
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if data["message"] == "OK":
|
if data['message'] == 'OK':
|
||||||
num_ok += 1
|
num_ok += 1
|
||||||
# 判断取消点赞是否打开
|
# 判断取消点赞是否打开
|
||||||
if True:
|
if True:
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.post(url=bbs_Likeurl, headers=self.headers,
|
req = await client.post(url=bbs_Likeurl, headers=self.headers,
|
||||||
json={"post_id": self.postsList[i][0], "is_cancel": True})
|
json={'post_id': self.postsList[i][0], 'is_cancel': True})
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if data["message"] == "OK":
|
if data['message'] == 'OK':
|
||||||
num_cancel += 1
|
num_cancel += 1
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
return "已完成点赞任务~共计点赞{}次,取消点赞{}次~".format(str(num_ok), str(num_cancel))
|
return '已完成点赞任务~共计点赞{}次,取消点赞{}次~'.format(str(num_ok), str(num_cancel))
|
||||||
# 分享操作
|
# 分享操作
|
||||||
|
|
||||||
async def share_post(self):
|
async def share_post(self):
|
||||||
if self.Task_do["bbs_Share"]:
|
if self.Task_do['bbs_Share']:
|
||||||
return "分享任务已经完成过了~"
|
return '分享任务已经完成过了~'
|
||||||
else:
|
else:
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
async with AsyncClient() as client:
|
async with AsyncClient() as client:
|
||||||
req = await client.get(url=bbs_Shareurl.format(self.postsList[0][0]), headers=self.headers)
|
req = await client.get(url=bbs_Shareurl.format(self.postsList[0][0]), headers=self.headers)
|
||||||
data = req.json()
|
data = req.json()
|
||||||
if data["message"] == "OK":
|
if data['message'] == 'OK':
|
||||||
return "已完成分享任务~获得10米游币~"
|
return '已完成分享任务~获得10米游币~'
|
||||||
else:
|
else:
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
time.sleep(random.randint(2, 8))
|
time.sleep(random.randint(2, 8))
|
||||||
|
@ -19,50 +19,50 @@ INDEX_PATH = os.path.join(FILE2_PATH, 'index')
|
|||||||
Texture_PATH = os.path.join(FILE2_PATH, 'texture2d')
|
Texture_PATH = os.path.join(FILE2_PATH, 'texture2d')
|
||||||
|
|
||||||
avatar_json = {
|
avatar_json = {
|
||||||
"Albedo": "阿贝多",
|
'Albedo' : '阿贝多',
|
||||||
"Ambor": "安柏",
|
'Ambor' : '安柏',
|
||||||
"Barbara": "芭芭拉",
|
'Barbara' : '芭芭拉',
|
||||||
"Beidou": "北斗",
|
'Beidou' : '北斗',
|
||||||
"Bennett": "班尼特",
|
'Bennett' : '班尼特',
|
||||||
"Chongyun": "重云",
|
'Chongyun' : '重云',
|
||||||
"Diluc": "迪卢克",
|
'Diluc' : '迪卢克',
|
||||||
"Diona": "迪奥娜",
|
'Diona' : '迪奥娜',
|
||||||
"Eula": "优菈",
|
'Eula' : '优菈',
|
||||||
"Fischl": "菲谢尔",
|
'Fischl' : '菲谢尔',
|
||||||
"Ganyu": "甘雨",
|
'Ganyu' : '甘雨',
|
||||||
"Hutao": "胡桃",
|
'Hutao' : '胡桃',
|
||||||
"Jean": "琴",
|
'Jean' : '琴',
|
||||||
"Kazuha": "枫原万叶",
|
'Kazuha' : '枫原万叶',
|
||||||
"Kaeya": "凯亚",
|
'Kaeya' : '凯亚',
|
||||||
"Ayaka": "神里绫华",
|
'Ayaka' : '神里绫华',
|
||||||
"Keqing": "刻晴",
|
'Keqing' : '刻晴',
|
||||||
"Klee": "可莉",
|
'Klee' : '可莉',
|
||||||
"Lisa": "丽莎",
|
'Lisa' : '丽莎',
|
||||||
"Mona": "莫娜",
|
'Mona' : '莫娜',
|
||||||
"Ningguang": "凝光",
|
'Ningguang': '凝光',
|
||||||
"Noel": "诺艾尔",
|
'Noel' : '诺艾尔',
|
||||||
"Qiqi": "七七",
|
'Qiqi' : '七七',
|
||||||
"Razor": "雷泽",
|
'Razor' : '雷泽',
|
||||||
"Rosaria": "罗莎莉亚",
|
'Rosaria' : '罗莎莉亚',
|
||||||
"Sucrose": "砂糖",
|
'Sucrose' : '砂糖',
|
||||||
"Tartaglia": "达达利亚",
|
'Tartaglia': '达达利亚',
|
||||||
"Venti": "温迪",
|
'Venti' : '温迪',
|
||||||
"Xiangling": "香菱",
|
'Xiangling': '香菱',
|
||||||
"Xiao": "魈",
|
'Xiao' : '魈',
|
||||||
"Xingqiu": "行秋",
|
'Xingqiu' : '行秋',
|
||||||
"Xinyan": "辛焱",
|
'Xinyan' : '辛焱',
|
||||||
"Yanfei": "烟绯",
|
'Yanfei' : '烟绯',
|
||||||
"Zhongli": "钟离",
|
'Zhongli' : '钟离',
|
||||||
"Yoimiya": "宵宫",
|
'Yoimiya' : '宵宫',
|
||||||
"Sayu": "早柚",
|
'Sayu' : '早柚',
|
||||||
"Shogun": "雷电将军",
|
'Shogun' : '雷电将军',
|
||||||
"Aloy": "埃洛伊",
|
'Aloy' : '埃洛伊',
|
||||||
"Sara": "九条裟罗",
|
'Sara' : '九条裟罗',
|
||||||
"Kokomi": "珊瑚宫心海",
|
'Kokomi' : '珊瑚宫心海',
|
||||||
"Shenhe": "申鹤"
|
'Shenhe' : '申鹤'
|
||||||
}
|
}
|
||||||
|
|
||||||
daily_im = '''
|
daily_im = """
|
||||||
*数据刷新可能存在一定延迟,请以当前游戏实际数据为准{}
|
*数据刷新可能存在一定延迟,请以当前游戏实际数据为准{}
|
||||||
==============
|
==============
|
||||||
原粹树脂:{}/{}{}
|
原粹树脂:{}/{}{}
|
||||||
@ -72,9 +72,9 @@ daily_im = '''
|
|||||||
参量质变仪:{}
|
参量质变仪:{}
|
||||||
探索派遣:
|
探索派遣:
|
||||||
总数/完成/上限:{}/{}/{}
|
总数/完成/上限:{}/{}/{}
|
||||||
{}'''
|
{}"""
|
||||||
|
|
||||||
month_im = '''
|
month_im = """
|
||||||
==============
|
==============
|
||||||
{}
|
{}
|
||||||
UID:{}
|
UID:{}
|
||||||
@ -92,15 +92,15 @@ UID:{}
|
|||||||
上月获取摩拉:{}
|
上月获取摩拉:{}
|
||||||
==============
|
==============
|
||||||
原石收入组成:
|
原石收入组成:
|
||||||
{}=============='''
|
{}=============="""
|
||||||
|
|
||||||
weapon_im = '''【名称】:{}
|
weapon_im = """【名称】:{}
|
||||||
【类型】:{}
|
【类型】:{}
|
||||||
【稀有度】:{}
|
【稀有度】:{}
|
||||||
【介绍】:{}
|
【介绍】:{}
|
||||||
【攻击力】:{}{}{}'''
|
【攻击力】:{}{}{}"""
|
||||||
|
|
||||||
char_info_im = '''{}
|
char_info_im = """{}
|
||||||
【稀有度】:{}
|
【稀有度】:{}
|
||||||
【武器】:{}
|
【武器】:{}
|
||||||
【元素】:{}
|
【元素】:{}
|
||||||
@ -108,9 +108,9 @@ char_info_im = '''{}
|
|||||||
【生日】:{}
|
【生日】:{}
|
||||||
【命之座】:{}
|
【命之座】:{}
|
||||||
【cv】:{}
|
【cv】:{}
|
||||||
【介绍】:{}'''
|
【介绍】:{}"""
|
||||||
|
|
||||||
artifacts_im = '''【{}】
|
artifacts_im = """【{}】
|
||||||
【稀有度】:{}
|
【稀有度】:{}
|
||||||
【2件套】:{}
|
【2件套】:{}
|
||||||
【4件套】:{}
|
【4件套】:{}
|
||||||
@ -118,54 +118,54 @@ artifacts_im = '''【{}】
|
|||||||
【{}】:{}
|
【{}】:{}
|
||||||
【{}】:{}
|
【{}】:{}
|
||||||
【{}】:{}
|
【{}】:{}
|
||||||
【{}】:{}'''
|
【{}】:{}"""
|
||||||
|
|
||||||
food_im = '''【{}】
|
food_im = """【{}】
|
||||||
【稀有度】:{}
|
【稀有度】:{}
|
||||||
【食物类型】:{}
|
【食物类型】:{}
|
||||||
【食物类别】:{}
|
【食物类别】:{}
|
||||||
【效果】:{}
|
【效果】:{}
|
||||||
【介绍】:{}
|
【介绍】:{}
|
||||||
【材料】:
|
【材料】:
|
||||||
{}'''
|
{}"""
|
||||||
|
|
||||||
audio_json = '''{
|
audio_json = """{
|
||||||
"357":["357_01","357_02","357_03"],
|
'357':['357_01','357_02','357_03'],
|
||||||
"1000000":["1000000_01","1000000_02","1000000_03","1000000_04","1000000_05","1000000_06","1000000_07"],
|
'1000000':['1000000_01','1000000_02','1000000_03','1000000_04','1000000_05','1000000_06','1000000_07'],
|
||||||
"1000001":["1000001_01","1000001_02","1000001_03"],
|
'1000001':['1000001_01','1000001_02','1000001_03'],
|
||||||
"1000002":["1000002_01","1000002_02","1000002_03"],
|
'1000002':['1000002_01','1000002_02','1000002_03'],
|
||||||
"1000100":["1000100_01","1000100_02","1000100_03","1000100_04","1000100_05"],
|
'1000100':['1000100_01','1000100_02','1000100_03','1000100_04','1000100_05'],
|
||||||
"1000101":["1000101_01","1000101_02","1000101_03","1000101_04","1000101_05","1000101_06"],
|
'1000101':['1000101_01','1000101_02','1000101_03','1000101_04','1000101_05','1000101_06'],
|
||||||
"1000200":["1000200_01","1000200_02","1000200_03"],
|
'1000200':['1000200_01','1000200_02','1000200_03'],
|
||||||
"1010201":["1010201_01"],
|
'1010201':['1010201_01'],
|
||||||
"1000300":["1000300_01","1000300_02"],
|
'1000300':['1000300_01','1000300_02'],
|
||||||
"1000400":["1000400_01","1000400_02","1000400_03"],
|
'1000400':['1000400_01','1000400_02','1000400_03'],
|
||||||
"1000500":["1000500_01","1000500_02","1000500_03"],
|
'1000500':['1000500_01','1000500_02','1000500_03'],
|
||||||
"1010000":["1010000_01","1010000_02","1010000_03","1010000_04","1010000_05"],
|
'1010000':['1010000_01','1010000_02','1010000_03','1010000_04','1010000_05'],
|
||||||
"1010001":["1010001_01","1010001_02"],
|
'1010001':['1010001_01','1010001_02'],
|
||||||
"1010100":["1010100_01","1010100_02","1010100_03","1010100_04","1010100_05"],
|
'1010100':['1010100_01','1010100_02','1010100_03','1010100_04','1010100_05'],
|
||||||
"1010200":["1010200_01","1010200_02","1010200_03","1010200_04","1010200_05"],
|
'1010200':['1010200_01','1010200_02','1010200_03','1010200_04','1010200_05'],
|
||||||
"1010300":["1010300_01","1010300_02","1010300_03","1010300_04","1010300_05"],
|
'1010300':['1010300_01','1010300_02','1010300_03','1010300_04','1010300_05'],
|
||||||
"1010301":["1010301_01","1010301_02","1010301_03","1010301_04","1010301_05"],
|
'1010301':['1010301_01','1010301_02','1010301_03','1010301_04','1010301_05'],
|
||||||
"1010400":["1010400_01","1010400_02","1010400_03"],
|
'1010400':['1010400_01','1010400_02','1010400_03'],
|
||||||
"1020000":["1020000_01"]
|
'1020000':['1020000_01']
|
||||||
}'''
|
}"""
|
||||||
|
|
||||||
char_adv_im = '''【{}】
|
char_adv_im = """【{}】
|
||||||
【五星武器】:{}
|
【五星武器】:{}
|
||||||
【四星武器】:{}
|
【四星武器】:{}
|
||||||
【三星武器】:{}
|
【三星武器】:{}
|
||||||
【圣遗物】:
|
【圣遗物】:
|
||||||
{}'''
|
{}"""
|
||||||
|
|
||||||
|
|
||||||
async def weapon_adv(name):
|
async def weapon_adv(name):
|
||||||
char_adv_path = os.path.join(FILE_PATH, "Genshin All Char.xlsx")
|
char_adv_path = os.path.join(FILE_PATH, 'Genshin All Char.xlsx')
|
||||||
# char_adv_path = FILE_PATH
|
# char_adv_path = FILE_PATH
|
||||||
wb = load_workbook(char_adv_path)
|
wb = load_workbook(char_adv_path)
|
||||||
ws = wb.active
|
ws = wb.active
|
||||||
|
|
||||||
weapon_name = ""
|
weapon_name = ''
|
||||||
char_list = []
|
char_list = []
|
||||||
for c in range(2, 5):
|
for c in range(2, 5):
|
||||||
for r in range(2, 300):
|
for r in range(2, 300):
|
||||||
@ -177,19 +177,19 @@ async def weapon_adv(name):
|
|||||||
|
|
||||||
if char_list:
|
if char_list:
|
||||||
im = ','.join(char_list)
|
im = ','.join(char_list)
|
||||||
im = im + "可能会用到【{}】".format(weapon_name)
|
im = im + '可能会用到【{}】'.format(weapon_name)
|
||||||
else:
|
else:
|
||||||
im = "没有角色能使用【{}】".format(weapon_name)
|
im = '没有角色能使用【{}】'.format(weapon_name)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def char_adv(name):
|
async def char_adv(name):
|
||||||
char_name = None
|
char_name = None
|
||||||
char_adv_path = os.path.join(FILE_PATH, "Genshin All Char.xlsx")
|
char_adv_path = os.path.join(FILE_PATH, 'Genshin All Char.xlsx')
|
||||||
# char_adv_path = FILE_PATH
|
# char_adv_path = FILE_PATH
|
||||||
wb = load_workbook(char_adv_path)
|
wb = load_workbook(char_adv_path)
|
||||||
ws = wb.active
|
ws = wb.active
|
||||||
char_list = ws["A"]
|
char_list = ws['A']
|
||||||
index = None
|
index = None
|
||||||
for i in char_list:
|
for i in char_list:
|
||||||
if i.value:
|
if i.value:
|
||||||
@ -198,68 +198,68 @@ async def char_adv(name):
|
|||||||
index = i.row
|
index = i.row
|
||||||
char_name = i.value
|
char_name = i.value
|
||||||
if index:
|
if index:
|
||||||
weapon_5star = ""
|
weapon_5star = ''
|
||||||
for i in range(index, index + 5):
|
for i in range(index, index + 5):
|
||||||
if ws.cell(i, 2).value:
|
if ws.cell(i, 2).value:
|
||||||
weapon_5star += ws.cell(i, 2).value + ">"
|
weapon_5star += ws.cell(i, 2).value + '>'
|
||||||
if weapon_5star != "":
|
if weapon_5star != '':
|
||||||
weapon_5star = weapon_5star[:-1]
|
weapon_5star = weapon_5star[:-1]
|
||||||
else:
|
else:
|
||||||
weapon_5star = "无推荐"
|
weapon_5star = '无推荐'
|
||||||
|
|
||||||
weapon_4star = ""
|
weapon_4star = ''
|
||||||
for i in range(index, index + 5):
|
for i in range(index, index + 5):
|
||||||
if ws.cell(i, 3).value:
|
if ws.cell(i, 3).value:
|
||||||
weapon_4star += ws.cell(i, 3).value + ">"
|
weapon_4star += ws.cell(i, 3).value + '>'
|
||||||
if weapon_4star != "":
|
if weapon_4star != '':
|
||||||
weapon_4star = weapon_4star[:-1]
|
weapon_4star = weapon_4star[:-1]
|
||||||
else:
|
else:
|
||||||
weapon_4star = "无推荐"
|
weapon_4star = '无推荐'
|
||||||
|
|
||||||
weapon_3star = ""
|
weapon_3star = ''
|
||||||
for i in range(index, index + 5):
|
for i in range(index, index + 5):
|
||||||
if ws.cell(i, 4).value:
|
if ws.cell(i, 4).value:
|
||||||
weapon_3star += ws.cell(i, 4).value + ">"
|
weapon_3star += ws.cell(i, 4).value + '>'
|
||||||
if weapon_3star != "":
|
if weapon_3star != '':
|
||||||
weapon_3star = weapon_3star[:-1]
|
weapon_3star = weapon_3star[:-1]
|
||||||
else:
|
else:
|
||||||
weapon_3star = "无推荐"
|
weapon_3star = '无推荐'
|
||||||
|
|
||||||
artifacts = ""
|
artifacts = ''
|
||||||
for i in range(index, index + 5):
|
for i in range(index, index + 5):
|
||||||
if ws.cell(i, 5).value:
|
if ws.cell(i, 5).value:
|
||||||
if ws.cell(i, 6).value:
|
if ws.cell(i, 6).value:
|
||||||
artifacts += ws.cell(i, 5).value + "*2" + ws.cell(i, 6).value + "*2" + "\n"
|
artifacts += ws.cell(i, 5).value + '*2' + ws.cell(i, 6).value + '*2' + '\n'
|
||||||
else:
|
else:
|
||||||
artifacts += ws.cell(i, 5).value + "*4" + "\n"
|
artifacts += ws.cell(i, 5).value + '*4' + '\n'
|
||||||
|
|
||||||
if artifacts != "":
|
if artifacts != '':
|
||||||
artifacts = artifacts[:-1]
|
artifacts = artifacts[:-1]
|
||||||
else:
|
else:
|
||||||
artifacts = "无推荐"
|
artifacts = '无推荐'
|
||||||
|
|
||||||
im = char_adv_im.format(char_name, weapon_5star, weapon_4star, weapon_3star, artifacts)
|
im = char_adv_im.format(char_name, weapon_5star, weapon_4star, weapon_3star, artifacts)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def deal_ck(mes, qid):
|
async def deal_ck(mes, qid):
|
||||||
if "stoken" in mes:
|
if 'stoken' in mes:
|
||||||
login_ticket = re.search(r"login_ticket=([0-9a-zA-Z]+)", mes).group(0).split('=')[1]
|
login_ticket = re.search(r'login_ticket=([0-9a-zA-Z]+)', mes).group(0).split('=')[1]
|
||||||
uid = await select_db(qid, "uid")
|
uid = await select_db(qid, 'uid')
|
||||||
# mys_id = re.search(r"login_uid=([0-9]+)", mes).group(0).split('=')[1]
|
# mys_id = re.search(r'login_uid=([0-9]+)', mes).group(0).split('=')[1]
|
||||||
ck = await owner_cookies(uid[0])
|
ck = await owner_cookies(uid[0])
|
||||||
mys_id = re.search(r"account_id=(\d*)", ck).group(0).split('=')[1]
|
mys_id = re.search(r'account_id=(\d*)', ck).group(0).split('=')[1]
|
||||||
raw_data = await get_stoken_by_login_ticket(login_ticket, mys_id)
|
raw_data = await get_stoken_by_login_ticket(login_ticket, mys_id)
|
||||||
stoken = raw_data["data"]["list"][0]["token"]
|
stoken = raw_data['data']['list'][0]['token']
|
||||||
s_cookies = "stuid={};stoken={}".format(mys_id, stoken)
|
s_cookies = 'stuid={};stoken={}'.format(mys_id, stoken)
|
||||||
await stoken_db(s_cookies, uid[0])
|
await stoken_db(s_cookies, uid[0])
|
||||||
return "添加Stoken成功!"
|
return '添加Stoken成功!'
|
||||||
else:
|
else:
|
||||||
aid = re.search(r"account_id=(\d*)", mes)
|
aid = re.search(r'account_id=(\d*)', mes)
|
||||||
mysid_data = aid.group(0).split('=')
|
mysid_data = aid.group(0).split('=')
|
||||||
mysid = mysid_data[1]
|
mysid = mysid_data[1]
|
||||||
cookie = ';'.join(filter(lambda x: x.split('=')[0] in [
|
cookie = ';'.join(filter(lambda x: x.split('=')[0] in [
|
||||||
"cookie_token", "account_id"], [i.strip() for i in mes.split(';')]))
|
'cookie_token', 'account_id'], [i.strip() for i in mes.split(';')]))
|
||||||
mys_data = await get_mihoyo_bbs_info(mysid, cookie)
|
mys_data = await get_mihoyo_bbs_info(mysid, cookie)
|
||||||
for i in mys_data['data']['list']:
|
for i in mys_data['data']['list']:
|
||||||
if i['game_id'] != 2:
|
if i['game_id'] != 2:
|
||||||
@ -270,7 +270,7 @@ async def deal_ck(mes, qid):
|
|||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
c.execute("DELETE from CookiesCache where uid=? or mysid = ?", (uid, mysid))
|
c.execute('DELETE from CookiesCache where uid=? or mysid = ?', (uid, mysid))
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -296,8 +296,8 @@ async def award(uid):
|
|||||||
group_str = ''
|
group_str = ''
|
||||||
for i in data['data']['month_data']['group_by']:
|
for i in data['data']['month_data']['group_by']:
|
||||||
group_str = group_str + \
|
group_str = group_str + \
|
||||||
i['action'] + ":" + str(i['num']) + \
|
i['action'] + ':' + str(i['num']) + \
|
||||||
"(" + str(i['percent']) + "%)" + '\n'
|
'(' + str(i['percent']) + '%)' + '\n'
|
||||||
|
|
||||||
im = month_im.format(nickname, uid, day_stone, day_mora, lastday_stone, lastday_mora,
|
im = month_im.format(nickname, uid, day_stone, day_mora, lastday_stone, lastday_mora,
|
||||||
month_stone, month_mora, lastmonth_stone, lastmonth_mora, group_str)
|
month_stone, month_mora, lastmonth_stone, lastmonth_mora, group_str)
|
||||||
@ -322,73 +322,73 @@ async def audio_wiki(name, message):
|
|||||||
if _audioid in tmp_json:
|
if _audioid in tmp_json:
|
||||||
tmp_json[_audioid].remove(audioid1)
|
tmp_json[_audioid].remove(audioid1)
|
||||||
|
|
||||||
if name == "列表":
|
if name == '列表':
|
||||||
imgmes = 'base64://' + b64encode(open(os.path.join(INDEX_PATH, "语音.png"), "rb").read()).decode()
|
imgmes = 'base64://' + b64encode(open(os.path.join(INDEX_PATH, '语音.png'), 'rb').read()).decode()
|
||||||
return imgmes
|
return imgmes
|
||||||
elif name == "":
|
elif name == '':
|
||||||
return "请输入角色名。"
|
return '请输入角色名。'
|
||||||
else:
|
else:
|
||||||
audioid = re.findall(r"[0-9]+", message)[0]
|
audioid = re.findall(r'[0-9]+', message)[0]
|
||||||
try:
|
try:
|
||||||
audio = await get(audioid)
|
audio = await get(audioid)
|
||||||
except:
|
except:
|
||||||
return "语音获取失败"
|
return '语音获取失败'
|
||||||
if audio:
|
if audio:
|
||||||
audios = 'base64://' + b64encode(audio.getvalue()).decode()
|
audios = 'base64://' + b64encode(audio.getvalue()).decode()
|
||||||
return audios
|
return audios
|
||||||
else:
|
else:
|
||||||
return "没有找到语音,请检查语音ID与角色名是否正确,如无误则可能未收录该语音"
|
return '没有找到语音,请检查语音ID与角色名是否正确,如无误则可能未收录该语音'
|
||||||
|
|
||||||
|
|
||||||
async def artifacts_wiki(name):
|
async def artifacts_wiki(name):
|
||||||
data = await get_misc_info("artifacts", name)
|
data = await get_misc_info('artifacts', name)
|
||||||
if "errcode" in data:
|
if 'errcode' in data:
|
||||||
im = "该圣遗物不存在。"
|
im = '该圣遗物不存在。'
|
||||||
else:
|
else:
|
||||||
star = ""
|
star = ''
|
||||||
for i in data["rarity"]:
|
for i in data['rarity']:
|
||||||
star = star + i + "星、"
|
star = star + i + '星、'
|
||||||
star = star[:-1]
|
star = star[:-1]
|
||||||
im = artifacts_im.format(data["name"], star, data["2pc"], data["4pc"], data["flower"]["name"],
|
im = artifacts_im.format(data['name'], star, data['2pc'], data['4pc'], data['flower']['name'],
|
||||||
data["flower"]["description"],
|
data['flower']['description'],
|
||||||
data["plume"]["name"], data["plume"]["description"], data["sands"]["name"],
|
data['plume']['name'], data['plume']['description'], data['sands']['name'],
|
||||||
data["sands"]["description"],
|
data['sands']['description'],
|
||||||
data["goblet"]["name"], data["goblet"]["description"], data["circlet"]["name"],
|
data['goblet']['name'], data['goblet']['description'], data['circlet']['name'],
|
||||||
data["circlet"]["description"])
|
data['circlet']['description'])
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def foods_wiki(name):
|
async def foods_wiki(name):
|
||||||
data = await get_misc_info("foods", name)
|
data = await get_misc_info('foods', name)
|
||||||
if "errcode" in data:
|
if 'errcode' in data:
|
||||||
im = "该食物不存在。"
|
im = '该食物不存在。'
|
||||||
else:
|
else:
|
||||||
ingredients = ""
|
ingredients = ''
|
||||||
food_temp = {}
|
food_temp = {}
|
||||||
for i in data["ingredients"]:
|
for i in data['ingredients']:
|
||||||
if i["name"] not in food_temp:
|
if i['name'] not in food_temp:
|
||||||
food_temp[i["name"]] = i["count"]
|
food_temp[i['name']] = i['count']
|
||||||
else:
|
else:
|
||||||
food_temp[i["name"]] = food_temp[i["name"]] + i["count"]
|
food_temp[i['name']] = food_temp[i['name']] + i['count']
|
||||||
for i in food_temp:
|
for i in food_temp:
|
||||||
ingredients += i + ":" + str(food_temp[i]) + "\n"
|
ingredients += i + ':' + str(food_temp[i]) + '\n'
|
||||||
ingredients = ingredients[:-1]
|
ingredients = ingredients[:-1]
|
||||||
im = food_im.format(data["name"], data["rarity"], data["foodtype"], data["foodfilter"], data["effect"],
|
im = food_im.format(data['name'], data['rarity'], data['foodtype'], data['foodfilter'], data['effect'],
|
||||||
data["description"], ingredients)
|
data['description'], ingredients)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def enemies_wiki(name):
|
async def enemies_wiki(name):
|
||||||
raw_data = await get_misc_info("enemies", name)
|
raw_data = await get_misc_info('enemies', name)
|
||||||
if "errcode" in raw_data:
|
if 'errcode' in raw_data:
|
||||||
im = "该原魔不存在。"
|
im = '该原魔不存在。'
|
||||||
else:
|
else:
|
||||||
reward = ""
|
reward = ''
|
||||||
for i in raw_data["rewardpreview"]:
|
for i in raw_data['rewardpreview']:
|
||||||
reward += i["name"] + ":" + str(i["count"]) if "count" in i.keys() else i["name"] + ":" + "可能"
|
reward += i['name'] + ':' + str(i['count']) if 'count' in i.keys() else i['name'] + ':' + '可能'
|
||||||
reward += "\n"
|
reward += '\n'
|
||||||
im = "【{}】\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}".format(raw_data["name"], raw_data["specialname"],
|
im = '【{}】\n——{}——\n类型:{}\n信息:{}\n掉落物:\n{}'.format(raw_data['name'], raw_data['specialname'],
|
||||||
raw_data["category"], raw_data["description"], reward)
|
raw_data['category'], raw_data['description'], reward)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
@ -404,43 +404,43 @@ async def sign(uid):
|
|||||||
sign_info['total_sign_day']) - 1]['name']
|
sign_info['total_sign_day']) - 1]['name']
|
||||||
getnum = sign_list['data']['awards'][int(
|
getnum = sign_list['data']['awards'][int(
|
||||||
sign_info['total_sign_day']) - 1]['cnt']
|
sign_info['total_sign_day']) - 1]['cnt']
|
||||||
get_im = f"本次签到获得{getitem}x{getnum}"
|
get_im = f'本次签到获得{getitem}x{getnum}'
|
||||||
if status == "OK" and sign_info['is_sign'] == True:
|
if status == 'OK' and sign_info['is_sign'] == True:
|
||||||
mes_im = "签到成功"
|
mes_im = '签到成功'
|
||||||
else:
|
else:
|
||||||
mes_im = status
|
mes_im = status
|
||||||
sign_missed = sign_info['sign_cnt_missed']
|
sign_missed = sign_info['sign_cnt_missed']
|
||||||
im = mes_im + "!" + "\n" + get_im + "\n" + f"本月漏签次数:{sign_missed}"
|
im = mes_im + '!' + '\n' + get_im + '\n' + f'本月漏签次数:{sign_missed}'
|
||||||
except:
|
except:
|
||||||
im = "签到失败,请检查Cookies是否失效。"
|
im = '签到失败,请检查Cookies是否失效。'
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
# 统计状态函数
|
# 统计状态函数
|
||||||
async def daily(mode="push", uid=None):
|
async def daily(mode='push', uid=None):
|
||||||
def seconds2hours(seconds: int) -> str:
|
def seconds2hours(seconds: int) -> str:
|
||||||
m, s = divmod(int(seconds), 60)
|
m, s = divmod(int(seconds), 60)
|
||||||
h, m = divmod(m, 60)
|
h, m = divmod(m, 60)
|
||||||
return "%02d:%02d:%02d" % (h, m, s)
|
return '%02d:%02d:%02d' % (h, m, s)
|
||||||
|
|
||||||
temp_list = []
|
temp_list = []
|
||||||
conn = sqlite3.connect('ID_DATA.db')
|
conn = sqlite3.connect('ID_DATA.db')
|
||||||
c = conn.cursor()
|
c = conn.cursor()
|
||||||
c_data = None
|
c_data = None
|
||||||
if mode == "push":
|
if mode == 'push':
|
||||||
cursor = c.execute(
|
cursor = c.execute(
|
||||||
"SELECT * FROM NewCookiesTable WHERE StatusA != ?", ("off",))
|
'SELECT * FROM NewCookiesTable WHERE StatusA != ?', ('off',))
|
||||||
c_data = cursor.fetchall()
|
c_data = cursor.fetchall()
|
||||||
elif mode == "ask":
|
elif mode == 'ask':
|
||||||
c_data = ([uid, 0, 0, 0, 0, 0, 0],)
|
c_data = ([uid, 0, 0, 0, 0, 0, 0],)
|
||||||
|
|
||||||
for row in c_data:
|
for row in c_data:
|
||||||
raw_data = await get_daily_data(str(row[0]))
|
raw_data = await get_daily_data(str(row[0]))
|
||||||
if raw_data["retcode"] != 0:
|
if raw_data['retcode'] != 0:
|
||||||
temp_list.append(
|
temp_list.append(
|
||||||
{"qid": row[2], "gid": row[3], "message": "你的推送状态有误;可能是uid绑定错误或没有在米游社打开“实时便筏”功能。"})
|
{'qid': row[2], 'gid': row[3], 'message': '你的推送状态有误;可能是uid绑定错误或没有在米游社打开“实时便筏”功能。'})
|
||||||
else:
|
else:
|
||||||
dailydata = raw_data["data"]
|
dailydata = raw_data['data']
|
||||||
current_resin = dailydata['current_resin']
|
current_resin = dailydata['current_resin']
|
||||||
|
|
||||||
current_expedition_num = dailydata['current_expedition_num']
|
current_expedition_num = dailydata['current_expedition_num']
|
||||||
@ -455,32 +455,32 @@ async def daily(mode="push", uid=None):
|
|||||||
avatar_name: str = avatar
|
avatar_name: str = avatar
|
||||||
|
|
||||||
if expedition['status'] == 'Finished':
|
if expedition['status'] == 'Finished':
|
||||||
expedition_info.append(f"{avatar_name} 探索完成")
|
expedition_info.append(f'{avatar_name} 探索完成')
|
||||||
finished_expedition_num += 1
|
finished_expedition_num += 1
|
||||||
else:
|
else:
|
||||||
remained_timed: str = seconds2hours(
|
remained_timed: str = seconds2hours(
|
||||||
expedition['remained_time'])
|
expedition['remained_time'])
|
||||||
expedition_info.append(
|
expedition_info.append(
|
||||||
f"{avatar_name} 剩余时间{remained_timed}")
|
f'{avatar_name} 剩余时间{remained_timed}')
|
||||||
|
|
||||||
if dailydata['transformer']['recovery_time']['reached']:
|
if dailydata['transformer']['recovery_time']['reached']:
|
||||||
transformer_status = "可用"
|
transformer_status = '可用'
|
||||||
else:
|
else:
|
||||||
transformer_time = dailydata['transformer']['recovery_time']
|
transformer_time = dailydata['transformer']['recovery_time']
|
||||||
transformer_status = "还剩{}天{}小时{}分钟可用".format(transformer_time['Day'], transformer_time['Hour'],
|
transformer_status = '还剩{}天{}小时{}分钟可用'.format(transformer_time['Day'], transformer_time['Hour'],
|
||||||
transformer_time['Minute'])
|
transformer_time['Minute'])
|
||||||
|
|
||||||
# 推送条件检查,在指令查询时 row[6] 为 0 ,而自动推送时 row[6] 为 140,这样保证用指令查询时必回复
|
# 推送条件检查,在指令查询时 row[6] 为 0 ,而自动推送时 row[6] 为 140,这样保证用指令查询时必回复
|
||||||
# 说实话我仔细看了一会才理解…
|
# 说实话我仔细看了一会才理解…
|
||||||
if current_resin >= row[6] or dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
|
if current_resin >= row[6] or dailydata['max_home_coin'] - dailydata['current_home_coin'] <= 100:
|
||||||
tip = ''
|
tip = ''
|
||||||
tips = []
|
tips = []
|
||||||
if current_resin >= row[6] != 0:
|
if current_resin >= row[6] != 0:
|
||||||
tips.append("你的树脂快满了!")
|
tips.append('你的树脂快满了!')
|
||||||
if dailydata["max_home_coin"] - dailydata["current_home_coin"] <= 100:
|
if dailydata['max_home_coin'] - dailydata['current_home_coin'] <= 100:
|
||||||
tips.append("你的洞天宝钱快满了!")
|
tips.append('你的洞天宝钱快满了!')
|
||||||
if finished_expedition_num == current_expedition_num:
|
if finished_expedition_num == current_expedition_num:
|
||||||
tips.append("你的所有探索派遣完成了!") # emmmm
|
tips.append('你的所有探索派遣完成了!') # emmmm
|
||||||
if tips:
|
if tips:
|
||||||
tips.insert(0, '\n==============')
|
tips.insert(0, '\n==============')
|
||||||
tip = '\n'.join(tips)
|
tip = '\n'.join(tips)
|
||||||
@ -505,13 +505,13 @@ async def daily(mode="push", uid=None):
|
|||||||
dailydata['remain_resin_discount_num']
|
dailydata['remain_resin_discount_num']
|
||||||
|
|
||||||
home_coin = f'{dailydata["current_home_coin"]}/{dailydata["max_home_coin"]}'
|
home_coin = f'{dailydata["current_home_coin"]}/{dailydata["max_home_coin"]}'
|
||||||
if dailydata["current_home_coin"] < dailydata["max_home_coin"]:
|
if dailydata['current_home_coin'] < dailydata['max_home_coin']:
|
||||||
coin_rec_time = seconds2hours(int(dailydata["home_coin_recovery_time"]))
|
coin_rec_time = seconds2hours(int(dailydata['home_coin_recovery_time']))
|
||||||
coin_add_speed = math.ceil((dailydata["max_home_coin"] - dailydata["current_home_coin"]) / (
|
coin_add_speed = math.ceil((dailydata['max_home_coin'] - dailydata['current_home_coin']) / (
|
||||||
int(dailydata["home_coin_recovery_time"]) / 60 / 60))
|
int(dailydata['home_coin_recovery_time']) / 60 / 60))
|
||||||
home_coin += f'({coin_rec_time} 约{coin_add_speed}/h)'
|
home_coin += f'({coin_rec_time} 约{coin_add_speed}/h)'
|
||||||
|
|
||||||
expedition_data = "\n".join(expedition_info)
|
expedition_data = '\n'.join(expedition_info)
|
||||||
send_mes = daily_im.format(tip, current_resin, max_resin, rec_time, finished_task_num, total_task_num,
|
send_mes = daily_im.format(tip, current_resin, max_resin, rec_time, finished_task_num, total_task_num,
|
||||||
is_extra_got, used_resin_discount_num,
|
is_extra_got, used_resin_discount_num,
|
||||||
resin_discount_num_limit, home_coin, transformer_status,
|
resin_discount_num_limit, home_coin, transformer_status,
|
||||||
@ -519,12 +519,12 @@ async def daily(mode="push", uid=None):
|
|||||||
max_expedition_num, expedition_data)
|
max_expedition_num, expedition_data)
|
||||||
|
|
||||||
temp_list.append(
|
temp_list.append(
|
||||||
{"qid": row[2], "gid": row[3], "message": send_mes})
|
{'qid': row[2], 'gid': row[3], 'message': send_mes})
|
||||||
return temp_list
|
return temp_list
|
||||||
|
|
||||||
|
|
||||||
async def mihoyo_coin(qid, s_cookies=None):
|
async def mihoyo_coin(qid, s_cookies=None):
|
||||||
uid = await select_db(qid, mode="uid")
|
uid = await select_db(qid, mode='uid')
|
||||||
uid = uid[0]
|
uid = uid[0]
|
||||||
if s_cookies is None:
|
if s_cookies is None:
|
||||||
s_cookies = await get_stoken(uid)
|
s_cookies = await get_stoken(uid)
|
||||||
@ -533,12 +533,12 @@ async def mihoyo_coin(qid, s_cookies=None):
|
|||||||
get_coin = coin.MihoyoBBSCoin(s_cookies)
|
get_coin = coin.MihoyoBBSCoin(s_cookies)
|
||||||
im = await get_coin.task_run()
|
im = await get_coin.task_run()
|
||||||
else:
|
else:
|
||||||
im = "你还没有绑定Stoken~"
|
im = '你还没有绑定Stoken~'
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def get_event_pic():
|
async def get_event_pic():
|
||||||
img_path = os.path.join(FILE2_PATH, "event.jpg")
|
img_path = os.path.join(FILE2_PATH, 'event.jpg')
|
||||||
while True:
|
while True:
|
||||||
if os.path.exists(img_path):
|
if os.path.exists(img_path):
|
||||||
f = open(img_path, 'rb')
|
f = open(img_path, 'rb')
|
||||||
@ -553,68 +553,68 @@ async def get_event_pic():
|
|||||||
|
|
||||||
async def weapon_wiki(name, level=None):
|
async def weapon_wiki(name, level=None):
|
||||||
data = await get_weapon_info(name)
|
data = await get_weapon_info(name)
|
||||||
if "errcode" in data:
|
if 'errcode' in data:
|
||||||
im = "武器不存在。"
|
im = '武器不存在。'
|
||||||
elif level:
|
elif level:
|
||||||
data2 = await get_weapon_info(name, level)
|
data2 = await get_weapon_info(name, level)
|
||||||
if data["substat"] != "":
|
if data['substat'] != '':
|
||||||
sp = data["substat"] + ":" + '%.1f%%' % (data2["specialized"] * 100) \
|
sp = data['substat'] + ':' + '%.1f%%' % (data2['specialized'] * 100) \
|
||||||
if data["substat"] != "元素精通" else data["substat"] + ":" + str(math.floor(data2["specialized"]))
|
if data['substat'] != '元素精通' else data['substat'] + ':' + str(math.floor(data2['specialized']))
|
||||||
else:
|
else:
|
||||||
sp = ""
|
sp = ''
|
||||||
im = (data["name"] + "\n等级:" + str(data2["level"]) + "(突破" + str(data2["ascension"]) + ")" +
|
im = (data['name'] + '\n等级:' + str(data2['level']) + '(突破' + str(data2['ascension']) + ')' +
|
||||||
"\n攻击力:" + str(round(data2["attack"])) + "\n" + sp)
|
'\n攻击力:' + str(round(data2['attack'])) + '\n' + sp)
|
||||||
else:
|
else:
|
||||||
name = data['name']
|
name = data['name']
|
||||||
_type = data['weapontype']
|
_type = data['weapontype']
|
||||||
star = data['rarity'] + "星"
|
star = data['rarity'] + '星'
|
||||||
info = data['description']
|
info = data['description']
|
||||||
atk = str(data['baseatk'])
|
atk = str(data['baseatk'])
|
||||||
sub_name = data['substat']
|
sub_name = data['substat']
|
||||||
if data['subvalue'] != "":
|
if data['subvalue'] != '':
|
||||||
sub_val = (data['subvalue'] +
|
sub_val = (data['subvalue'] +
|
||||||
'%') if sub_name != '元素精通' else data['subvalue']
|
'%') if sub_name != '元素精通' else data['subvalue']
|
||||||
sub = "\n" + "【" + sub_name + "】" + sub_val
|
sub = '\n' + '【' + sub_name + '】' + sub_val
|
||||||
else:
|
else:
|
||||||
sub = ""
|
sub = ''
|
||||||
|
|
||||||
if data['effectname'] != "":
|
if data['effectname'] != '':
|
||||||
raw_effect = data['effect']
|
raw_effect = data['effect']
|
||||||
rw_ef = []
|
rw_ef = []
|
||||||
for i in range(len(data['r1'])):
|
for i in range(len(data['r1'])):
|
||||||
now = ''
|
now = ''
|
||||||
for j in range(1, 6):
|
for j in range(1, 6):
|
||||||
now = now + data['r{}'.format(j)][i] + "/"
|
now = now + data['r{}'.format(j)][i] + '/'
|
||||||
now = now[:-1]
|
now = now[:-1]
|
||||||
rw_ef.append(now)
|
rw_ef.append(now)
|
||||||
raw_effect = raw_effect.format(*rw_ef)
|
raw_effect = raw_effect.format(*rw_ef)
|
||||||
effect = "\n" + "【" + data['effectname'] + "】" + ":" + raw_effect
|
effect = '\n' + '【' + data['effectname'] + '】' + ':' + raw_effect
|
||||||
else:
|
else:
|
||||||
effect = ""
|
effect = ''
|
||||||
im = weapon_im.format(name, _type, star, info, atk,
|
im = weapon_im.format(name, _type, star, info, atk,
|
||||||
sub, effect)
|
sub, effect)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
|
|
||||||
async def char_wiki(name, mode="char", level=None):
|
async def char_wiki(name, mode='char', level=None):
|
||||||
im = ''
|
im = ''
|
||||||
data = await get_char_info(name, mode, level if mode == "char" else None)
|
data = await get_char_info(name, mode, level if mode == 'char' else None)
|
||||||
if mode == "char":
|
if mode == 'char':
|
||||||
if isinstance(data, list):
|
if isinstance(data, list):
|
||||||
im = ','.join(data)
|
im = ','.join(data)
|
||||||
elif "errcode" in data:
|
elif 'errcode' in data:
|
||||||
im = "不存在该角色或类型。"
|
im = '不存在该角色或类型。'
|
||||||
elif level:
|
elif level:
|
||||||
data2 = await get_char_info(name, mode)
|
data2 = await get_char_info(name, mode)
|
||||||
sp = data2["substat"] + ":" + '%.1f%%' % (data["specialized"] * 100) if data2["substat"] != "元素精通" else \
|
sp = data2['substat'] + ':' + '%.1f%%' % (data['specialized'] * 100) if data2['substat'] != '元素精通' else \
|
||||||
data2["substat"] + ":" + str(math.floor(data["specialized"]))
|
data2['substat'] + ':' + str(math.floor(data['specialized']))
|
||||||
im = (data2["name"] + "\n等级:" + str(data["level"]) + "\n血量:" + str(math.floor(data["hp"])) +
|
im = (data2['name'] + '\n等级:' + str(data['level']) + '\n血量:' + str(math.floor(data['hp'])) +
|
||||||
"\n攻击力:" + str(math.floor(data["attack"])) + "\n防御力:" + str(math.floor(data["defense"])) +
|
'\n攻击力:' + str(math.floor(data['attack'])) + '\n防御力:' + str(math.floor(data['defense'])) +
|
||||||
"\n" + sp)
|
'\n' + sp)
|
||||||
else:
|
else:
|
||||||
name = data['title'] + ' — ' + data['name']
|
name = data['title'] + ' — ' + data['name']
|
||||||
star = data['rarity']
|
star = data['rarity']
|
||||||
_type = data["weapontype"]
|
_type = data['weapontype']
|
||||||
element = data['element']
|
element = data['element']
|
||||||
up_val = data['substat']
|
up_val = data['substat']
|
||||||
bdday = data['birthday']
|
bdday = data['birthday']
|
||||||
@ -623,142 +623,142 @@ async def char_wiki(name, mode="char", level=None):
|
|||||||
info = data['description']
|
info = data['description']
|
||||||
im = char_info_im.format(
|
im = char_info_im.format(
|
||||||
name, star, _type, element, up_val, bdday, polar, cv, info)
|
name, star, _type, element, up_val, bdday, polar, cv, info)
|
||||||
elif mode == "costs":
|
elif mode == 'costs':
|
||||||
if isinstance(data[1], list):
|
if isinstance(data[1], list):
|
||||||
im = ','.join(data[1])
|
im = ','.join(data[1])
|
||||||
elif "errcode" in data[1]:
|
elif 'errcode' in data[1]:
|
||||||
im = "不存在该角色或类型。"
|
im = '不存在该角色或类型。'
|
||||||
else:
|
else:
|
||||||
im = "【天赋材料(一份)】\n{}\n【突破材料】\n{}"
|
im = '【天赋材料(一份)】\n{}\n【突破材料】\n{}'
|
||||||
im1 = ""
|
im1 = ''
|
||||||
im2 = ""
|
im2 = ''
|
||||||
|
|
||||||
talent_temp = {}
|
talent_temp = {}
|
||||||
talent_cost = data[1]
|
talent_cost = data[1]
|
||||||
for i in talent_cost.values():
|
for i in talent_cost.values():
|
||||||
for j in i:
|
for j in i:
|
||||||
if j["name"] not in talent_temp:
|
if j['name'] not in talent_temp:
|
||||||
talent_temp[j["name"]] = j["count"]
|
talent_temp[j['name']] = j['count']
|
||||||
else:
|
else:
|
||||||
talent_temp[j["name"]] = talent_temp[j["name"]] + j["count"]
|
talent_temp[j['name']] = talent_temp[j['name']] + j['count']
|
||||||
for k in talent_temp:
|
for k in talent_temp:
|
||||||
im1 = im1 + k + ":" + str(talent_temp[k]) + "\n"
|
im1 = im1 + k + ':' + str(talent_temp[k]) + '\n'
|
||||||
|
|
||||||
temp = {}
|
temp = {}
|
||||||
cost = data[0]
|
cost = data[0]
|
||||||
for i in range(1, 7):
|
for i in range(1, 7):
|
||||||
for j in cost["ascend{}".format(i)]:
|
for j in cost['ascend{}'.format(i)]:
|
||||||
if j["name"] not in temp:
|
if j['name'] not in temp:
|
||||||
temp[j["name"]] = j["count"]
|
temp[j['name']] = j['count']
|
||||||
else:
|
else:
|
||||||
temp[j["name"]] = temp[j["name"]] + j["count"]
|
temp[j['name']] = temp[j['name']] + j['count']
|
||||||
|
|
||||||
for k in temp:
|
for k in temp:
|
||||||
im2 = im2 + k + ":" + str(temp[k]) + "\n"
|
im2 = im2 + k + ':' + str(temp[k]) + '\n'
|
||||||
|
|
||||||
im = im.format(im1, im2)
|
im = im.format(im1, im2)
|
||||||
elif mode == "constellations":
|
elif mode == 'constellations':
|
||||||
if "errcode" in data:
|
if 'errcode' in data:
|
||||||
im = "不存在该角色或命座数量。"
|
im = '不存在该角色或命座数量。'
|
||||||
else:
|
else:
|
||||||
im = "【" + data["c{}".format(level)]['name'] + "】" + ":" + \
|
im = '【' + data['c{}'.format(level)]['name'] + '】' + ':' + \
|
||||||
"\n" + data["c{}".format(level)]['effect'].replace("*", "")
|
'\n' + data['c{}'.format(level)]['effect'].replace('*', '')
|
||||||
elif mode == "talents":
|
elif mode == 'talents':
|
||||||
if "errcode" in data:
|
if 'errcode' in data:
|
||||||
im = "不存在该角色。"
|
im = '不存在该角色。'
|
||||||
else:
|
else:
|
||||||
if 7 >= int(level) > 0:
|
if 7 >= int(level) > 0:
|
||||||
if int(level) <= 3:
|
if int(level) <= 3:
|
||||||
if level == "1":
|
if level == '1':
|
||||||
data = data["combat1"]
|
data = data['combat1']
|
||||||
elif level == "2":
|
elif level == '2':
|
||||||
data = data["combat2"]
|
data = data['combat2']
|
||||||
elif level == "3":
|
elif level == '3':
|
||||||
data = data["combat3"]
|
data = data['combat3']
|
||||||
skill_name = data["name"]
|
skill_name = data['name']
|
||||||
skill_info = data["info"]
|
skill_info = data['info']
|
||||||
skill_detail = ""
|
skill_detail = ''
|
||||||
|
|
||||||
"""
|
"""
|
||||||
for i in data["attributes"]["parameters"]:
|
for i in data['attributes']['parameters']:
|
||||||
temp = ""
|
temp = ''
|
||||||
for k in data["attributes"]["parameters"][i]:
|
for k in data['attributes']['parameters'][i]:
|
||||||
if str(k).count('.') == 1:
|
if str(k).count('.') == 1:
|
||||||
temp += "%.2f%%" % (k * 100) + "/"
|
temp += '%.2f%%' % (k * 100) + '/'
|
||||||
else:
|
else:
|
||||||
temp = k
|
temp = k
|
||||||
break
|
break
|
||||||
data["attributes"]["parameters"][i] = temp[:-1]
|
data['attributes']['parameters'][i] = temp[:-1]
|
||||||
|
|
||||||
for i in data["attributes"]["labels"]:
|
for i in data['attributes']['labels']:
|
||||||
#i = i.replace("{","{{")
|
#i = i.replace('{','{{')
|
||||||
i = re.sub(r':[a-zA-Z0-9]+}', "}", i)
|
i = re.sub(r':[a-zA-Z0-9]+}', '}', i)
|
||||||
#i.replace(r':[a-zA-Z0-9]+}','}')
|
#i.replace(r':[a-zA-Z0-9]+}','}')
|
||||||
skill_detail += i + "\n"
|
skill_detail += i + '\n'
|
||||||
|
|
||||||
skill_detail = skill_detail.format(**data["attributes"]["parameters"])
|
skill_detail = skill_detail.format(**data['attributes']['parameters'])
|
||||||
"""
|
"""
|
||||||
mes_list = []
|
mes_list = []
|
||||||
parameters = []
|
parameters = []
|
||||||
add_switch = True
|
add_switch = True
|
||||||
for i in data["attributes"]["parameters"]:
|
for i in data['attributes']['parameters']:
|
||||||
for index, j in enumerate(data["attributes"]["parameters"][i]):
|
for index, j in enumerate(data['attributes']['parameters'][i]):
|
||||||
if add_switch:
|
if add_switch:
|
||||||
parameters.append({})
|
parameters.append({})
|
||||||
if str(j).count('.') == 1 and j <= 20:
|
if str(j).count('.') == 1 and j <= 20:
|
||||||
parameters[index].update({i: "%.2f%%" % (j * 100)})
|
parameters[index].update({i: '%.2f%%' % (j * 100)})
|
||||||
elif str(j).count('.') == 1:
|
elif str(j).count('.') == 1:
|
||||||
parameters[index].update({i: "%.2f" % (j * 100)})
|
parameters[index].update({i: '%.2f' % (j * 100)})
|
||||||
else:
|
else:
|
||||||
parameters[index].update({i: j})
|
parameters[index].update({i: j})
|
||||||
add_switch = False
|
add_switch = False
|
||||||
|
|
||||||
for k in data["attributes"]["labels"]:
|
for k in data['attributes']['labels']:
|
||||||
k = re.sub(r':[a-zA-Z0-9]+}', "}", k)
|
k = re.sub(r':[a-zA-Z0-9]+}', '}', k)
|
||||||
skill_detail += k + "\n"
|
skill_detail += k + '\n'
|
||||||
|
|
||||||
skill_detail = skill_detail[:-1]
|
skill_detail = skill_detail[:-1]
|
||||||
|
|
||||||
for i in range(1, 10):
|
for i in range(1, 10):
|
||||||
if i % 2 != 0:
|
if i % 2 != 0:
|
||||||
skill_info = skill_info.replace("**", "「", 1)
|
skill_info = skill_info.replace('**', '「', 1)
|
||||||
else:
|
else:
|
||||||
skill_info = skill_info.replace("**", "」", 1)
|
skill_info = skill_info.replace('**', '」', 1)
|
||||||
|
|
||||||
mes_list.append({
|
mes_list.append({
|
||||||
"type": "node",
|
'type': 'node',
|
||||||
"data": {
|
'data': {
|
||||||
"name": "小仙",
|
'name' : '小仙',
|
||||||
"uin": "3399214199",
|
'uin' : '3399214199',
|
||||||
"content": "【" + skill_name + "】" + "\n" + skill_info
|
'content': '【' + skill_name + '】' + '\n' + skill_info
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
for index, i in enumerate(parameters):
|
for index, i in enumerate(parameters):
|
||||||
mes = skill_detail.format(**i)
|
mes = skill_detail.format(**i)
|
||||||
node_data = {
|
node_data = {
|
||||||
"type": "node",
|
'type': 'node',
|
||||||
"data": {
|
'data': {
|
||||||
"name": "小仙",
|
'name' : '小仙',
|
||||||
"uin": "3399214199",
|
'uin' : '3399214199',
|
||||||
"content": "lv." + str(index + 1) + "\n" + mes
|
'content': 'lv.' + str(index + 1) + '\n' + mes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
mes_list.append(node_data)
|
mes_list.append(node_data)
|
||||||
im = mes_list
|
im = mes_list
|
||||||
|
|
||||||
else:
|
else:
|
||||||
if level == "4":
|
if level == '4':
|
||||||
data = data["passive1"]
|
data = data['passive1']
|
||||||
elif level == "5":
|
elif level == '5':
|
||||||
data = data["passive2"]
|
data = data['passive2']
|
||||||
elif level == "6":
|
elif level == '6':
|
||||||
data = data["passive3"]
|
data = data['passive3']
|
||||||
elif level == "7":
|
elif level == '7':
|
||||||
data = data["passive4"]
|
data = data['passive4']
|
||||||
skill_name = data["name"]
|
skill_name = data['name']
|
||||||
skill_info = data["info"]
|
skill_info = data['info']
|
||||||
im = "【{}】\n{}".format(skill_name, skill_info)
|
im = '【{}】\n{}'.format(skill_name, skill_info)
|
||||||
else:
|
else:
|
||||||
im = "不存在该天赋。"
|
im = '不存在该天赋。'
|
||||||
return im
|
return im
|
||||||
|
Loading…
x
Reference in New Issue
Block a user