diff --git a/mihoyo_libs/get_data.py b/mihoyo_libs/get_data.py index 10347422..b77ef6af 100644 --- a/mihoyo_libs/get_data.py +++ b/mihoyo_libs/get_data.py @@ -319,6 +319,30 @@ async def cookies_db(uid, cookies, qid): conn.commit() conn.close() +async def stoken_db(s_cookies,uid): + conn = sqlite3.connect('ID_DATA.db') + c = conn.cursor() + columns = [i[1] for i in c.execute('PRAGMA table_info(NewCookiesTable)')] + + if "Stoken" not in columns: + c.execute('ALTER TABLE NewCookiesTable ADD COLUMN Stoken TEXT') + + c.execute("UPDATE NewCookiesTable SET Stoken = ? WHERE UID=?", (s_cookies, int(uid))) + + conn.commit() + conn.close() + +async def get_stoken(uid): + conn = sqlite3.connect('ID_DATA.db') + c = conn.cursor() + try: + cursor = c.execute("SELECT * FROM NewCookiesTable WHERE UID = ?", (uid,)) + c_data = cursor.fetchall() + stoken = c_data[0][8] + except: + return + + return stoken async def owner_cookies(uid): conn = sqlite3.connect('ID_DATA.db') @@ -346,8 +370,11 @@ def md5(text): return md5_func.hexdigest() -def old_version_get_ds_token(): - n = "h8w582wxwgqvahcdkpvdhbh2w9casgfl" +def old_version_get_ds_token(mysbbs = False): + if mysbbs: + n = "fd3ykrh7o1j54g581upo1tvpam0dsgtf" + else: + n = "h8w582wxwgqvahcdkpvdhbh2w9casgfl" i = str(int(time.time())) r = ''.join(random.sample(string.ascii_lowercase + string.digits, 6)) c = md5("salt=" + n + "&t=" + i + "&r=" + r) @@ -365,6 +392,17 @@ def get_ds_token(q="", b=None): c = md5("salt=" + s + "&t=" + t + "&r=" + r + "&b=" + br + "&q=" + q) return t + "," + r + "," + c +async def get_stoken_by_login_ticket(loginticket,mys_id): + async with AsyncClient() as client: + req = await client.get( + url="https://api-takumi.mihoyo.com/auth/api/getMultiTokenByLoginTicket", + params={ + "login_ticket": loginticket, + "token_types": "3", + "uid": mys_id + } + ) + return req.json() async def get_daily_data(uid, server_id="cn_gf01"): if uid[0] == '5': @@ -387,7 +425,6 @@ async def get_daily_data(uid, server_id="cn_gf01"): } ) data = json.loads(req.text) - # print(data) return data except requests.exceptions.SSLError: try: diff --git a/mihoyo_libs/get_image.py b/mihoyo_libs/get_image.py index 86133b8e..a484b847 100644 --- a/mihoyo_libs/get_image.py +++ b/mihoyo_libs/get_image.py @@ -1300,6 +1300,200 @@ async def draw_pic(uid, nickname, image=None, mode=2, role_level=None): resultmes = imgmes return resultmes +async def draw_info_pic(uid,image = None): + + def seconds2hours(seconds: int) -> str: + m, s = divmod(int(seconds), 60) + h, m = divmod(m, 60) + return "%02d:%02d:%02d" % (h, m, s) + + #获取数据 + award_data = await get_award(uid) + daily_data = await get_daily_data(uid) + daily_data = daily_data["data"] + + nickname = award_data['data']['nickname'] + + # 获取背景图片 + bg2_path = os.path.join(BG_PATH, random.choice([x for x in os.listdir(BG_PATH) + if os.path.isfile(os.path.join(BG_PATH, x))])) + + if image: + image_data = image.group(2) + edit_bg = Image.open(BytesIO(get(image_data).content)) + else: + edit_bg = Image.open(bg2_path) + + # 获取背景主色 + q = edit_bg.quantize(colors=3, method=2) + bg_num_temp = 0 + for i in range(0, 3): + bg = tuple(q.getpalette()[i * 3:(i * 3) + 3]) + bg_num = bg[0] + bg[1] + bg[2] + if bg_num >= bg_num_temp: + bg_num_temp = bg_num + bg_color = (bg[0], bg[1], bg[2]) + + # 通过背景主色(bg_color)确定文字主色 + r = 140 + if max(bg_color) > 255 - r: + r *= -1 + new_color = (math.floor(bg_color[0] + r if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + r if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + r if bg_color[2] + r <= 255 else 255)) + + # 确定texture2D路径 + info1_path = os.path.join(TEXT_PATH, "info_1.png") + info2_path = os.path.join(TEXT_PATH, "info_2.png") + info3_path = os.path.join(TEXT_PATH, "info_3.png") + + avatar_bg_path = os.path.join(TEXT_PATH, "avatar_bg.png") + avatar_fg_path = os.path.join(TEXT_PATH, "avatar_fg.png") + + all_mask_path = os.path.join(TEXT_PATH, "All_Mask.png") + + # 确定整体图片的长宽 + based_w = 900 + based_h = 1470 + based_scale = '%.3f' % (based_w / based_h) + + # 通过确定的长宽比,缩放背景图片 + w, h = edit_bg.size + scale_f = '%.3f' % (w / h) + new_w = math.ceil(based_h * float(scale_f)) + new_h = math.ceil(based_w / float(scale_f)) + if scale_f > based_scale: + bg_img2 = edit_bg.resize((new_w, based_h), Image.ANTIALIAS) + else: + bg_img2 = edit_bg.resize((based_w, new_h), Image.ANTIALIAS) + bg_img = bg_img2.crop((0, 0, 900, based_h)) + + # 转换遮罩的颜色、大小匹配,并paste上去 + all_mask = Image.open(all_mask_path).resize(bg_img.size, Image.ANTIALIAS) + all_mask_img = Image.new("RGBA", (based_w, based_h), bg_color) + bg_img.paste(all_mask_img, (0, 0), all_mask) + + # 操作图片 + info1 = Image.open(info1_path) + info2 = Image.open(info2_path) + info3 = Image.open(info3_path) + avatar_bg = Image.open(avatar_bg_path) + avatar_fg = Image.open(avatar_fg_path) + + avatar_bg_color = Image.new("RGBA", (316, 100), bg_color) + bg_img.paste(avatar_bg_color, (113, 98), avatar_bg) + bg_img.paste(avatar_fg, (114, 95), avatar_fg) + + info1_color = Image.new("RGBA", (900, 1300), bg_color) + bg_img.paste(info1_color, (0, 0), info1) + + info2_color = Image.new("RGBA", (900, 1300), new_color) + bg_img.paste(info2_color, (0, 0), info2) + + bg_img.paste(info3, (0, 0), info3) + + + text_draw = ImageDraw.Draw(bg_img) + + #用户信息 + text_draw.text((220, 137), f"{nickname}", new_color, genshin_font(32),anchor="lm") + text_draw.text((235, 170), 'UID ' + f"{uid}", new_color, genshin_font(14),anchor="lm") + + #本日原石/摩拉 + text_draw.text((715, 148), f"{award_data['data']['day_data']['current_primogems']}/{award_data['data']['day_data']['last_primogems']}", new_color, genshin_font(28),anchor="lm") + text_draw.text((715, 185), f"{award_data['data']['day_data']['current_mora']}/{award_data['data']['day_data']['last_mora']}", new_color, genshin_font(28),anchor="lm") + + #本月原石/摩拉 + text_draw.text((762, 287), f"{award_data['data']['month_data']['current_primogems']}", new_color, genshin_font(21),anchor="lm") + text_draw.text((762, 323), f"{award_data['data']['month_data']['current_mora']}", new_color, genshin_font(21),anchor="lm") + + #上月原石/摩拉 + text_draw.text((762, 359), f"{award_data['data']['month_data']['last_primogems']}", new_color, genshin_font(21),anchor="lm") + text_draw.text((762, 395), f"{award_data['data']['month_data']['last_mora']}", new_color, genshin_font(21),anchor="lm") + + #收入比例 + for index,i in enumerate(award_data['data']['month_data']['group_by']): + text_draw.text((721, 445 + index * 32), f"{str(i['num'])}({str(i['percent'])}%)", new_color, genshin_font(21),anchor="lm") + + #基本四项 + text_draw.text((415, 314), f"{daily_data['current_resin']}/{daily_data['max_resin']}", new_color, genshin_font(28),anchor="lm") + text_draw.text((415, 408), f'{daily_data["current_home_coin"]}/{daily_data["max_home_coin"]}', new_color, genshin_font(28),anchor="lm") + text_draw.text((415, 503), f"{daily_data['finished_task_num']}/{daily_data['total_task_num']}", new_color, genshin_font(28),anchor="lm") + text_draw.text((415, 597), f"{str(daily_data['resin_discount_num_limit'] - daily_data['remain_resin_discount_num'])}/{daily_data['resin_discount_num_limit']}", new_color, genshin_font(28),anchor="lm") + + #树脂恢复时间计算 + resin_recovery_time = seconds2hours( + daily_data['resin_recovery_time']) + next_resin_rec_time = seconds2hours( + 8 * 60 - ((daily_data['max_resin'] - daily_data['current_resin']) * 8 * 60 - int( + daily_data['resin_recovery_time']))) + rec_time = f' ({next_resin_rec_time}/{resin_recovery_time})' + + #洞天宝钱时间计算 + coin_rec_time = seconds2hours(int(daily_data["home_coin_recovery_time"])) + coin_add_speed = math.ceil((daily_data["max_home_coin"] - daily_data["current_home_coin"]) / ( + int(daily_data["home_coin_recovery_time"]) / 60 / 60)) + coin = f'({coin_rec_time} 约{coin_add_speed}/h)' + + if daily_data['is_extra_task_reward_received']: + daily_task_status = "「每日委托」奖励已领取" + else: + daily_task_status = "「每日委托」奖励未领取" + + #详细信息 + text_draw.text((190, 331), f"将于{rec_time}后全部恢复", new_color, genshin_font(18),anchor="lm") + text_draw.text((190, 425), f"预计{coin}后达到储存上限", new_color, genshin_font(18),anchor="lm") + text_draw.text((190, 518), f"{daily_task_status}", new_color, genshin_font(18),anchor="lm") + text_draw.text((190, 614), f"本周剩余消耗减半次数", new_color, genshin_font(18),anchor="lm") + + #派遣图片准备 + char_bg_path = os.path.join(TEXT_PATH, "char_bg.png") + + char_bg = Image.open(char_bg_path) + + char_color = (math.floor(bg_color[0] + 10 if bg_color[0] + r <= 255 else 255), + math.floor(bg_color[1] + 10 if bg_color[1] + r <= 255 else 255), + math.floor(bg_color[2] + 10 if bg_color[2] + r <= 255 else 255)) + + charset_mask = Image.new("RGBA", (900, 130), char_color) + + #派遣 + for index,i in enumerate(daily_data["expeditions"]): + if not os.path.exists(os.path.join(CHAR_IMG_PATH, f"UI_AvatarIcon_{i['avatar_side_icon'].split('_')[-1][:-4]}@2x.png")): + get_char_img_pic(f"https://upload-bbs.mihoyo.com/game_record/genshin/character_image/UI_AvatarIcon_{i['avatar_side_icon'].split('_')[-1][:-4]}@2x.png") + char_stand_img = os.path.join(CHAR_IMG_PATH, f"UI_AvatarIcon_{i['avatar_side_icon'].split('_')[-1][:-4]}@2x.png") + char_stand = Image.open(char_stand_img) + char_stand_mask = Image.open(os.path.join(TEXT_PATH, "stand_mask.png")) + charpic = Image.new("RGBA", (900, 130)) + + charpic_temp = Image.new("RGBA", (900, 130)) + charpic_temp.paste(char_stand, (395, -99), char_stand_mask) + char_icon = Image.open(BytesIO(get(i['avatar_side_icon']).content)) + + char_icon_scale = char_icon.resize((140,140),Image.ANTIALIAS) + charpic.paste(charset_mask, (0, 0), char_bg) + charpic.paste(char_icon_scale, (63, -26), char_icon_scale) + charpic.paste(charpic_temp, (0, 0), charpic_temp) + + charpic_draw = ImageDraw.Draw(charpic) + + if i['status'] == 'Finished': + charpic_draw.text((200, 65), f"探索完成", new_color, genshin_font(24),anchor="lm") + else: + remained_timed: str = seconds2hours(i['remained_time']) + charpic_draw.text((200, 65), f"剩余时间 {remained_timed}", new_color, genshin_font(24),anchor="lm") + + bg_img.paste(charpic, (0,748 + 133*index), charpic) + + end_pic = Image.open(os.path.join(TEXT_PATH,"abyss_3.png")) + bg_img.paste(end_pic,(0,1430),end_pic) + + bg_img = bg_img.convert('RGB') + result_buffer = BytesIO() + bg_img.save(result_buffer, format='JPEG', subsampling=0, quality=90) + imgmes = 'base64://' + b64encode(result_buffer.getvalue()).decode() + resultmes = imgmes + return resultmes def create_rounded_rectangle_mask(rectangle, radius): solid_fill = (50, 50, 50, 255) diff --git a/mihoyo_libs/get_mihoyo_bbs_coin.py b/mihoyo_libs/get_mihoyo_bbs_coin.py new file mode 100644 index 00000000..d057f7d8 --- /dev/null +++ b/mihoyo_libs/get_mihoyo_bbs_coin.py @@ -0,0 +1,239 @@ +import time +import random +import string + +from httpx import AsyncClient + +from .get_data import old_version_get_ds_token,random_hex + +Today_getcoins = 0 +Today_have_getcoins = 0 # 这个变量以后可能会用上,先留着了 +Have_coins = 0 + + +# 米游社的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 + +mihoyobbs_List = [{ + "id": "1", + "forumId": "1", + "name": "崩坏3", + "url": "https://bbs.mihoyo.com/bh3/" +}, { + "id": "2", + "forumId": "26", + "name": "原神", + "url": "https://bbs.mihoyo.com/ys/" +}, { + "id": "3", + "forumId": "30", + "name": "崩坏2", + "url": "https://bbs.mihoyo.com/bh2/" +}, { + "id": "4", + "forumId": "37", + "name": "未定事件簿", + "url": "https://bbs.mihoyo.com/wd/" +}, { + "id": "5", + "forumId": "34", + "name": "大别野", + "url": "https://bbs.mihoyo.com/dby/" +}, { + "id": "6", + "forumId": "52", + "name": "崩坏:星穹铁道", + "url": "https://bbs.mihoyo.com/sr/" +}] + +def random_text(num: int) -> str: + return ''.join(random.sample(string.ascii_lowercase + string.digits, num)) + +class mihoyobbs_coin: + 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" + } + 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 + } + self.mihoyobbs_List_Use = [] + + async def task_run(self): + await self.Load_Mihoyobbs_List_Use() + start = await self.Get_taskslist() + self.postsList = await self.get_list() + sign = await self.signing() + read = await self.read_posts() + like = await self.Likeposts() + share = await self.share_post() + im = start + "\n" + sign + "\n" + read + "\n" + like + "\n" + share + return im + + async def Load_Mihoyobbs_List_Use(self): + for i in [2,5]: + for k in mihoyobbs_List: + if i == int(k["id"]): + self.mihoyobbs_List_Use.append(k) + + # 获取任务列表,用来判断做了哪些任务 + async def Get_taskslist(self): + global Today_getcoins + global Today_have_getcoins + global Have_coins + #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。") + else: + Today_getcoins = data["data"]["can_get_points"] + Today_have_getcoins = data["data"]["already_received_points"] + Have_coins = data["data"]["total_points"] + # 如果当日可获取米游币数量为0直接判断全部任务都完成了 + if 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 + else: + # 如果第0个大于或等于62则直接判定任务没做 + if data["data"]["states"][0]["mission_id"] >= 62: + #log.info(f"新的一天,今天可以获得{Today_getcoins}个米游币") + pass + else: + #log.info(f"似乎还有任务没完成,今天还能获得{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 + # 59是看帖子 + 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"] + # 60是给帖子点赞 + 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"] + # 61是分享帖子 + elif i["mission_id"] == 61: + if i["is_get_award"]: + self.Task_do["bbs_Share"] = True + # 分享帖子,是最后一个任务,到这里了下面都是一次性任务,直接跳出循环 + break + return "开始执行~" + + # 获取要帖子列表 + async def get_list(self) -> list: + temp_list = [] + print("正在获取帖子列表......") + async with AsyncClient() as client: + 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))) + return temp_list + + # 进行签到操作 + async def signing(self): + if self.Task_do["bbs_Sign"]: + return "讨论区任务已经完成过了~" + else: + num_ok = 0 + 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) + data = req.json() + if "err" not in data["message"]: + num_ok += 1 + time.sleep(random.randint(2, 8)) + else: + return "你的Cookies已失效。" + return "已完成签到任务~" + + + # 看帖子 + async def read_posts(self): + if self.Task_do["bbs_Read_posts"]: + return "看帖任务已经完成过了~" + else: + num_ok = 0 + 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": + num_ok += 1 + time.sleep(random.randint(2, 8)) + return "已完成看帖任务~共计成功{}次~".foramt(num_ok) + # 点赞 + async def Likeposts(self): + 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"]): + 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}) + data = req.json() + 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}) + data = req.json() + if data["message"] == "OK": + num_cancel += 1 + time.sleep(random.randint(2, 8)) + return "已完成点赞任务~共计点赞{}次,取消点赞{}次~".foramt(num_ok,num_cancel) + # 分享操作 + + async def share_post(self): + 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米游币~" + else: + time.sleep(random.randint(2, 8)) + time.sleep(random.randint(2, 8)) \ No newline at end of file diff --git a/mihoyo_libs/get_mihoyo_bbs_data.py b/mihoyo_libs/get_mihoyo_bbs_data.py index a5978eeb..b1ee532e 100644 --- a/mihoyo_libs/get_mihoyo_bbs_data.py +++ b/mihoyo_libs/get_mihoyo_bbs_data.py @@ -1,6 +1,7 @@ import json import math import os +import sys import random import re import sqlite3 @@ -10,7 +11,10 @@ from io import BytesIO import requests +sys.path.append(os.path.dirname(os.path.abspath(__file__))) from .get_data import * +from .get_image import draw_event_pic +import get_mihoyo_bbs_coin as coin FILE_PATH = os.path.dirname(__file__) FILE2_PATH = os.path.join(FILE_PATH, 'mihoyo_bbs') @@ -235,30 +239,43 @@ async def char_adv(name): return im async def deal_ck(mes, qid): - 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(';')])) - mys_data = await get_mihoyo_bbs_info(mysid, cookie) - for i in mys_data['data']['list']: - if i['game_id'] != 2: - mys_data['data']['list'].remove(i) - uid = mys_data['data']['list'][0]['game_role_id'] + 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] + 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) + await stoken_db(s_cookies,uid[0]) + return "添加Stoken成功!" + else: + 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(';')])) + mys_data = await get_mihoyo_bbs_info(mysid, cookie) + for i in mys_data['data']['list']: + if i['game_id'] != 2: + mys_data['data']['list'].remove(i) + uid = mys_data['data']['list'][0]['game_role_id'] - conn = sqlite3.connect('ID_DATA.db') - c = conn.cursor() + conn = sqlite3.connect('ID_DATA.db') + c = conn.cursor() - try: - c.execute("DELETE from CookiesCache where uid=? or mysid = ?", (uid, mysid)) - except: - pass + try: + c.execute("DELETE from CookiesCache where uid=? or mysid = ?", (uid, mysid)) + except: + pass - conn.commit() - conn.close() - - await cookies_db(uid, cookie, qid) + conn.commit() + conn.close() + await cookies_db(uid, cookie, qid) + return f'添加Cookies成功!\nCookies属于个人重要信息,如果你是在不知情的情况下添加,请马上修改米游社账户密码,保护个人隐私!\n————\n' \ + f'如果需要【开启自动签到】和【开启推送】还需要使用命令“绑定uid”绑定你的uid。\n例如:绑定uid123456789。' async def award(uid): data = await get_award(uid) @@ -483,6 +500,29 @@ async def daily(mode="push", uid=None): {"qid": row[2], "gid": row[3], "message": send_mes}) return temp_list +async def mihoyo_coin(qid): + uid = await select_db(qid, mode="uid") + uid = uid[0] + s_cookies = await get_stoken(uid) + if s_cookies: + get_coin = coin.mihoyobbs_coin(s_cookies) + im = await get_coin.task_run() + else: + im = "你还没有绑定Stoken~" + return im + +async def get_event_pic(): + img_path = os.path.join(FILE2_PATH, "event.jpg") + while True: + if os.path.exists(img_path): + f = open(img_path, 'rb') + ls_f = b64encode(f.read()).decode() + img_mes = 'base64://' + ls_f + f.close() + break + else: + await draw_event_pic() + return img_mes async def weapon_wiki(name, level=None): data = await get_weapon_info(name) diff --git a/mihoyo_libs/mihoyo_bbs/texture2d/All_Mask.png b/mihoyo_libs/mihoyo_bbs/texture2d/All_Mask.png index 845e4f7f..dbaf7703 100644 Binary files a/mihoyo_libs/mihoyo_bbs/texture2d/All_Mask.png and b/mihoyo_libs/mihoyo_bbs/texture2d/All_Mask.png differ diff --git a/mihoyo_libs/mihoyo_bbs/texture2d/info_1.png b/mihoyo_libs/mihoyo_bbs/texture2d/info_1.png new file mode 100644 index 00000000..5018c686 Binary files /dev/null and b/mihoyo_libs/mihoyo_bbs/texture2d/info_1.png differ diff --git a/mihoyo_libs/mihoyo_bbs/texture2d/info_2.png b/mihoyo_libs/mihoyo_bbs/texture2d/info_2.png new file mode 100644 index 00000000..c9df9cdf Binary files /dev/null and b/mihoyo_libs/mihoyo_bbs/texture2d/info_2.png differ diff --git a/mihoyo_libs/mihoyo_bbs/texture2d/info_3.png b/mihoyo_libs/mihoyo_bbs/texture2d/info_3.png new file mode 100644 index 00000000..6276c2af Binary files /dev/null and b/mihoyo_libs/mihoyo_bbs/texture2d/info_3.png differ