def draw_lottery(self): for i in range(60, 80): response = bilibili().get_lotterylist(i) res = response.json() if res['code'] == 0: temp = response.json()['data']['title'] if "测试" in temp: print("检测到疑似钓鱼类测试抽奖,默认不参与,请自行判断抽奖可参与性") # print(url) else: check = len(response.json()['data']['typeB']) for g in range(0, check): join_end_time = response.json( )['data']['typeB'][g]['join_end_time'] join_start_time = response.json( )['data']['typeB'][g]['join_start_time'] ts = CurrentTime() if int(join_end_time) > int(ts) > int(join_start_time): response1 = bilibili().get_gift_of_lottery(i, g) print( "当前时间:", time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))) print("参与实物抽奖回显:", response1.json()) else: pass else: break
async def login_new(self): if bilibili().dic_bilibili['saved-session']['cookie']: Printer().printer(f"复用cookie", "Info", "green") bilibili().load_session(bilibili().dic_bilibili['saved-session']) return True else: return self.login()
def login(self): username = str(bilibili().dic_bilibili['account']['username']) password = str(bilibili().dic_bilibili['account']['password']) if username != "": response = bilibili().request_getkey() value = response.json()['data'] key = value['key'] Hash = str(value['hash']) username, password = bilibili().calc_name_passw(key, Hash, username, password) response = self.normal_login(username, password) while response.json()['code'] == -105: response = self.login_with_captcha(username, password) try: access_key = response.json()['data']['token_info']['access_token'] cookie = (response.json()['data']['cookie_info']['cookies']) cookie_format = "" for i in range(0, len(cookie)): cookie_format = cookie_format + cookie[i]['name'] + "=" + cookie[i]['value'] + ";" bilibili().dic_bilibili['csrf'] = cookie[0]['value'] bilibili().dic_bilibili['access_key'] = access_key bilibili().dic_bilibili['cookie'] = cookie_format bilibili().dic_bilibili['uid'] = cookie[1]['value'] bilibili().dic_bilibili['pcheaders']['cookie'] = cookie_format bilibili().dic_bilibili['appheaders']['cookie'] = cookie_format dic_saved_session = { 'csrf': cookie[0]['value'], 'access_key': access_key, 'cookie': cookie_format, 'uid': cookie[1]['value'] } configloader.write2bilibili(dic_saved_session) Printer().printlist_append(['join_lottery', '', 'user', "登录成功"], True) except: Printer().printlist_append(['join_lottery', '', 'user', "登录失败,错误信息为:", response.json()['message']], True)
def link_sign(self): response = bilibili().get_grouplist() check = len(response.json()['data']['list']) group_id_list = [] owner_uid_list = [] for i in range(0, check): group_id = response.json()['data']['list'][i]['group_id'] owner_uid = response.json()['data']['list'][i]['owner_uid'] group_id_list.append(group_id) owner_uid_list.append(owner_uid) for (i1, i2) in zip(group_id_list, owner_uid_list): response = bilibili().assign_group(i1, i2) if response.json()['code'] == 0: if (response.json()['data']['status']) == 1: Printer().printlist_append( ['join_lottery', '', 'user', "# 应援团 %s 已应援过" % (i1)]) if (response.json()['data']['status']) == 0: Printer().printlist_append([ 'join_lottery', '', 'user', "# 应援团 %s 应援成功,获得 %s 点亲密度" % (i1, response.json()['data']['add_num']) ]) else: Printer().printlist_append( ['join_lottery', '', 'user', "# 应援团 %s 应援失败" % (i1)])
def loginup(self, username, password): bilibili().dic_bilibili['account']['username'] = str(username) bilibili().dic_bilibili['account']['password'] = str(password) dic_saved_session = { 'username': str(username), 'password': str(password) } configloader.write2bilibililogin(dic_saved_session) return self.login()
def sliver2coin(self): if self.dic_user['coin']['on/off'] == '1': response = bilibili().silver2coin_web() response1 = bilibili().silver2coin_app() Printer().printlist_append( ['join_lottery', '', 'user', "# ", response.json()['msg']]) Printer().printlist_append( ['join_lottery', '', 'user', "# ", response1.json()['msg']])
def normal_login(self, username, password): url = "https://passport.bilibili.com/api/v2/oauth2/login" temp_params = 'appkey=' + bilibili().dic_bilibili['appkey'] + '&password='******'&username='******'appkey'] + "&password="******"&username="******"&sign=" + sign response = requests.post(url, data=payload, headers=headers) return response
async def query(self): while 1: # print('lotteryresult test') bilibili().clean_activity() bilibili().clean_TV() # print('自动延迟参数', sleeptime1, sleeptime2) await asyncio.sleep(30) '''
async def login_new(self): response = await bilibili().check_activity_exist() json_res = await response.json() if json_res['code'] == 0: activity_name = (list((json_res['data']['eventList'][0]['lottery']['config']).keys()))[0] bilibili().dic_bilibili['activity_name'] = activity_name else: Printer().printlist_append(['join_lottery', '', 'user', "自动查询没有查询到新活动"], True) if bilibili().dic_bilibili['saved-session']['cookie']: Printer().printlist_append(['join_lottery', '', 'user', "复用cookie"], True) bilibili().load_session(bilibili().dic_bilibili['saved-session']) else: return self.login()
def send_gift(self): if self.dic_user['gift']['on/off'] == '1': try: argvs = bilibili().get_bag_list() for i in range(0, len(argvs)): giftID = argvs[i][0] giftNum = argvs[i][1] bagID = argvs[i][2] roomID = self.dic_user['gift']['send_to_room'] bilibili().send_bag_gift_web(roomID, giftID, giftNum, bagID) except: print("# 没有将要过期的礼物~")
def send_gift_web(roomid, giftid, giftnum, bagid): response = bilibili().request_check_room(roomid) ruid = response.json()['data']['uid'] biz_id = response.json()['data']['room_id'] response1 = bilibili().request_send_gift_web(giftid, giftnum, bagid, ruid, biz_id) json_response1 = response1.json() if json_response1['code'] == 0: # print(json_response1['data']) print( "# 送出礼物:", json_response1['data']['gift_name'] + "X" + str(json_response1['data']['gift_num'])) else: print("# 错误", json_response1['msg'])
async def handle_1_TV_raffle(type, raffleid, time_wait, time_limit, num, real_roomid): Statistics().append_to_TVlist(raffleid, time_limit) if Schedule().scheduled_sleep: Printer().printer(f"定时休眠,跳过房间 {real_roomid} 广播道具抽奖 {raffleid}", "Info", "green") return if bilibili().black_status: Printer().printer(f"黑屋休眠,跳过房间 {real_roomid} 广播道具抽奖 {raffleid}", "Info", "green") return await asyncio.sleep( min( max(0, time_wait) + random.uniform(0, min(num, 30)), time_limit - 1)) response2 = await bilibili().get_gift_of_TV(type, real_roomid, raffleid) # Printer().printer(f"参与了房间 {real_roomid} 的广播抽奖 {raffleid}", "Lottery", "cyan") json_response2 = await response2.json(content_type=None) # Printer().printer(f"参与房间 {real_roomid} 广播道具抽奖 {raffleid} 状态: {json_response2['msg']}", "Lottery", "cyan") if json_response2['code'] == 0: data = json_response2["data"] Printer().printer( f"房间 {real_roomid} 广播道具抽奖 {raffleid} 结果: {data['award_name']}X{data['award_num']}", "Lottery", "cyan") Statistics().add_to_result(data['award_name'], int(data['award_num'])) else: # {"code":-403,"data":null,"message":"访问被拒绝","msg":"访问被拒绝"} # {'code': 503, 'data': None, 'message': '请求太多了!', 'msg': '请求太多了!'} # {'code': -509, 'message': '请求过于频繁,请稍后再试', 'ttl': 1} Printer().printer( f"房间 {real_roomid} 广播道具抽奖 {raffleid} 结果: {json_response2['message']}", "Lottery", "cyan") print(json_response2)
async def run(account_id: int): from Service import User import asyncio from login import login from bilibili import bilibili import biliconsole from schedule import Schedule from aioweb.aioWebsocket import aioWebsocket user = User(account_id=account_id) dic_user = await user.load_account_conf() x = bilibili() await x.init() from statistics import Statistics Statistics() biliconsole_task = biliconsole.Biliconsole() # login_tasks = login().login_new() login_tasks = login().login2() await login_tasks from comments import load_tasks tasks = await load_tasks(user) asyncio.create_task(biliconsole_task.run(), name="biliconsole") schedule = Schedule() print(dic_user) if dic_user['regular_sleep']['on']: Schedule().scheduled_sleep = True asyncio.create_task(schedule.run( dic_user['regular_sleep']['schedule']), name="schedule") aioWebsocket.tasks = tasks asyncio.create_task(aioWebsocket().receive(), name="aiowebsocket")
def auto_send_gift(self): if self.dic_user['auto-gift']['on/off'] == "1": a = utils.fetch_medal(printer=False) temp_dic = bilibili().gift_list() temp = utils.fetch_bag_list(printer=False)[1] roomid = a[0] today_feed = a[1] day_limit = a[2] left_num = int(day_limit) - int(today_feed) calculate = 0 for i in range(0, len(temp)): gift_id = int(temp[i][0]) gift_num = int(temp[i][1]) bag_id = int(temp[i][2]) if (gift_num * (temp_dic[gift_id] / 100) < left_num) and (gift_id != 4 and gift_id != 3): calculate = calculate + temp_dic[gift_id] / 100 * gift_num # tmp = calculate / (temp_dic[gift_id] / 100) tmp2 = temp_dic[gift_id] / 100 * gift_num utils.send_gift_web(roomid, gift_id, gift_num, bag_id) left_num = left_num - tmp2 elif left_num - temp_dic[gift_id] / 100 >= 0 and ( gift_id != 4 and gift_id != 3): tmp = (left_num) / (temp_dic[gift_id] / 100) tmp1 = (temp_dic[gift_id] / 100) * int(tmp) calculate = calculate + tmp1 utils.send_gift_web(roomid, gift_id, tmp, bag_id) left_num = left_num - tmp1 Printer().printlist_append([ 'join_lottery', '', 'user', "# 自动送礼共送出亲密度为%s的礼物" % int(calculate) ])
def Daily_bag(self): response = bilibili().get_dailybag() for i in range(0, len(response.json()['data']['bag_list'])): Printer().printlist_append([ 'join_lottery', '', 'user', "# 获得-" + response.json()['data']['bag_list'][i]['bag_name'] + "-成功" ])
def fetch_bag_list(verbose=False, bagid=None, printer=True): response = bilibili().request_fetch_bag_list() temp = [] gift_list = [] if printer == True: print('[{}] 查询可用礼物'.format( time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))) for i in range(len(response.json()['data']['list'])): bag_id = (response.json()['data']['list'][i]['bag_id']) gift_id = (response.json()['data']['list'][i]['gift_id']) gift_num = str( (response.json()['data']['list'][i]['gift_num'])).center(4) gift_name = response.json()['data']['list'][i]['gift_name'] expireat = (response.json()['data']['list'][i]['expire_at']) left_time = (expireat - int(CurrentTime())) left_days = (expireat - int(CurrentTime())) / 86400 gift_list.append([gift_id, gift_num, bag_id]) if bagid is not None: if bag_id == int(bagid): return gift_id else: if verbose: print("# 编号为" + str(bag_id) + '的' + gift_name + 'X' + gift_num, '(在' + str(math.ceil(left_days)) + '天后过期)') elif printer == True: print("# " + gift_name + 'X' + gift_num, '(在' + str(math.ceil(left_days)) + '天后过期)') if 0 < int(left_time) < 43200: # 剩余时间少于半天时自动送礼 temp.append([gift_id, gift_num, bag_id]) return temp, gift_list
def login_with_captcha(self, username, password): headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', 'cookie': "sid=hxt5szbb" } s = requests.session() url = "https://passport.snm0516.aisee.tv/api/captcha?token=5598158bcd8511e1" res = s.get(url, headers=headers) tmp1 = base64.b64encode(res.content) for _ in range(login.auto_captcha_times): try: captcha = bilibili().cnn_captcha(tmp1) break except Exception: Printer().printer("验证码识别服务器连接失败", "Error", "red") login.auto_captcha_times -= 1 else: try: from PIL import Image from io import BytesIO img = Image.open(BytesIO(res.content)) img.show() captcha = input('输入验证码\n').strip() except ImportError: Printer().printer("安装 Pillow 库后重启,以弹出验证码图片", "Error", "red") exit() temp_params = f"appkey={appkey}&build={build}&captcha={captcha}&channel=master&guid=XYEBAA3E54D502E17BD606F0589A356902FCF&mobi_app={mobi_app}&password={password}&platform={bilibili().dic_bilibili['platform']}&token=5598158bcd8511e1&ts=0&username={username}" data = f"{temp_params}&sign={bilibili().calc_sign(temp_params, app_secret)}" headers['Content-type'] = "application/x-www-form-urlencoded" headers['cookie'] = "sid=hxt5szbb" url = "https://passport.snm0516.aisee.tv/api/tv/login" response = s.post(url, data=data, headers=headers) return response
def reconnect(self, roomid): self.tag_reconnect = True if self.danmuji is not None: self.danmuji.close_connection() bilibili().dic_bilibili['roomid'] = roomid print('已经切换roomid') self.tag_reconnect = False
def __new__(cls, *args, **kw): if not cls.instance: cls.instance = super(OnlineNet, cls).__new__(cls, *args, **kw) cls.instance.bili = bilibili() cls.instance.var_is_online = True cls.instance.list_delay = [] return cls.instance
def fetch_user_info(): response = bilibili().request_fetch_user_info() print('[{}] 查询用户信息'.format( time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))) json_response = response.json() if (json_response['code'] == 0): data = json_response['data'] uname = data['userInfo']['uname'] achieve = data['achieves'] user_level = data['userCoinIfo']['user_level'] silver = data['userCoinIfo']['silver'] gold = data['userCoinIfo']['gold'] user_next_level = data['userCoinIfo']['user_next_level'] user_intimacy = data['userCoinIfo']['user_intimacy'] user_next_intimacy = data['userCoinIfo']['user_next_intimacy'] user_level_rank = data['userCoinIfo']['user_level_rank'] billCoin = data['userCoinIfo']['coins'] print('# 用户名', uname) print('# 银瓜子', silver) print('# 金瓜子', gold) print('# 硬币数', billCoin) print('# 成就值', achieve) print('# 等级值', user_level, '———>', user_next_level) print('# 经验值', user_intimacy) print('# 剩余值', user_next_intimacy - user_intimacy) arrow = int(user_intimacy * 30 / user_next_intimacy) line = 30 - arrow percent = user_intimacy / user_next_intimacy * 100.0 process_bar = '[' + '>' * arrow + '-' * line + ']' + '%.2f' % percent + '%' print(process_bar) print('# 等级榜', user_level_rank)
def fetch_medal(printer=True): printlist = [] if printer == True: printlist.append('查询勋章信息') printlist.append('{} {} {:^12} {:^10} {} {:^6} '.format( adjust_for_chinese('勋章'), adjust_for_chinese('主播昵称'), '亲密度', '今日的亲密度', adjust_for_chinese('排名'), '勋章状态')) dic_worn = {'1': '正在佩戴', '0': '待机状态'} response = bilibili().request_fetchmedal() # print(response.json()) json_response = response.json() roomid = 0 today_feed = 0 day_limit = 0 if json_response['code'] == 0: for i in json_response['data']['fansMedalList']: if i['status'] == 1: roomid = i['roomid'] today_feed = i['today_feed'] day_limit = i['day_limit'] if printer == True: printlist.append('{} {} {:^14} {:^14} {} {:^6} '.format( adjust_for_chinese(i['medal_name'] + '|' + str(i['level'])), adjust_for_chinese(i['anchorInfo']['uname']), str(i['intimacy']) + '/' + str(i['next_intimacy']), str(i['todayFeed']) + '/' + str(i['dayLimit']), adjust_for_chinese(str(i['rank'])), dic_worn[str(i['status'])])) if printer: Printer().printlist_append(['join_lottery', '', 'user', printlist], True) return roomid, today_feed, day_limit
def time_end(self): try: response = bilibili().get_time_about_silver() temp = response.json() time_end = temp['data']['time_end'] return str(time_end) except: pass
def login_with_captcha(self, username, password): headers = { 'Accept': 'application/json, text/plain, */*', 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36', 'Host': 'passport.bilibili.com', 'cookie': "sid=hxt5szbb" } s = requests.session() url = "https://passport.bilibili.com/captcha" res = s.get(url, headers=headers) tmp1 = base64.b64encode(res.content) captcha = bilibili().cnn_captcha(tmp1) temp_params = 'actionKey=' + bilibili().dic_bilibili[ 'actionKey'] + '&appkey=' + bilibili().dic_bilibili['appkey'] + '&build=' + bilibili().dic_bilibili[ 'build'] + '&captcha=' + captcha + '&device=' + bilibili().dic_bilibili[ 'device'] + '&mobi_app=' + \ bilibili().dic_bilibili['mobi_app'] + '&password='******'&platform=' + \ bilibili().dic_bilibili[ 'platform'] + '&username='******'&sign=' + sign headers['Content-type'] = "application/x-www-form-urlencoded" headers['cookie'] = "sid=hxt5szbb" url = "https://passport.bilibili.com/api/v2/oauth2/login" response = s.post(url, data=payload, headers=headers) return response
def GetAward(self): try: timeend = self.time_end() timestart = self.time_start() response = bilibili().get_silver(timestart, timeend) #print(response.json()) return response.json()['code'] except: pass
def check_room_true(roomid): response = bilibili().request_check_room(roomid) json_response = response.json() if json_response['code'] == 0: data = json_response['data'] param1 = data['is_hidden'] param2 = data['is_locked'] param3 = data['encrypted'] return param1, param2, param3
def login(self): username = str(bilibili().dic_bilibili['account']['username']) password = str(bilibili().dic_bilibili['account']['password']) if username != "": while True: response = bilibili().request_getkey() value = response.json()['data'] key = value['key'] Hash = str(value['hash']) calcd_username, calcd_password = bilibili().calc_name_passw( key, Hash, username, password) response = self.normal_login(calcd_username, calcd_password) while response.json()['code'] == -105: response = self.login_with_captcha(calcd_username, calcd_password) if response.json( )['code'] == -662: # "can't decrypt rsa password~" Printer().printer("打码时间太长key失效,重试", "Error", "red") continue break try: access_key = response.json( )['data']['token_info']['access_token'] cookie_info = self.access_token_2_cookies(access_key) cookie_format = "" for key, value in cookie_info.items(): cookie_format = cookie_format + key + "=" + value + ";" bilibili().dic_bilibili['csrf'] = cookie_info['bili_jct'] bilibili().dic_bilibili['access_key'] = access_key bilibili().dic_bilibili['cookie'] = cookie_format bilibili().dic_bilibili['uid'] = int(cookie_info['DedeUserID']) bilibili().dic_bilibili['pcheaders']['cookie'] = cookie_format bilibili().dic_bilibili['appheaders']['cookie'] = cookie_format dic_saved_session = { 'csrf': cookie_info['bili_jct'], 'access_key': access_key, 'cookie': cookie_format, 'uid': cookie_info['DedeUserID'] } configloader.write2bilibili(dic_saved_session) Printer().printer(f"登录成功", "Info", "green") except: Printer().printer(f"登录失败,错误信息为:{response.json()}", "Error", "red")
def time_start(self): response = bilibili().get_time_about_silver() temp = response.json() # print (temp['code']) #宝箱领完返回的code为-10017 if temp['code'] == -10017: Printer().printlist_append(['join_lottery', '', 'user', "# 今日宝箱领取完毕"]) else: time_start = temp['data']['time_start'] return str(time_start)
async def link_sign(self): response = bilibili().get_grouplist() check = len(response.json()['data']['list']) group_id_list = [] owner_uid_list = [] for i in range(0, check): group_id = response.json()['data']['list'][i]['group_id'] owner_uid = response.json()['data']['list'][i]['owner_uid'] group_id_list.append(group_id) owner_uid_list.append(owner_uid) for (i1, i2) in zip(group_id_list, owner_uid_list): response = bilibili().assign_group(i1, i2) if response.json()['code'] == 0: if (response.json()['data']['status']) == 1: Printer().printer(f"应援团{i1}已应援过", "Info", "green") if (response.json()['data']['status']) == 0: Printer().printer(f"应援团{i1}应援成功,获得{response.json()['data']['add_num']}点亲密度", "Info", "green") else: Printer().printer(f"应援团{i1}应援失败,{response.json()}", "Error", "red")
async def login2(self, ): username = bilibili().dic_bilibili['account']['username'] password = bilibili().dic_bilibili['account']['password'] json_rsp = await bilibili().fetch_key() data = json_rsp['data'] pubkey = rsa.PublicKey.load_pkcs1_openssl_pem(data['key']) crypto_password = base64.b64encode( rsa.encrypt((data['hash'] + password).encode('utf-8'), pubkey)) url_password = parse.quote_plus(crypto_password) url_name = parse.quote_plus(username) json_rsp = await bilibili().login_bili2(url_name, url_password) while json_rsp['code'] == -105: binary_rsp = await bilibili().fetch_capcha() captcha = await bilibili().cnn_captcha2(binary_rsp) json_rsp = await bilibili().login_bili2(url_name, url_password, captcha) if not json_rsp['code'] and not json_rsp['data']['status']: data = json_rsp['data'] access_key = data['token_info']['access_token'] refresh_token = data['token_info']['refresh_token'] cookies = data['cookie_info']['cookies'] list_cookies = [f'{i["name"]}={i["value"]}' for i in cookies] cookie = ';'.join(list_cookies) login_data = { 'csrf': cookies[0]['value'], 'access_key': access_key, 'refresh_token': refresh_token, 'cookie': cookie, 'uid': cookies[1]['value'] } await User().update_cookie(login_data) else: login_data = { 'csrf': f'{json_rsp}', 'access_key': '', 'refresh_token': '', 'cookie': '', 'uid': 'NULL' } await User().update_cookie(login_data) return False
def time_start(self): response = bilibili().get_time_about_silver() temp = response.json() # print (temp['code']) #宝箱领完返回的code为-10017 if temp['code'] == -10017: print("# 今日宝箱领取完毕") else: time_start = temp['data']['time_start'] return str(time_start)