Python TypeError:序列项1:应为str实例,找到字节

Python TypeError:序列项1:应为str实例,找到字节,python,websocket,Python,Websocket,我想尝试为android游戏创建某种机器人,但它给了我一个回溯错误: Traceback (most recent call last): File "main.py", line 505, in <module> a.login_and_collect() File "main.py", line 375, in login_and_collect self.req_sdk_login(svr_id) File "main.py", line 86, i

我想尝试为android游戏创建某种机器人,但它给了我一个回溯错误:

Traceback (most recent call last):
  File "main.py", line 505, in <module>
    a.login_and_collect()
  File "main.py", line 375, in login_and_collect
    self.req_sdk_login(svr_id)
  File "main.py", line 86, in req_sdk_login
    res= self.callAPI(msg.SerializeToString())
  File "main.py", line 355, in callAPI
    if not hasattr(self,'ws'):  self.getWS()
  File "main.py", line 33, in getWS
    self.ws = create_connection("ws://hgame-tva-slb-gs.lilithgame.com:10000", header={'Upgrade':'websocket','Connection':'Upgrade','Sec-WebSocket-Key':self.getRND(),'Sec-WebSocket-Protocol':'game_10001','Sec-WebSocket-Version':'13'})
  File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\site-packages\websocket\_core.py", line 514, in create_connection
    websock.connect(url, **options)
  File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\site-packages\websocket\_core.py", line 226, in connect
    self.handshake_response = handshake(self.sock, *addrs, **options)
  File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\site-packages\websocket\_handshake.py", line 73, in handshake
    headers, key = _get_handshake_headers(resource, hostname, port, options)
  File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\site-packages\websocket\_handshake.py", line 138, in _get_handshake_headers
    for k, v in header.items()
  File "C:\Users\myname\AppData\Local\Programs\Python\Python37\lib\site-packages\websocket\_handshake.py", line 139, in <listcomp>
    if v is not None
TypeError: sequence item 1: expected str instance, bytes found
它应该从“ws://”连接获取一些数据,但结果仍然是一个字节而不是一个字符串

我如何解决这个问题

编辑(这是错误产生的完整脚本):

