mirror of
https://github.com/Ytong825/mao.git
synced 2025-12-16 23:10:06 +08:00
创建 党史.py
This commit is contained in:
215
党史.py
Normal file
215
党史.py
Normal file
@@ -0,0 +1,215 @@
|
||||
import time
|
||||
from requests import Session
|
||||
from json import dumps
|
||||
from hashlib import md5, sha1
|
||||
from random import randint, random
|
||||
import hashids
|
||||
from typing import Tuple
|
||||
|
||||
# 用户信息设置
|
||||
device_info = '' # 设备信息,抓包抓到整段复制过来就行,不要编码后的
|
||||
user_id = # 用户id
|
||||
team_num = "" # 团队号,如果加入了团队请额外填写此参数
|
||||
randSleepTime = 0 # 最长多少秒后提交本题答案[0:9],题目本身有读题时间(字数/10),不计算在内
|
||||
trueRate = 100.0 # 正确率,取值范围[0:1]
|
||||
|
||||
|
||||
# 以下勿动
|
||||
def sign(data: dict) -> dict:
|
||||
keys = list(data.keys())
|
||||
keys.sort()
|
||||
s_data = "&".join([f'{key}={data[key]}' for key in keys])
|
||||
sign = sha1(f'{md5(s_data.encode()).hexdigest()}lanzu@123'.encode()).hexdigest()
|
||||
data['sign'] = sign
|
||||
return data
|
||||
|
||||
appletVersion = "2.1.0"
|
||||
appletVercode = 18
|
||||
ss = Session()
|
||||
ss.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat'
|
||||
ss.headers['Accept'] = 'application/json'
|
||||
ss.headers['Referer'] = f'https://servicewechat.com/wx6e24c691f9a50e44/{appletVercode}/page-frame.html'
|
||||
ss.headers['Authorization'] = 'Bearer 0'
|
||||
preScore = [80, 80, 80, 80, 150]
|
||||
h = hashids.Hashids(salt="leadfyy!gogogo")
|
||||
|
||||
|
||||
def update_info() -> int:
|
||||
ret = ss.post(
|
||||
url="https://xds.guanhaihk.com/api/updateInfo",
|
||||
data=sign(
|
||||
{
|
||||
"version": appletVersion,
|
||||
"create_page": "pages/index/index",
|
||||
"timestamp": int(time.time()),
|
||||
"rand": randint(0, 1000000),
|
||||
"user_id": user_id,
|
||||
"platform": "wxmini",
|
||||
"device_info": device_info
|
||||
}
|
||||
)
|
||||
).json()
|
||||
assert ret['code'] == 0 and ret['msg'] == 'success'
|
||||
return True
|
||||
|
||||
|
||||
def choose_user() -> int:
|
||||
ret = ss.post(
|
||||
url="https://xds.guanhaihk.com/api/game/choose_user",
|
||||
data=sign(
|
||||
{
|
||||
"user_id": user_id,
|
||||
"create_page": "pages/pvp/pvp",
|
||||
"timestamp": int(time.time()),
|
||||
"rand": randint(0, 1000000),
|
||||
"platform": "wxmini",
|
||||
"version": appletVersion,
|
||||
"device_info": device_info
|
||||
}
|
||||
)
|
||||
).json()
|
||||
assert ret['code'] == 0 and ret['msg'] == 'success'
|
||||
return ret['data']['pk_user']['id']
|
||||
|
||||
|
||||
def start(pk_user_id) -> Tuple[int, list, list, list, list]:
|
||||
ret = ss.post(
|
||||
url="https://xds.guanhaihk.com/api/game/start",
|
||||
data=sign(
|
||||
{
|
||||
"type":"rank_user",
|
||||
"pk_user_id": pk_user_id,
|
||||
"enter_type": "not_rank_quanzi",
|
||||
"create_page": "pages/answer/answer",
|
||||
"timestamp": int(time.time()),
|
||||
"rand": randint(0, 1000000),
|
||||
"user_id": user_id,
|
||||
"platform": "wxmini",
|
||||
"version": appletVersion,
|
||||
"device_info": device_info,
|
||||
"_enter_type": "not_rank_quanzi",
|
||||
"_pk_user_id": pk_user_id,
|
||||
"_type": "rank_user"
|
||||
}
|
||||
)
|
||||
).json()
|
||||
assert ret['code'] == 0 and ret['msg'] == 'success'
|
||||
question_idsList = []
|
||||
sleeptime = []
|
||||
answer_idsList = []
|
||||
canTrueList = []
|
||||
for q in ret['data']['questions']:
|
||||
question_idsList.append(q['id'])
|
||||
sleeptime.append(len(q['content']) // 10)
|
||||
canTrue = random() < trueRate
|
||||
canTrueList.append(canTrue)
|
||||
answer = None
|
||||
if canTrue:
|
||||
for o in q['options']:
|
||||
if h.decode(o['is_answer'])[2] == 1:
|
||||
answer = o['id']
|
||||
break
|
||||
else:
|
||||
o = q['options'][randint(0, len(q['options']) - 1)]
|
||||
while h.decode(o['is_answer'])[2] == 1:
|
||||
o = q['options'][randint(0, len(q['options'])-1)]
|
||||
answer = o['id']
|
||||
answer_idsList.append(answer)
|
||||
return ret['data']['pk_datas']['pk_info']['score'], question_idsList, sleeptime, answer_idsList, canTrueList
|
||||
|
||||
|
||||
def submit(pk_user_id, question_id, answer_id, is_right, score, rightCount) -> bool:
|
||||
ret = ss.post(
|
||||
url="https://xds.guanhaihk.com/api/wrongQuestion/submit",
|
||||
data=sign(
|
||||
{
|
||||
"user_id": user_id,
|
||||
"question_id": question_id,
|
||||
"is_right": is_right,
|
||||
"score": score,
|
||||
"rightCount": rightCount,
|
||||
"type": "rank_user",
|
||||
"answer_id": answer_id,
|
||||
"create_page": "pages/answer/answer",
|
||||
"timestamp": int(time.time()),
|
||||
"rand": randint(0, 1000000),
|
||||
"platform": "wxmini",
|
||||
"version": appletVersion,
|
||||
"device_info": device_info,
|
||||
"enter_type": "not_rank_quanzi",
|
||||
"pk_user_id": pk_user_id,
|
||||
"_type": "rank_user"
|
||||
}
|
||||
)
|
||||
).json()
|
||||
return ret['code'] == 0 and ret['msg'] == '记录成功'
|
||||
|
||||
|
||||
def submit_all(question_ids, times, score, score_ids, experience, is_win, answer_ids, right_counts) -> Tuple[str, int, int, int]:
|
||||
ret = ss.post(
|
||||
url="https://xds.guanhaihk.com/api/answer/submit_all",
|
||||
data=sign(
|
||||
{
|
||||
"question_ids": question_ids,
|
||||
"times": times,
|
||||
"score": score,
|
||||
"score_ids": score_ids,
|
||||
"experience": experience,
|
||||
"is_win": is_win,
|
||||
"answer_ids": answer_ids,
|
||||
"right_counts": right_counts,
|
||||
"user_id": user_id,
|
||||
"team_num": team_num,
|
||||
"type": "rank_user",
|
||||
"enter_type": "not_rank_quanzi",
|
||||
"create_page": "packageA/pages/closing/closing",
|
||||
"timestamp": int(time.time()),
|
||||
"rand": randint(0, 1000000),
|
||||
"platform": "wxmini",
|
||||
"version": appletVersion,
|
||||
"device_info": device_info,
|
||||
"_enter_type": "not_rank_quanzi"
|
||||
}
|
||||
)
|
||||
).json()
|
||||
assert ret['code'] == 0 and ret['msg'] == '提交完成'
|
||||
return ret['data']['user']['expInfo']['name'], ret['data']['user']['expInfo']['lever'], ret['data']['user']['experience'], ret['data']['user']['expInfo']['next_min_score']
|
||||
|
||||
if __name__ == '__main__':
|
||||
update_info()
|
||||
while True:
|
||||
m_pk_user_id = choose_user()
|
||||
print("获取到对手", end=" ")
|
||||
m_pk_score, m_question_idsList, m_sleeptime, m_answer_idsList, m_canTrueList = start(m_pk_user_id)
|
||||
print("获取到题目", end=" ")
|
||||
m_timesList = []
|
||||
m_score = 0
|
||||
m_score_idsList = []
|
||||
m_right_counts = 0
|
||||
for x, m_id, m_ans, m_st, m_ct in zip(range(5), m_question_idsList, m_answer_idsList, m_sleeptime, m_canTrueList):
|
||||
m_usetime = randint(0, randSleepTime)
|
||||
m_timesList.append(m_usetime)
|
||||
m_sc = int(preScore[x] * (10 - m_usetime) / 10)
|
||||
if m_ct:
|
||||
m_right_counts += 1
|
||||
else:
|
||||
m_sc = 0
|
||||
m_right_counts = 100 # 这个是连续答对次数
|
||||
m_score += m_sc
|
||||
m_score_idsList.append(m_sc)
|
||||
time.sleep(m_st + m_usetime)
|
||||
assert submit(m_pk_user_id, m_id, m_ans, 1 if m_ct else 0, m_score, m_right_counts)
|
||||
print(f"已答第{x+1}题", end=" ")
|
||||
m_question_ids = ",".join([str(i) for i in m_question_idsList])
|
||||
m_answer_ids = ",".join([str(i) for i in m_answer_idsList])
|
||||
m_times = ",".join([str(i) for i in m_timesList])
|
||||
m_score_ids = ",".join([str(i) for i in m_score_idsList])
|
||||
if m_score >= m_pk_score:
|
||||
m_is_win = 1
|
||||
m_experience = int(m_score * 0.1 + max(0, m_right_counts - 1) + 5)
|
||||
else:
|
||||
m_is_win = 0
|
||||
m_experience = max(int(m_score * 0.1 + max(0, m_right_counts - 1) - 5), 0)
|
||||
level, lever, exp, nextexp = submit_all(m_question_ids, m_times, m_score, m_score_ids, m_experience, m_is_win, m_answer_ids, m_right_counts)
|
||||
print(f"现在为{level} LV{lever}, 现有{exp}经验, 升级还需{nextexp - exp}经验")
|
||||
time.sleep(2)
|
||||
Reference in New Issue
Block a user