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