从google.protobuf导入文本\u格式
从websocket导入创建\u连接
导入公共_pb2
导入下_pb2
导入时间
导入base64
导入操作系统
向上导入pb2
导入websocket
进口检验
导入系统
从lilithgame导入lilithgame
从数据库导入数据库
类API(对象):
定义初始化(自):
self.cli_version=“1.17”
self.up\u pb2=up\u pb2
self.down\u pb2=down\u pb2
self.common_pb2=common_pb2
seq=100
self.lilithgame=lilithgame()
self.db=数据库()
self.cmd=True
def getRND(自身):
返回base64.b64encode(os.uradom(16))
def getWS(自我):
如果hasattr(self,'ws'):
self.ws.close()
self.ws=create_connection(“ws://hgame-tva-slb-gs.lilithgame.com:10000”,header={'Upgrade':'websocket','connection':'Upgrade','Sec-websocket-Key':self.getRND(),'Sec-websocket-Protocol':'game10001','Sec-websocket-Version':'13'})
def setCollectRewards(自我):
self.canrewards=True
def setcmd(自身):
self.cmd=False
def setOpenId(自身,id):
self.open_id=str(id)
def setToken(自我,令牌):
self.token=token
def设置设备(自身、设备):
self.device=self.common\u pb2.ios如果device='ios'否则self.common\u pb2.android
self.log(“[!]我们的操作系统是:%s%”(设备))
def日志(self,msg):
如果hasattr(self,'cmd')和self.cmd==False:返回
打印(“[%s]%s%”(time.strftime(“%H:%M:%s”)、msg.encode('utf-8'))
def makeplain(self,i):
从字符串返回self.up_pb2.up_msg()(i.decode('hex'))
def getplainresponse(自我,i):
从字符串(i)返回self.down\u pb2.down\u msg()
def登录(自我、平台、开放id、svr id、uid、htoken):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req_reconnect.platform=self.common_pb2.lilith
msg.req\u reconnect.open\u id=open\u id
msg.req\u reconnect.svr\u id=svr\u id
msg.req_reconnect.uid=uid
msg.req_reconnect.htoken=htoken
msg.req\u reconnect.cli\u version=self.cli\u version
返回self.callAPI(msg.SerializeToString())
def req_sdk_登录(self,svr_id=False,is_debug=False):
如果不是hasattr(self,“open_id”):
self.log(“[-]open_id丢失…”)
出口(1)
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=1
msg.req\u sdk\u login.platform=self.common\u pb2.lilith
msg.req\u sdk\u login.open\u id=self.open\u id
msg.req\u sdk\u login.token=self.token
msg.req_sdk_login.is_debug=is_debug
msg.sign='e600502f76fe5dbf539687e23295560b'
如果svr\u id:msg.req\u sdk\u login.svr\u id=svr\u id
res=self.callAPI(msg.SerializeToString())
self.htoken=res.reply\u sdk\u login.htoken
self.svr\u id=res.reply\u sdk\u login.svr\u id
self.log(“[!]使用服务器%s%”(self.svr\u id))
如果为False:self.log('htoken:%s svr\u id:%s'(self.htoken,self.svr\u id))
返回res
def req_心跳(自身):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req_heartbeat.hb_cnt=0
msg.req_heartbeat.hb_delay=0
msg.req\u heartbeat.timeout\u cnt=0
msg.req\u heartbeat.timeout\u长度=15000
返回self.callAPI(msg.SerializeToString())
def req_教程(自我,ids):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
对于id中的id:
msg.req\u tutorial.new\u tutorials.append(id)
返回self.callAPI(msg.SerializeToString())
def查询辅助摘要(自我):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u stage.query\u assist\u summaries.Clear()
返回self.callAPI(msg.SerializeToString())
def get_acc_用户(自身):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u acc.get\u acc\u users.Clear()
返回self.callAPI(msg.SerializeToString())
def更新_评级(自我):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u rating.update\u rating.status=self.common\u pb2.have\u rated
msg.req\u rating.update\u rating.add\u count=0
msg.req\u rating.update\u rating.action=self.common\u pb2.second\u day\u奖励
返回self.callAPI(msg.SerializeToString())
def下一章(自我):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u stage.next\u chapter.Clear()
返回self.callAPI(msg.SerializeToString())
def请求打开面板(自身):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req_stage.req_open_panel.Clear()
返回self.callAPI(msg.SerializeToString())
def req_每日登录(自我):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u daily\u login.recv\u reward=1
返回self.callAPI(msg.SerializeToString())
def recv_奖励(自我、挑战id、任务id):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u challenge.recv\u reward.challenge\u id=challenge\u id
msg.req\u challenge.recv\u reward.task\u id=task\u id
返回self.callAPI(msg.SerializeToString())
def req_red_dot(自身、类型、id):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u red\u dot.rm.type=\u type
msg.req\u red\u dot.rm.id=id
返回self.callAPI(msg.SerializeToString())
def需求酒馆图纸(自身、酒馆id):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req\u tavern.req\u tavern\u draw.tavern\u id=tavern\u id
返回self.callAPI(msg.SerializeToString())
def req_recv_todo_奖励(自我、req_recv_todo_奖励):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req_task.req_recv_todo_悬赏=req_recv_todo_悬赏
返回self.callAPI(msg.SerializeToString())
def请求接收箱(自身,请求接收箱):
msg=self.up\u pb2.up\u msg()
msg.seq=self.seq
msg.repeat=0
msg.req_task.req_recv_chest=req_recv_chest
返回self.callAPI(msg.Seri
def getWS(self):
   if hasattr(self, 'ws'):
      self.ws.close()           
   self.ws = create_connection("ws://hgame-tva-slb-gs.lilithgame.com:10000", header={'Upgrade':'websocket','Connection':'Upgrade','Sec-WebSocket-Key':self.getRND(),'Sec-WebSocket-Protocol':'game_10001','Sec-WebSocket-Version':'13'})
from google.protobuf import text_format
from websocket import create_connection
import common_pb2
import down_pb2
import time
import base64
import os
import up_pb2
import websocket
import inspect
import sys
from lilithgame import lilithgame
from db import Database

class API(object):
def __init__(self):
    self.cli_version="1.17"
    self.up_pb2=up_pb2
    self.down_pb2=down_pb2
    self.common_pb2=common_pb2
    self.seq=100
    self.lilithgame=lilithgame()
    self.db=Database()
    self.cmd=True

def getRND(self):
    return base64.b64encode(os.urandom(16))

def getWS(self):
    if hasattr(self, 'ws'):
        self.ws.close()         
    self.ws = create_connection("ws://hgame-tva-slb-gs.lilithgame.com:10000", header={'Upgrade':'websocket','Connection':'Upgrade','Sec-WebSocket-Key':self.getRND(),'Sec-WebSocket-Protocol':'game_10001','Sec-WebSocket-Version':'13'})

def setCollectRewards(self):
    self.canrewards=True

def setcmd(self):
    self.cmd=False

def setOpenId(self, id):
    self.open_id=str(id)

def setToken(self, token):
    self.token=token

def setDevice(self, device):
    self.device=self.common_pb2.ios if device=='ios' else self.common_pb2.android
    self.log('[!] our OS is:%s'%(device))

def log(self, msg):
    if hasattr(self, 'cmd') and self.cmd==False:    return
    print(('[%s] %s'%(time.strftime('%H:%M:%S'), msg.encode('utf-8'))))

def makeplain(self, i):
    return self.up_pb2.up_msg().FromString(i.decode('hex'))

def getplainresponse(self, i):
    return self.down_pb2.down_msg().FromString(i)

def login(self, platform, open_id, svr_id, uid, htoken):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_reconnect.platform = self.common_pb2.lilith
    msg.req_reconnect.open_id = open_id
    msg.req_reconnect.svr_id = svr_id
    msg.req_reconnect.uid = uid
    msg.req_reconnect.htoken = htoken
    msg.req_reconnect.cli_version = self.cli_version
    return self.callAPI(msg.SerializeToString())

def req_sdk_login(self,svr_id=False,is_debug=False):
    if not hasattr(self, 'open_id'):
        self.log('[-] open_id missing...')
        exit(1)
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=1
    msg.req_sdk_login.platform = self.common_pb2.lilith
    msg.req_sdk_login.open_id = self.open_id
    msg.req_sdk_login.token = self.token
    msg.req_sdk_login.is_debug = is_debug
    msg.sign = 'e600502f76fe5dbf539687e23295560b'
    if svr_id:  msg.req_sdk_login.svr_id = svr_id
    res= self.callAPI(msg.SerializeToString())
    self.htoken=res.reply_sdk_login.htoken
    self.svr_id=res.reply_sdk_login.svr_id
    self.log('[!] using server %s'%(self.svr_id))
    if False:   self.log('htoken:%s svr_id:%s'%(self.htoken, self.svr_id))
    return res

def req_heartbeat(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_heartbeat.hb_cnt = 0
    msg.req_heartbeat.hb_delay = 0
    msg.req_heartbeat.timeout_cnt = 0
    msg.req_heartbeat.timeout_length = 15000
    return self.callAPI(msg.SerializeToString())

def req_tutorial(self, ids):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    for id in ids:
        msg.req_tutorial.new_tutorials.append(id)
    return self.callAPI(msg.SerializeToString())

def query_assist_summaries(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.query_assist_summaries.Clear()
    return self.callAPI(msg.SerializeToString())

def get_acc_users(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_acc.get_acc_users.Clear()
    return self.callAPI(msg.SerializeToString())

def update_rating(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_rating.update_rating.status=self.common_pb2.have_rated
    msg.req_rating.update_rating.add_count=0
    msg.req_rating.update_rating.action=self.common_pb2.second_day_reward
    return self.callAPI(msg.SerializeToString())

def next_chapter(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.next_chapter.Clear()
    return self.callAPI(msg.SerializeToString())

def req_open_panel(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.req_open_panel.Clear()
    return self.callAPI(msg.SerializeToString())

def req_daily_login(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_daily_login.recv_reward=1
    return self.callAPI(msg.SerializeToString())

def recv_reward(self, challenge_id, task_id):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_challenge.recv_reward.challenge_id=challenge_id
    msg.req_challenge.recv_reward.task_id=task_id
    return self.callAPI(msg.SerializeToString())

def req_red_dot(self, _type, id):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_red_dot.rm.type=_type
    msg.req_red_dot.rm.id=id
    return self.callAPI(msg.SerializeToString())

def req_tavern_draw(self, tavern_id):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_tavern.req_tavern_draw.tavern_id=tavern_id
    return self.callAPI(msg.SerializeToString())

def req_recv_todo_reward(self, req_recv_todo_reward):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_task.req_recv_todo_reward=req_recv_todo_reward
    return self.callAPI(msg.SerializeToString())

def req_recv_chest(self, req_recv_chest):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_task.req_recv_chest=req_recv_chest
    return self.callAPI(msg.SerializeToString())

def req_recv_line_reward(self, req_recv_line_reward):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_task.req_recv_line_reward=req_recv_line_reward
    return self.callAPI(msg.SerializeToString())

def query_reward(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.query_reward.Clear()
    return self.callAPI(msg.SerializeToString())

def draw_rewards(self):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.draw_rewards.Clear()
    return self.callAPI(msg.SerializeToString())

def req_up_level(self, hero_id, up_level):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_unit.req_up_level.hero_id=hero_id
    msg.req_unit.req_up_level.up_level=up_level
    return self.callAPI(msg.SerializeToString())

def req_wear_best_equip(self, req_wear_best_equip):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_unit.req_wear_best_equip=req_wear_best_equip
    return self.callAPI(msg.SerializeToString())

def start_battle(self, stage_id):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.start_battle.stage_id=stage_id
    idx=0
    self.heroes.reverse()
    for h in self.heroes:
        if idx>4:   break
        if False:   self.log('slot:%s hero_id:%s'%(idx, h))
        new_lineup = msg.req_stage.start_battle.lineup.add()
        new_lineup.slot=idx+1
        new_lineup.hero_id=h
        idx+=1
    return self.callAPI(msg.SerializeToString(), True)

def end_battle(self, battle):
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_stage.end_battle.result = self.common_pb2.victory
    rounds=msg.req_stage.end_battle.rounds.add()
    rounds.round = 1
    rounds.result = self.common_pb2.victory
    rounds.self_team.slot_heroes.MergeFrom(battle.reply_stage.start_battle.start_battle_info.input.self_teams[0].slot_heroes)
    rounds.oppo_team.Clear()
    rp=common_pb2.round_op()
    map1={}
    map1[255]=common_pb2.battle_ops()
    map1[255].ops.append(0)
    rp.operations.MergeFrom(map1)
    rounds.round_op.MergeFrom(rp)
    smap1={}
    for i in self.heroes:
        smap1[i]=common_pb2.hero_stat()
        smap1[i].hp_pct=10000
        smap1[i].mp_pct=10000
        smap1[i].param=0
        smap1[i].damage=10000
        smap1[i].kill=0
        smap1[i].heal=0
        smap1[i].defend=0
    rounds.self_stats.MergeFrom(smap1)
    pmap1={}
    pmap1[1]=common_pb2.hero_stat()
    pmap1[1].hp_pct=0
    pmap1[1].mp_pct=1061
    pmap1[1].param=0
    pmap1[1].damage=99
    pmap1[1].kill=0
    pmap1[1].heal=0
    pmap1[1].defend=332
    rounds.oppo_stats.MergeFrom(pmap1)
    msg.req_stage.end_battle.cli_ver='cli:afkarena_v1.16.04.44921;bcv:2.0'
    msg.req_stage.end_battle.param=37283
    return self.callAPI(msg.SerializeToString())

def showtasks(self, tasks):
    for i in tasks.daily_todolists._values:
        if i.target_progress>=1 and not hasattr(i, 'last_reward_time'):
            self.req_recv_todo_reward(i.id)
    for i in tasks.weekly_todolists._values:
        if i.target_progress>=1 and not hasattr(i, 'last_reward_time'):
            self.req_recv_todo_reward(i.id)
    for i in tasks.line_tasklists._values:
        if i.target_progress>=1 and not hasattr(i, 'last_reward_time'):
            self.req_recv_line_reward(i.line)

def showchallanges(self, challanges):
    for i in challanges._values:
        if hasattr(i, 'tasks'):
            for j in i.tasks._values:
                if j.progress>=1:
                    self.recv_reward(j.challenge_id, j.task_id)

def showunits(self, heroes):
    self.log('[!] have %s units'%(len(heroes)))
    self.heroes=[]
    used=set()
    isAllLvl1=True
    for i in heroes:
        if i.level!=1:
            isAllLvl1=False
            break
    for i in heroes:
        if i.tid in used:   continue
        if not isAllLvl1 and i.level==1:    continue
        #if i.level<50: continue
        self.log('id:%s rank:%s level:%s quality:%s'%(i.id, i.rank, i.level, i.quality))
        self.heroes.append(i.id)
        used.add(i.tid)

def req_login(self):
    if not hasattr(self, 'device'):
        self.device=self.common_pb2.ios
    msg=self.up_pb2.up_msg()
    msg.seq=self.seq
    msg.repeat=0
    msg.req_login.platform=self.common_pb2.lilith
    msg.req_login.os=self.device
    msg.req_login.open_id=self.open_id
    msg.req_login.svr_id=self.svr_id
    msg.req_login.htoken=self.htoken
    msg.req_login.cli_version=self.cli_version
    msg.req_login.time_zone=2
    msg.req_login.lang=self.common_pb2.en
    msg.req_login.push_id="jpush-191e35f7e00af97c8e4"
    msg.req_login.idfa="00000000-0000-0000-0000-000000000000"
    msg.req_login.google_aid=""
    msg.req_login.android_id=""
    msg.req_login.os_version="10.2"
    msg.req_login.app_version="1.16.03"
    msg.req_login.device="iPad5,4"
    msg.req_login.channel_id="self-lilith-0.7"
    msg.req_login.package="com.lilithgame.hgames.ios"
    msg.req_login.name="New Player"
    res= self.callAPI(msg.SerializeToString())
    self.user=res.reply_login.user_info
    self.cur_stage=res.reply_login.user_info.stage.cur_stage
    if False:   self.log('[!] cur_stage:%s'%(self.cur_stage))
    self.showunits(res.reply_login.user_info.heroes._values)
    if hasattr(self, 'canrewards'): self.showtasks(res.reply_login.user_info.task_info)
    if hasattr(self, 'canrewards'): self.showchallanges(res.reply_login.user_info.challenges)
    self.log('uid:%s level:%s gold:%s diamonds:%s'%(res.reply_login.user_info.uid, res.reply_login.user_info.level, res.reply_login.user_info.gold, res.reply_login.user_info.rmb))
    return res

def callAPI(self,data,needSecond=False):
    if not hasattr(self,'ws'):  self.getWS()
    self.ws.send_binary(data)
    result = self.ws.recv()
    self.seq+=1
    res= self.getplainresponse(result)
    if 'err_stage_battle_gs_limit' in text_format.MessageToString(res):
        self.log('[!] Your team isnt\'t strong enough yet!')
        return None
    if needSecond:
        try:
            while(inspect.stack()[1][3] not in text_format.MessageToString(res)):
                result = self.ws.recv()
                res= self.getplainresponse(result)
        except KeyboardInterrupt:
            exit(1)
    if True:    self.log('%s(): %s'%(inspect.stack()[1][3], res.reply_seq))
    return res
    #self.ws.close()

def login_and_collect(self,svr_id=False):
    self.req_sdk_login(svr_id)
    self.req_login()
    self.query_assist_summaries()
    self.req_heartbeat()
    self.query_reward()
    self.draw_rewards()

def questuntil(self, max):
    if not hasattr(self, 'cur_stage'):
        self.log('..missing..')
        exit(1)
    done=0
    while(done<max):
        self.doquest(self.cur_stage+done)
        done+=1

def doquest(self, stage_id):
    self.log('[!] finishing quest:%s'%(stage_id))
    battle=self.start_battle(stage_id)
    if not battle:
        self.log('[!] do not have battle data..')
        return
    self.req_heartbeat()
    return self.end_battle(battle)

def addAccountToDb(self):
    return self.db.addAccount(self.user.uid, self.user.level, self.user.gold, self.user.rmb, self.token, self.open_id)

def updateAccount(self):
    return self.db.updateAccount(self.user.level, self.user.gold, self.user.rmb, self.open_id)

def showallaccounts(self):
    res=self.get_acc_users()
    #for i in res.reply_acc.user_summaries._values:
    #   print i.uid

def reroll(self,isNew=False):
    if not isNew:
        lilith=self.lilithgame.makeaccount()
        app_token=lilith['app_token']
        app_uid=lilith['app_uid']
        if False:   self.log('app_token:%s app_uid:%s'%(app_token, app_uid))
        self.setOpenId(str(app_uid))
        self.setToken(app_token)
        self.req_sdk_login()
        self.req_login()
    #fishy?
    self.log('[!] doing reroll..')
    self.req_tutorial([1, 2, 3, 4, 5, 6, 7])
    self.doquest(1)
    self.doquest(2)
    self.doquest(3)
    self.doquest(4)
    self.doquest(5)
    self.doquest(6)
    self.doquest(7)
    self.doquest(8)
    self.doquest(9)
    self.doquest(10)
    self.doquest(11)
    self.doquest(12)
    return
    #orig
    self.req_tutorial([1])
    self.query_assist_summaries()
    self.doquest(1)
    self.req_tutorial([1, 2])
    self.doquest(2)
    self.req_tutorial([1, 2, 3])
    self.doquest(3)
    self.req_up_level(1003, 1)
    self.req_wear_best_equip(1003)
    self.req_tutorial([1, 2, 3, 4])
    self.doquest(4)
    self.req_tutorial([1, 2, 3, 4, 5])
    self.req_tutorial([1, 2, 3, 4, 5, 6])
    self.doquest(5)
    self.doquest(6)
    self.req_up_level(1003, 1)
    self.req_up_level(1001, 5)
    self.req_up_level(1002, 5)
    self.req_up_level(1000, 5)
    self.doquest(7)
    self.doquest(8)
    self.req_up_level(1003, 5)
    #self.doquest(9)
    self.req_up_level(1001, 5)
    self.req_wear_best_equip(1001)
    self.req_wear_best_equip(1003)
    self.req_wear_best_equip(1002)
    self.req_wear_best_equip(1000)
    self.doquest(10)
    self.doquest(11)
    self.doquest(12)
    self.next_chapter()
    self.query_assist_summaries()
    self.req_open_panel()
    self.req_tutorial([1, 2, 3, 4, 5, 6, 7])
    self.req_tavern_draw(1)
    self.req_open_panel()
    self.req_daily_login()
    self.req_red_dot(self.common_pb2.activity, 7)
    self.req_red_dot(self.common_pb2.activity, 7)
    self.recv_reward(3, 21)
    self.req_open_panel()
    self.req_recv_todo_reward(1)
    self.req_recv_todo_reward(4)
    self.req_recv_todo_reward(6)
    self.req_recv_chest(1)
    self.req_recv_chest(2)
    self.req_recv_line_reward(1)
    self.req_recv_line_reward(1)
    self.req_recv_line_reward(1)
    self.req_recv_line_reward(2)
    self.req_recv_line_reward(3)
    self.req_recv_line_reward(1)
    self.req_recv_line_reward(2)
    self.req_recv_line_reward(1)
    self.req_recv_line_reward(17)
    self.req_recv_line_reward(5)
    self.req_open_panel()
    self.req_tavern_draw(1)
    self.req_tavern_draw(1)
    self.req_tavern_draw(1)
    self.req_tavern_draw(1)

if __name__ == "__main__":
a=API()
a.setOpenId('3414156')
a.setToken('QShls0NoQPFe2fLOkzf86PZxwCWBuF2k')
a.login_and_collect()