diff --git a/e语言/douyu/皮肤与充值/和平小店活动.txt b/e语言/douyu/皮肤与充值/和平小店活动.txt new file mode 100644 index 0000000..4bba575 --- /dev/null +++ b/e语言/douyu/皮肤与充值/和平小店活动.txt @@ -0,0 +1,2162 @@ +.版本 2 +.支持库 edroptarget +.支持库 iext +.支持库 EThread +.支持库 spec + +.程序集 窗口程序集_窗口1 +.程序集变量 集句柄, 整数型 +.程序集变量 工作中, 逻辑型 +.程序集变量 工作线程池EX, 鱼刺类_线程池Ex + +.子程序 _窗口1_创建完毕 + +' 网络版授权验证 (真, “f28ba622a3ef3abf0a419f5cd6b548396dbcd7bd0d25fc815b6256be1db23421d3a329637cdb54f61e492184d1602670dff739ec7bd2847d67b98f0bff373646”) +未闻花名_皮肤加载 (11, 真, , , , 真, 真, 窗口1.取窗口句柄 ()) +.如果真 (信息框 (“此程序仅用于学习、技术交流,请勿用于非法!如出现任何问题后果自负!” + #换行符 + “ ”, #确认取消钮, “免责声明!!!”, ) = #取消钮) + 结束 () +.如果真结束 + +全目录临时 = 取运行目录 () + “\XYZ\临时” +全目录状态 = 取运行目录 () + “\XYZ\数据状态” +全PIC = 取运行目录 () + “\XYZ\生成订单图片” +.如果真 (文件是否存在 (全目录临时) = 假) + 目录_创建 (全目录临时) +.如果真结束 +.如果真 (文件是否存在 (全目录状态) = 假) + 目录_创建 (全目录状态) +.如果真结束 +.如果真 (文件是否存在 (全PIC) = 假) + 目录_创建 (全PIC) +.如果真结束 + + +' 组合框1.发送信息 (5889, 6, 0) +拖放对象1.注册拖放控件 (超级列表框1.取窗口句柄 ()) +状态条1.置文本 (0, “双击列表指定数据行,查询账号详情....”) +数据写入列表 () +启动线程 (&商品列表, , ) +Gdip开始 () +连续赋值 (假, 选择框_定时抢购.选中, 选择框_心跳.选中) +组合框1.发送信息 (5889, 7, 0) +组合框1.发送信息 (352, 350, 0) ' 设置下拉框宽度 + +.子程序 _超级列表框1_右键单击表项 + +弹出菜单 (菜单, , ) + +.子程序 _拖放对象1_得到文件 +.参数 接收到的文件路径, 文本型 +.局部变量 i, 文本型 +.局部变量 第一次分割, 文本型, , "0" +.局部变量 第二次分割, 文本型, , "3" +.局部变量 N, 整数型 +.局部变量 索引, 整数型 +.局部变量 计次1, 整数型 +.局部变量 计次2, 整数型 +.局部变量 临时数组, 文本型, , "0" +.局部变量 文本数组, 文本型, , "0" + +i = 到文本 (读入文件 (接收到的文件路径)) +文本数组 = 分割文本 (i, #换行符, ) +.计次循环首 (取数组成员数 (文本数组), 计次1) + 系统_处理事件 () + 索引 = 超级列表框1.插入表项 (, , , , , ) + 超级列表框1.置标题 (索引, 0, 到文本 (索引 + 1)) + 超级列表框1.置标题 (索引, 1, 文本数组 [计次1]) + 超级列表框1.置状态图片 (索引, 1) + 系统_处理事件 () +.计次循环尾 () +超级列表框1.允许重画 () ' 恢复自动重画 +超级列表框1.发送信息 (277, 7, 0) ' 显示最后一行 +清除数组 (文本数组) + +.子程序 _删除当前_被选择 +.局部变量 i, 整数型 +.局部变量 局_保存文本, 鱼刺类_输出文本 +.局部变量 局_保存目录, 文本型 + +超级列表框1.删除表项 (超级列表框1.现行选中项) +.计次循环首 (超级列表框1.取表项数 (), i) + 系统_处理事件 () + 超级列表框1.置标题 (i - 1, 0, 到文本 (i)) +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), i) + 系统_处理事件 () + 超级列表框1.置状态图片 (i - 1, 1) + 超级列表框1.置标题 (i - 1, 0, 到文本 (i)) +.计次循环尾 () + + +.子程序 _删除勾选_被选择 +.局部变量 表项数, 整数型 +.局部变量 m, 整数型 +.局部变量 i, 整数型 +.局部变量 局_保存目录, 文本型 +.局部变量 局_保存文本, 鱼刺类_输出文本 + +表项数 = 超级列表框1.取表项数 () +.计次循环首 (表项数, m) + 系统_处理事件 () + .如果真 (超级列表框1.取当前状态图片 (表项数 - m) = 1) + 超级列表框1.删除表项 (表项数 - m) + .如果真结束 + +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), i) + 系统_处理事件 () + 超级列表框1.置状态图片 (i - 1, 1) + 超级列表框1.置标题 (i - 1, 0, 到文本 (i)) +.计次循环尾 () + + +.子程序 _清空CK_被选择 +.局部变量 局_保存目录, 文本型 + +超级列表框1.全部删除 () +局_保存目录 = 取运行目录 () + “\斗鱼CK\” + 时间_格式化 (取现行时间 (), “MM.dd-”) + “斗鱼CK.txt” +删除文件 (局_保存目录) + +.子程序 _按钮_刷新商品_被单击 + +启动线程 (&商品列表, , ) + +.子程序 商品列表 +.局部变量 str, 文本型 +.局部变量 yyjson, json对象 +.局部变量 N, 整数型 +.局部变量 sGoodsName, 文本型 +.局部变量 commodityId, 文本型 +.局部变量 列表NUM, 整数型 +.局部变量 局_文本, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_Cookie, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 str2, 文本型 +.局部变量 局_商品价格, 文本型 +.局部变量 局_商品id, 文本型 +.局部变量 局_商品名称, 文本型 +.局部变量 局_iGoodsId, 文本型 +.局部变量 局_商品图片, 文本型 +.局部变量 str3, 文本型 +.局部变量 jsonstr, 文本型 +.局部变量 userid, 文本型 +.局部变量 roleid, 文本型 +.局部变量 recommend, 文本型 +.局部变量 局_商品剩余, 文本型 +.局部变量 arr0, 文本型, , "0" +.局部变量 i, 整数型 +.局部变量 局_商品组, 文本型, , "0" +.局部变量 page_begin, 整数型 +.局部变量 h, 整数型 +.局部变量 局_成员数, 整数型 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + + +局_Cookie = 局_F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnival/nc/txEmbed/getIframeUrl?actAlias=20251203DSRGL&rid=9263298&token=” + 局_token, , , , , “Host: www.douyu.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “Accept: application/json, text/plain, */*” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “X-Requested-With: XMLHttpRequest” + #换行符 + “Sec-Fetch-Site: same-origin” + #换行符 + “Sec-Fetch-Mode: cors” + #换行符 + “Sec-Fetch-Dest: empty” + #换行符 + “Referer: https://www.douyu.com/topic/h5/hpxd01”)) +yyjson.清空 () +yyjson.解析 (str) +txurlH5 = yyjson.取文本 (“data/txurlH5”) +.如果真 (txurlH5 = “”) + 状态条1.置文本 (0, “登录失败:” + str) + 返回 () +.如果真结束 + +调试输出 (“txurlH5---”, txurlH5) +局_actId参 = 文本_取右边 (txurlH5, “?”) +' 获取openid +str3 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) +调试输出 (str3) +jsonstr = 文本_取出中间文本 (str3, “var info=”, “;”) +.如果真 (jsonstr = “”) + 状态条1.置文本 (0, “获取openid失败:” + str) + 返回 () +.如果真结束 + +yyjson.清空 () +yyjson.解析 (jsonstr) +userid = yyjson.取文本 (“gameOpenId”) +roleid = yyjson.取文本 (“roleId”) +.如果真 (userid = “” 且 roleid = “”) + 状态条1.置文本 (0, “获取openid失败:” + str3) + 返回 () +.如果真结束 + +' https://app.daoju.qq.com/act/a20251030cjmshop/index.html?actId=15218&appId=bp_cf&gameId=cjm&livePlatId=douyu&code=1IlzKlwbruO9ebjOCTMocQlxydv5IzacCeDpk3yUsjvt0QUbMHzExlC5jMhW8lRQGvFsfXPSJx00owM96v42O7Jil%2BMIKcriMarxWZSpR1OaS%2F9PuUvjI3vgXOl0psp3vro4FzCBHzSvbPEqNq%2Bb7%2FdhmTudAc3ZDnkHm4tBSpI%3D×tamp=1767251223&v=2.0&sig=472980670a86722fb1e8a19133e42b13 +' 调试输出 (“局_参1---”, 局_actId参) + + +.如果真 (组合框_取商品模式.现行选中项 = 0) ' ’全部 + page_begin = 0 + 组合框1.清空 () + .计次循环首 (2, i) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/v3/recommend_live/common?_service=act.recommend.query&_biz_code=cjm&_app_id=2123&app_id=2123&page_begin=” + 到文本 (page_begin) + “&page_num=” + 到文本 (i) + “&page_size=200&fields=iRelationGoodsid,dtModifyTime,sBuyLimitInfo,sGoodsWaterMark,dtShowBeginTime,dtShowEndTime,iSort,iGoodsId,sGoodsName,iJbPrice,iJbOrgPrice,iJb2Price,iJb2OrgPrice,iPrice,iOrgPrice,sGoodsPic,sGoodsDesc,sPayType,dtBeginTime,dtEndTime,iActionId,sExtShowInfo,sExtInfo,iCategoryId,dtRushBegin,dtRushEnd&actionFields=iActionId,sActionName,dtBeginTime,dtEndTime&order_by=dtShowBeginTime&orderColumnBatch=[{%22key%22:%22iSort%22,%22sort%22:%22desc%22},{%22key%22:%22dtShowBeginTime%22,%22sort%22:%22desc%22},{%22key%22:%22iGoodsId%22,%22sort%22:%22asc%22}]&desc=1&_act_id=44042&actid=44042&excludeFields=iCategoryId_76&userid=” + userid + “&roleid=” + roleid + “&area=1&areaid=1&need_limit=1”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + + recommend = 文本_取右边 (str2, “var recommend=”) + .如果真 (recommend = “”) + 状态条1.置文本 (0, “读取商品失败:” + str2) + 返回 () + .如果真结束 + + yyjson.清空 () + yyjson.解析 (recommend) + 状态条1.置文本 (0, “正在刷新列表商品....”) + 局_成员数 = yyjson.取成员数 (“data/client_data/itemsdetail”) + .计次循环首 (局_成员数, N) + 局_商品名称 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/sGoodsName”) + 局_商品价格 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iPrice”) + 局_iGoodsId = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iGoodsId”) + 局_商品图片 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/sGoodsPic”) + 局_商品剩余 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iGoodsLeft”) + 加入成员 (局_商品组, 局_商品名称 + “一” + 局_商品价格 + “一” + 局_iGoodsId + “一” + 局_商品图片 + “一” + 局_商品剩余) + 系统_处理事件 () + .计次循环尾 () + _原子赋值 (page_begin, 200) + .计次循环尾 () + .计次循环首 (取数组成员数 (局_商品组), h) + 组合框1.插入项目 (h - 1, 局_商品组 [h], ) + .计次循环尾 () + + +.如果真结束 +.如果真 (组合框_取商品模式.现行选中项 = 1) ' '热门 + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/v3/recommend_live/common?_service=act.recommend.query&_biz_code=cjm&_app_id=2123&app_id=2123&page_begin=0&page_num=1&page_size=200&fields=iRelationGoodsid,dtModifyTime,sBuyLimitInfo,sGoodsWaterMark,dtShowBeginTime,dtShowEndTime,iSort,iGoodsId,sGoodsName,iJbPrice,iJbOrgPrice,iJb2Price,iJb2OrgPrice,iPrice,iOrgPrice,sGoodsPic,sGoodsDesc,sPayType,dtBeginTime,dtEndTime,iActionId,sExtShowInfo,sExtInfo,iCategoryId,dtRushBegin,dtRushEnd&actionFields=iActionId,sActionName,dtBeginTime,dtEndTime&order_by=dtShowBeginTime&orderColumnBatch=[{%22key%22:%22iSort%22,%22sort%22:%22desc%22},{%22key%22:%22dtShowBeginTime%22,%22sort%22:%22desc%22},{%22key%22:%22iGoodsId%22,%22sort%22:%22asc%22}]&desc=1&_act_id=44042&actid=44042&category=76&userid=” + userid + “&roleid=” + roleid + “&area=1&areaid=1&need_limit=1&isNeedCollect=1”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + recommend = 文本_取右边 (str2, “var recommend=”) + .如果真 (recommend = “”) + 状态条1.置文本 (0, “读取商品失败:” + str2) + 返回 () + .如果真结束 + + yyjson.清空 () + yyjson.解析 (recommend) + 组合框1.清空 () + 状态条1.置文本 (0, “正在刷新列表商品....”) + .计次循环首 (yyjson.取成员数 (“data/client_data/itemsdetail”), N) + 局_商品名称 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/sGoodsName”) + 局_商品价格 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iPrice”) + 局_iGoodsId = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iGoodsId”) + 局_商品图片 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/sGoodsPic”) + 局_商品剩余 = yyjson.取文本 (“data/client_data/itemsdetail/” + 到文本 (N - 1) + “/iGoodsLeft”) + 组合框1.插入项目 (N - 1, 局_商品名称 + “一” + 局_商品价格 + “一” + 局_iGoodsId + “一” + 局_商品图片 + “一” + 局_商品剩余, ) + 系统_处理事件 () + .计次循环尾 () +.如果真结束 + +状态条1.置文本 (1, “载入商品【” + 到文本 (组合框1.取项目数 ()) + “】个”) +组合框1.现行选中项 = 0 +arr0 = 分割文本 (组合框1.取项目文本 (组合框1.现行选中项), “一”, ) +.如果真 (取数组成员数 (arr0) < 5) + 编辑框_剩余量.内容 = “NULL” + 返回 () +.如果真结束 + +编辑框_剩余量.内容 = arr0 [5] + +状态条1.置文本 (0, “列表商品刷新完成”) + +.子程序 _获取绑定二维码_被选择 + +启动线程 (&取APP二维码, , ) + +.子程序 取APP二维码, , , 安卓APP7.9.2 +.局部变量 ctn1, 文本型 +.局部变量 返回CK, 文本型 +.局部变量 局ID, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 yyjson, json对象 +.局部变量 绑定url, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 绑定游戏昵称, 文本型 +.局部变量 局_斗鱼昵称, 文本型 +.局部变量 图片句柄, 整数型 +.局部变量 局_token, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 res, 文本型 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +' ' 我心飞扬865----ojc97176----acf_auth=6a54%2FUwzcCCwyTxcHsebeOkzaW5qv11%2BhsUsj7qcx3tAqzIDUp0A97bdjsSWltrQsSQUw0Ao6y%2Fz0O5VefY6ZWZZNkwcA8DqPqR9ap5RusZVUcA3OCMIYbs; acf_jwt_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJtZDUifQ.eyJ1aWQiOjQ4MTc0MjE2MCwiY3QiOjAsInN1YiI6InN0IiwiYXVkIjpbImR5Iiwibm9uZSJdLCJiaXoiOjEsImx0a2lkIjo0ODkzODE0MCwic3RrIjoiNmRmYjAxMmE2NzdiOTA1ZSIsImV4cCI6MTc0MDU2OTIyNCwiaWF0IjoxNzM5OTY0NDI0LCJrZXkiOiJkeS1qd3QtbWQ1In0.ZjUzNGMyZTdhOTkwNDhhZDZlOTgwMzY5OTc2MmIwZjU; acf_dmjwt_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJtZDUifQ.eyJ1aWQiOjQ4MTc0MjE2MCwiY3QiOjAsInN1YiI6InN0IiwiYXVkIjpbImRtIiwibm9uZSJdLCJiaXoiOjEsImx0a2lkIjo0ODkzODE0MCwic3RrIjoiNmRmYjAxMmE2NzdiOTA1ZSIsImV4cCI6MTc0MDU2OTIyNCwiaWF0IjoxNzM5OTY0NDI0LCJrZXkiOiJkeS1qd3QtbWQ1In0.MmZlZjJiNTZiY2Y0NDY2N2Q5ZWIyMDBjM2IxZjA2OWU; dy_auth=005dgF8Td6gZT5aLGJtN0dGrzyvLnwhN2WlE0kwo78vIJ1jnidFYYzDMhqhj0mP62xKyVJgnUaoiLcR6E9yKaAjpxCuPLTosuGmrph2PSxP4GLIMLXYYuIA; wan_auth37wan=fb8d1222824721GYivbkydjCdsd5zUN5pWVkQgCnC66wqLrEKOaDElk4sH8xM60C767NEMu4jifK2tRTf4u13gZQqIz9vPJt3RwR8xCXpR%2BYkcAtYiE; acf_uid=481742160; acf_username=481742160; acf_nickname=%E6%88%91%E5%BF%83%E9%A3%9E%E6%89%AC865; acf_own_room=0; acf_groupid=1; acf_phonestatus=1; acf_avatar=https%3A%2F%2Fapic.douyucdn.cn%2Fupload%2Favatar_v3%2F202303%2F72b0b60566bd450cbbf6974fa7139e2a_; acf_ct=0; acf_ltkid=48938140; acf_biz=1; acf_stk=6dfb012a677b905e +' 局_斗鱼昵称 = 局_F [1] +局_Cookie = 局_F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +' 调试输出 (“token=” + 局_token + “&uid=” + acf_uid + “&client=mobile&actAlias=20241125NXFQY”) +res = 编码_Utf8到Ansi (网页_访问_对象 (“https://apiv2.douyucdn.cn/japi/carnivalApi/tencent/roleParam?client_sys=android”, 1, “token=” + 局_token + “&uid=” + acf_uid + “&client=mobile&actAlias=20241125NXFQY”, , , “User-Device: MDExZTUxMzEyYmYxMmY5MmQ3YmY1M2M4MDA3MDcxMTF8djcuOS4y” + #换行符 + “aid: android1” + #换行符 + “User-Agent: android/7.9.2 (android 9; ; M973Q)” + #换行符 + “Accept-Language: zh-CN” + #换行符 + “Content-Type: application/x-www-form-urlencoded” + #换行符 + “Content-Length: 97” + #换行符 + “Host: apiv2.douyucdn.cn” + #换行符 + “Connection: Keep-Alive”)) +' ’调试输出 (res) +yyjson.清空 () +yyjson.解析 (res) +绑定url = yyjson.取文本 (“data/url”) +局_斗鱼昵称 = 编码_URL解码_JS (yyjson.取文本 (“data/queryParams/nickName”), 1) +.如果真 (绑定url ≠ “”) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “绑定二维码已生成”) + 图片框1.图片 = 文本生成二维码图片 (绑定url, , , , , 10) + 状态条1.置文本 (1, “斗鱼名:” + 局_斗鱼昵称) + 绑定游戏昵称 = 检测是否绑定游戏账号 (局_token) + 列表_置游戏昵称 (超级列表框1.现行选中项, 1, 绑定游戏昵称) + + ' 检测账号 (局_Cookie, ctn2) + +.如果真结束 + + + +.子程序 和平集市登录XX, 逻辑型, , rid=9263298是房间号 +.参数 参_token, 文本型 +.参数 返回err0, 文本型, 参考 +.局部变量 str, 文本型 +.局部变量 yyjson, json对象 +.局部变量 txurlH5, 文本型 +.局部变量 返回状态码, 整数型 + +' 460636414_12_db61a0de7b339dcb_1_96359401 +.计次循环首 (5, ) + str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnival/nc/txEmbed/getIframeUrl?actAlias=20241125NXFQY&rid=9263298&token=” + 参_token, , , , , “Host: www.douyu.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “Accept: application/json, text/plain, */*” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 9; M973Q Build/PQ3A.190605.02140946; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36, Douyu_Android” + #换行符 + “X-Requested-With: XMLHttpRequest” + #换行符 + “Sec-Fetch-Site: same-origin” + #换行符 + “Sec-Fetch-Mode: cors” + #换行符 + “Sec-Fetch-Dest: empty” + #换行符 + “Referer: https://www.douyu.com/topic/h5/2025hpjs”, , 返回状态码, , , )) + ' 调试输出 (取程序名称 (1), “=============”, str) + .如果 (返回状态码 = 200) + 跳出循环 () + + .否则 + ' 这里再去IP + .如果结束 + +.计次循环尾 () +yyjson.清空 () +yyjson.解析 (str) +' sAnchorId = 是房间号 +txurlH5 = yyjson.取文本 (“data/txurlH5”) + “&sAnchorId=9263298&ch=” +.如果真 (txurlH5 ≠ “”) + 返回err0 = txurlH5 + 返回 (真) +.如果真结束 + +返回err0 = str +返回 (假) + +.子程序 检测账号, , , 通过兑换检测账号 +.参数 参_cook, 文本型 +.参数 参_ctn, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 ctnEX, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 局_xy, 文本型 +.局部变量 商品表, 文本型 +.局部变量 商品组, 文本型, , "0" +.局部变量 要兑换的商品名称, 文本型 +.局部变量 要兑换的商品价格, 文本型 +.局部变量 要兑换的商品ID, 文本型 +.局部变量 roleName, 文本型 +.局部变量 str2, 文本型 +.局部变量 局_bin, 字节集 +.局部变量 生成者, 文本型 +.局部变量 优化价格, 文本型 +.局部变量 areaName, 文本型 +.局部变量 platName, 文本型 +.局部变量 msg, 文本型 + +商品表 = 组合框1.取项目文本 (组合框1.现行选中项) +商品组 = 分割文本 (商品表, “一”, ) +.如果真 (取数组成员数 (商品组) < 3) + 状态条1.置文本 (0, “商品格式错误x”) + 返回 () +.如果真结束 + +' 要兑换的商品名称 = 商品组 [1] +' 要兑换的商品价格 = 商品组 [2]nZALooPn0kZPW&ditchname=pass0&roomId=999 +要兑换的商品ID = 商品组 [3] +窗口_置状态信息 (超级列表框1.现行选中项, 2, “检测账号...”) +状态条1.置文本 (0, “正在检测账号-> ”) +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/wgapi/ordnc/activity/peace/exchange”, 1, “manualID=nZyNEyQwpP6bX&rid=999&commodityID=” + 要兑换的商品ID + “&token%5Berror%5D%5Bcode%5D=-1&token%5Bdata%5D=&ctn=” + 参_ctn, 参_cook + “; acf_ccn=” + 参_ctn, , #常量7, 局_xy)) +' 调试输出 (str) +状态条1.置文本 (0, “检测账号:” + str) +.如果真 (寻找文本 (str, “需要开通精英手册”, , 假) ≠ -1 或 寻找文本 (str, “服务器繁忙”, , 假) ≠ -1 或 寻找文本 (str, “不在时间范围内”, , 假) ≠ -1) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “账号有效”) + ' ’str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnivalApi/tencent/bindInfo?actAlias=20220616CJSZU”, , , 参_cook, , #常量3)) + 返回 () +.如果真结束 + + +' msg = 文本_取出中间文本 (str, “msg” + #引号 + “:” + #引号, #引号) +.' 如果真 (msg = “”) + ' 窗口_置状态信息 (超级列表框1.现行选中项, 2, “账号异常”) + ' 返回 () +.如果真结束 + +窗口_置状态信息 (超级列表框1.现行选中项, 2, “账号异常”) + +.子程序 检测是否绑定游戏账号, 文本型 +.参数 参_token, 文本型 +.局部变量 str, 文本型 +.局部变量 roleName, 文本型 + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnivalApi/v2/tencent/bindInfo?actAlias=20241125NXFQY&token=” + 参_token, , , , , “Host: www.douyu.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “Accept: application/json, text/plain, */*” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 9; M973Q Build/PQ3A.190605.02140946; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/91.0.4472.114 Mobile Safari/537.36, Douyu_Android” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-origin” + #换行符 + “Sec-Fetch-Mode: cors” + #换行符 + “Sec-Fetch-Dest: empty” + #换行符 + “Referer: https://www.douyu.com/topic/h5/2025hpjs”)) +状态条1.置文本 (0, “查绑游戏名-> ” + str) +roleName = 文本_取出中间文本 (str, “roleName” + #引号 + “:” + #引号, #引号) +.如果真 (roleName ≠ “”) + 返回 (roleName) +.如果真结束 + +返回 (“null”) +' {"error":0,"msg":"success","data":{"bindAccount":1,"bindRole":1,"bindAct":1,"needBindRole":null,"txAct":{"txActId":2811,"gameId":"cjm","gameName":"和平精英","bindType":1},"gameAccount":{"bindType":2,"type":"","faceuri":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTI4cIOxb4f7vpSkqYCIIvY1EJTgkhS0ZhVzzJSl2LzDpUzVBJKiaDjvuzpdS6cadAvA6bnrYwZ7jlQ/132","nick":"zicoo"},"gameRole":{"roleName":"白菜被拱了呀","areaName":"微信","platName":"安卓(android)","partitionName":""},"isGranted":null,"gameAuthScene":null,"canChangeRole":0,"changeRoleWaitTime":2490528},"redirectUrl":null} + +' {"error":0,"msg":"success","data":{"bindAccount":0,"bindRole":0,"bindAct":0,"needBindRole":1,"needBindAct":0,"txAct":{"txActId":9873,"gameId":"cjm","gameName":"和平精英","bindType":0,"channelType":3},"gameAccount":{"bindType":0,"type":"","faceuri":"","nick":""},"gameRole":{"roleName":"","areaName":"","platName":"","partitionName":""},"isGranted":0,"gameAuthScene":null,"privacyAuthScene":"","canChangeRole":null,"changeRoleWaitTime":null,"changeRoleConfig":null},"redirectUrl":null} + +.子程序 _阵营预测确认绑定_被选择 + +启动线程 (&完成阵营预测绑定, , ) + +.子程序 完成阵营预测绑定 +.局部变量 str2, 文本型 +.局部变量 cvl_csrf_token, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 str, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 返回CK, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 绑定游戏昵称, 文本型 +.局部变量 msg, 文本型 +.局部变量 ctnEX, 文本型 +.局部变量 返回游戏name, 文本型 +.局部变量 str_0, 文本型 +.局部变量 roleName, 文本型 +.局部变量 nick, 文本型 +.局部变量 areaName, 文本型 +.局部变量 platName, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 yyjson, json对象 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +ctnEX = 超级列表框1.取标题 (超级列表框1.现行选中项, 5) + +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +局_Cookie = 局_F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://apiv2.douyucdn.cn/japi/carnivalApi/v2/tencent/bindInfo?actAlias=20251203VKZBM&client_sys=android”, , , , , “Host: apiv2.douyucdn.cn” + #换行符 + “token: ” + 局_token + #换行符 + “Connection: Keep-Alive” + #换行符 + “User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36”, , , 真)) +yyjson.清空 () +yyjson.解析 (str) +roleName = yyjson.取文本 (“data/gameRole/roleName”) +nick = yyjson.取文本 (“data/gameAccount/nick”) +areaName = yyjson.取文本 (“data/gameRole/areaName”) +platName = yyjson.取文本 (“data/gameRole/platName”) + +标签_状态.标题 = “昵称:” + nick + #换行符 + “游戏名称:” + roleName + #换行符 + “平台:” + areaName + #换行符 + “手机:” + platName + + +.子程序 精英二维码30 +.参数 参_ctn, 文本型 +.参数 参_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 str2, 文本型 +.局部变量 yyjson, json对象 +.局部变量 付款30链接, 文本型 + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/peace/item”, 1, “{” + #引号 + “itemId” + #引号 + “:1,” + #引号 + “ctn” + #引号 + “:” + #引号 + 参_ctn + #引号 + “}”, 参_Cookie + “; ” + “acf_ccn=” + 参_ctn, , #常量4)) +状态条1.置文本 (0, “取acf_ccn-> ” + str) +.如果真 (寻找文本 (str, “error” + #引号 + “:0”, , 假) ≠ -1) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/pay/getQrCode”, 1, “{” + #引号 + “bizType” + #引号 + “:” + #引号 + “peace” + #引号 + “,” + #引号 + “biz” + #引号 + “:{” + #引号 + “actAlias” + #引号 + “:” + #引号 + “20250213NQCYX” + #引号 + “,” + #引号 + “amount” + #引号 + “:3000,” + #引号 + “roomId” + #引号 + “:9263298},” + #引号 + “ctn” + #引号 + “:” + #引号 + 参_ctn + #引号 + “}”, 参_Cookie + “; ” + “acf_ccn=” + 参_ctn, , #常量4)) + 状态条1.置文本 (0, “开通手册-> ” + str2) + yyjson.清空 () + yyjson.解析 (str2) + 付款30链接 = yyjson.取文本 (“data/qr”) + .如果真 (付款30链接 ≠ “”) + 图片框1.图片 = 文本生成二维码图片 (付款30链接, , , , , 10) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “宝典二维码已生成”) + 状态条1.置文本 (1, “开通宝典,30元支付宝付款码”) + ' 标签反馈.标题 = “开通宝典,30元支付宝付款码” + 返回 () + .如果真结束 + + 窗口_置状态信息 (超级列表框1.现行选中项, 2, str2) + +.如果真结束 + + +.子程序 _开通精英手册30_被选择 + +启动线程 (&查积分记录, , ) +程序_延时 (2000) +启动线程 (&开通30精英, , ) + +.子程序 开通30精英 +.局部变量 局_文本, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_Cookie, 文本型 +.局部变量 ctnEX, 文本型 +.局部变量 str, 文本型 +.局部变量 str2, 文本型 +.局部变量 yyjson, json对象 +.局部变量 付款30链接, 文本型 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +ctnEX = 超级列表框1.取标题 (超级列表框1.现行选中项, 5) +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +局_Cookie = 局_F [3] + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/peace/item”, 1, “{” + #引号 + “itemId” + #引号 + “:1,” + #引号 + “ctn” + #引号 + “:” + #引号 + ctnEX + #引号 + “}”, 局_Cookie + “; ” + “acf_ccn=” + ctnEX, , #常量4)) +状态条1.置文本 (0, “取acf_ccn-> ” + str) +.如果真 (寻找文本 (str, “error” + #引号 + “:0”, , 假) ≠ -1) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/pay/getQrCode”, 1, “{” + #引号 + “bizType” + #引号 + “:” + #引号 + “peace” + #引号 + “,” + #引号 + “biz” + #引号 + “:{” + #引号 + “actAlias” + #引号 + “:” + #引号 + “20250213NQCYX” + #引号 + “,” + #引号 + “amount” + #引号 + “:3000,” + #引号 + “roomId” + #引号 + “:9263298},” + #引号 + “ctn” + #引号 + “:” + #引号 + ctnEX + #引号 + “}”, 局_Cookie + “; ” + “acf_ccn=” + ctnEX, , #常量4)) + 状态条1.置文本 (0, “开通手册-> ” + str2) + yyjson.清空 () + yyjson.解析 (str2) + 付款30链接 = yyjson.取文本 (“data/qr”) + ' 输出调试 (“30元支付宝付款码-> ”, 付款30链接) + .如果真 (付款30链接 ≠ “”) + 图片框1.图片 = 文本生成二维码图片 (付款30链接, , , , , 10) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “宝典二维码已生成”) + 状态条1.置文本 (1, “开通宝典,30元支付宝付款码”) + 返回 () + .如果真结束 + + 窗口_置状态信息 (超级列表框1.现行选中项, 2, str2) + +.如果真结束 + + +.子程序 _查询手册积分_被选择 + +启动线程 (&查手册积分, , ) + +.子程序 查手册积分 +.局部变量 局_文本, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 ctnEX, 文本型 +.局部变量 str, 文本型 +.局部变量 userid, 文本型 +.局部变量 diff, 文本型 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +ctnEX = 超级列表框1.取标题 (超级列表框1.现行选中项, 5) + +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +userid = 局_F [2] +局_Cookie = 局_F [3] + + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/peace/credit/diff”, 1, “{” + #引号 + “userId” + #引号 + “:” + #引号 + userid + #引号 + “,” + #引号 + “ctn” + #引号 + “:” + #引号 + ctnEX + #引号 + “}”, 局_Cookie, , #常量5)) + +' '{"error":0,"msg":"success","data":{"diff":300} +状态条1.置文本 (0, “查积分-> ” + str) +diff = 文本_取出中间文本 (str, “diff” + #引号 + “:”, “}”) +.如果真 (diff ≠ “”) + 窗口_置状态信息 (超级列表框1.现行选中项, 5, “积分:” + diff) + 返回 () +.如果真结束 + +窗口_置状态信息 (超级列表框1.现行选中项, 5, str) + +.子程序 _一键查询点券余额_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&查积点券, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + +.子程序 查积点券 +.参数 参_索引E, 整数型 +.局部变量 局_文本Ck, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 balance, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 yyjson, json对象 +.局部变量 gameOpenId, 文本型 +.局部变量 roleId, 文本型 +.局部变量 str2, 文本型 +.局部变量 msg, 文本型 +.局部变量 str_x, 文本型 +.局部变量 type, 文本型 +.局部变量 areaid, 文本型 +.局部变量 plat, 文本型 + +局_文本Ck = 超级列表框1.取标题 (参_索引E, 1) +_F = 分割文本 (局_文本Ck, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (参_索引E, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +全临界.进入 () +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全临界.退出 () +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (参_索引E, 2, 返回txurlH5) + 返回 () +.如果真结束 + +全临界.进入 () +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +全临界.退出 () + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) +' 调试输出 (str) +yyjson.清空 () +yyjson.解析 (文本_取出中间文本 (str, “var info=”, “;”)) +gameOpenId = yyjson.取文本 (“gameOpenId”) +roleId = yyjson.取文本 (“roleId”) +plat = yyjson.取文本 (“platId”) +type = yyjson.取文本 (“type”) +areaid = 选择 (type = “wx”, “1”, “2”) + +.如果真 (gameOpenId ≠ “” 且 roleId ≠ “”) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live/?_jsvar=banlanceInfo&_service=pay.midas.dq.get.ttpp&_app_id=2123&acctype=ttpp&areaid=” + areaid + “&eventid=&interwork=0&openid=” + gameOpenId + “&openkey=openkey&partition=0&pay_token=&plat=” + plat + “&plat_pc=0&roleid=” + roleId + “&_biz_code=cjm&_act_id=44042&_time=” + 时间_取现行时间戳 () + “&_sid=6”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + ' 调试输出 (str2) + 状态条1.置文本 (0, “余额:” + str2) + yyjson.清空 () + yyjson.解析 (文本_取出中间文本 (str2, “var banlanceInfo=”, “;”)) + balance = yyjson.取文本 (“balance”) + + 窗口_置状态信息 (参_索引E, 2, “点券:” + 选择 (balance ≠ “”, balance, “null”)) + 返回 () +.如果真结束 + +msg = 文本_取出中间文本 (str, “msg” + #引号 + “:” + #引号, #引号) +.如果真 (msg = “”) + msg = str +.如果真结束 + +窗口_置状态信息 (参_索引E, 2, msg) + + +.子程序 查积分记录, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_文本, 文本型 +.局部变量 uid, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 ctnEX, 文本型 +.局部变量 str, 文本型 +.局部变量 balance, 文本型 + +局_文本 = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +ctnEX = 超级列表框1.取标题 (超级列表框1.现行选中项, 5) + +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 (“NULL”) +.如果真结束 + +uid = 局_F [2] +局_Cookie = 局_F [3] + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/peace/credit/balance”, 1, “{” + #引号 + “uid” + #引号 + “:” + #引号 + uid + #引号 + “,” + #引号 + “ctn” + #引号 + “:” + #引号 + ctnEX + #引号 + “}”, 局_Cookie, , #常量6)) +balance = 文本_取出中间文本 (str, “balance” + #引号 + “:”, “,”) +状态条1.置文本 (0, “积分记录-> ” + str) + +.如果真 (balance ≠ “”) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “记录积分:” + balance) + 返回 (balance) +.如果真结束 + +窗口_置状态信息 (超级列表框1.现行选中项, 2, “NULL”) +返回 (“NULL”) + +.子程序 _购买商品_被选择 + +启动线程 (&APP购买, , ) + +.子程序 APP购买 +.局部变量 局_文本Ck, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 局_Cookie, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 str1, 文本型 +.局部变量 yyjson, json对象 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 商品组, 文本型, , "0" +.局部变量 要兑换的商品名称, 文本型 +.局部变量 要兑换的商品价格, 文本型 +.局部变量 要兑换的商品propid, 文本型 +.局部变量 局_商品图片, 文本型 +.局部变量 局_商品图片time, 文本型 +.局部变量 appext, 文本型 +.局部变量 purl, 文本型 +.局部变量 str2, 文本型 +.局部变量 局_bin, 字节集 +.局部变量 局_账号用户名, 文本型 +.局部变量 优化价格, 文本型 +.局部变量 游戏昵称, 文本型 +.局部变量 msg, 文本型 + +窗口_置状态信息 (超级列表框1.现行选中项, 2, “正在购买:” + 要兑换的商品名称) + +商品组 = 分割文本 (组合框1.取项目文本 (组合框1.现行选中项), “一”, ) +.如果真 (取数组成员数 (商品组) < 4) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “商品格式错误x”) + 返回 () +.如果真结束 + +要兑换的商品名称 = 商品组 [1] +要兑换的商品价格 = 商品组 [2] +要兑换的商品propid = 商品组 [3] +局_商品图片 = 文本_取出中间文本 (商品组 [4], “square/”, “.jpg”) +局_商品图片time = 文本_取右边 (商品组 [4], “_t=”) + +局_文本Ck = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +_F = 分割文本 (局_文本Ck, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +全登录临界.进入 () +局_账号用户名 = _F [1] +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全登录临界.退出 () +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, 返回txurlH5) + 返回 () +.如果真结束 + +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +' APP购买商品 +' purl = “https://apps.game.qq.com/daoju/igw/livebuy/?_service=buy.plug.svr.web&_plug_id=7200&_jsvar=buyInfo&acctype=livelink&_app_id=2123&iActionId=44042&propid=” + 要兑换的商品propid + “&paytype=1&source=9263298&sAnchorId=9263298&attach={%22ch%22:%220%22}&apptype=3&_biz_code=cjm&_act_id=44042&sLiveUserInfo={%22sAnchorId%22:%229263298%22,%22sVideoId%22:0}&” + 局_actId参 + “&appext=%7B%22user_price%22:” + 要兑换的商品价格 + “,%22sGoodsPic%22:%22” + 局_商品图片 + “%22,%22paytype%22:1%7D&_sid=8&set=8” + +.如果 (组合框2.现行选中项 = 0) + purl = “https://apps.game.qq.com/daoju/igw/livebuy/?_service=buy.plug.svr.web&_plug_id=7200&_jsvar=buyInfo&acctype=livelink&_app_id=2123&iActionId=44042&propid=” + 要兑换的商品propid + “&paytype=1&source=9263298&sAnchorId=9263298&attach={%22ch%22:%220%22}&apptype=3&_biz_code=cjm&_act_id=44042&sLiveUserInfo={%22sAnchorId%22:%229263298%22,%22sVideoId%22:0}&” + 局_actId参 + “&appext=%7B%22user_price%22:” + 要兑换的商品价格 + “,%22sGoodsPic%22:%22” + 局_商品图片 + “%22,%22paytype%22:1%7D&_sid=8&set=8” + +.否则 + purl = “https://apps.game.qq.com/daoju/igw/livebuy/?_service=buy.plug.svr.web&_plug_id=7200&_jsvar=buyInfo&acctype=livelink&_app_id=2123&iActionId=44042&propid=” + 要兑换的商品propid + “&paytype=5&source=9263298&sAnchorId=9263298&attach={%22ch%22:%220%22}&apptype=3&_biz_code=cjm&_act_id=44042&sLiveUserInfo={%22sAnchorId%22:%229263298%22,%22sVideoId%22:0}&” + 局_actId参 + “&appext=%7B%22user_price%22:” + 要兑换的商品价格 + “,%22sGoodsPic%22:%22” + 局_商品图片 + “%22,%22paytype%22:5%7D&_sid=8&set=8” +.如果结束 + + +str1 = 编码_Utf8到Ansi (网页_访问_对象 (purl, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua: ” + #引号 + “” + #引号 + “” + #换行符 + “sec-ch-ua-mobile: ?1” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”, , , 真, , )) +状态条1.置文本 (0, “购买:” + str1) +' 调试输出 (“APP购买商品--”, str1) +' 购买成功返回:'var buyInfo={"act_amount":800,"event_id":"DJC-CJM-0101113752-nazUnu-44042-007277","iPayType":"1","msg":"ok","newBalance":170,"ret":"0","sSerialNum":"CJM-20260101113752036-860804563","serial":"CJM-20260101113752036-860804563","serverTime":1767238672,"span":"0-4","trace_id":"070c4fd9ac0e50ad80ca64b83e8df299","ts":"1767238672"}; + +.如果真 (寻找文本 (str1, “msg” + #引号 + “:” + #引号 + “ok” + #引号, , 假) ≠ -1) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “购买成功:” + 要兑换的商品名称) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + + 状态条1.置文本 (0, “查询:” + str1) + ' 返回: var info={"area":1,"code":{"userid":"12353341"},"event_id":"DJC-CJM-0101111544-XPqqUw-44042-936077","gameOpenId":"osewR0kigZPfAHU-hL9PNVhhsqMk","openIdType":"openid","partition":0,"platId":1,"roleId":"3667375425","roleName":"小竖林里吃过亏","type":"wx"}; + + 游戏昵称 = 文本_取出中间文本 (str2, “roleName” + #引号 + “:” + #引号, #引号) + 优化价格 = 到文本 (到整数 (要兑换的商品价格) ÷ 10) + 保存日志2 (时间_到文本 (取现行时间 (), 1) + “ ” + 局_账号用户名 + “----” + 游戏昵称 + “----” + 要兑换的商品名称 + “----” + 优化价格) + 局_bin = 文转图片P (要兑换的商品名称 + “ ” + #换行符 + 时间_格式化 (取现行时间 (), “yyyy年MM月dd日”, “ hh:mm:ss”, 真) + #换行符 + “兑换账号:” + 游戏昵称 + “(” + 局_账号用户名 + “)”) + 剪辑板_置图片 (局_bin) + 提示框 (“兑换成功,图片已复制”, , , , 1000) + 返回 () +.如果真结束 + + +msg = 文本_取出中间文本 (str1, “msg” + #引号 + “:” + #引号, #引号) +.如果真 (msg = “”) + msg = str1 +.如果真结束 + +窗口_置状态信息 (超级列表框1.现行选中项, 2, msg) + +.子程序 登录和平集市, 逻辑型, , rid=9263298是房间号 +.参数 参_token, 文本型 +.参数 返回txurlH5, 文本型, 参考 +.局部变量 str, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 局_账号用户名, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 yyjson, json对象 +.局部变量 txurlH5, 文本型 + +.计次循环首 (2, ) + str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnival/nc/txEmbed/getIframeUrl?actAlias=20251203DSRGL&rid=9263298&token=” + 参_token, , , , , “Host: www.douyu.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “Accept: application/json, text/plain, */*” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “X-Requested-With: XMLHttpRequest” + #换行符 + “Sec-Fetch-Site: same-origin” + #换行符 + “Sec-Fetch-Mode: cors” + #换行符 + “Sec-Fetch-Dest: empty” + #换行符 + “Referer: https://www.douyu.com/topic/h5/hpxd01”)) + yyjson.清空 () + yyjson.解析 (str) + txurlH5 = yyjson.取文本 (“data/txurlH5”) + .如果真 (txurlH5 ≠ “”) + 返回txurlH5 = txurlH5 + 返回 (真) + .如果真结束 + +.计次循环尾 () +返回txurlH5 = “登录失败:” + str +返回 (假) + +.子程序 和平集市_查询购买记录 +.局部变量 purl, 文本型 +.局部变量 str, 文本型 + +purl = “https://apps.game.qq.com/daoju/igw/live/?_service=order.list&_biz_code=cjm&_app_id=2123&hist=0&ps=10&pn=1&stat_set=&act_set=34278&_jsvar=oResult&set=3&actId=9873&appId=bp_cf&gameId=cjm&livePlatId=douyu&code=1IlzKlwbruO9ebjOCTMocQlxydv5IzacCeDpk3yUsjvt0QUbMHzExlC5jMhW8lRQGvFsfXPSJx00owM96v42O7Jil%2BMIKcriMarxWZSpR1PoFewIld5lClXmHQQRIVzjJIGIJYmIWatvhzWlPvUwa%2FdhmTudAc3ZDnkHm4tBSpI%3D×tamp=1740455023&v=2.0&sig=a5e5b31b8138ea1ebf36eacbe5cd8981&acctype=livelink” + +str = 编码_Utf8到Ansi (网页_访问_对象 (purl, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”, , , 真, , )) + + +' 返回: var oResult={"data":{"cnt":1,"list":[{"bizName":"和平精英","del":"0","dtBuyTime":"2025-02-25 11:43:50","dtCancelTime":"0000-00-00 00:00:00","dtPayTime":"2025-02-25 11:43:50","iActionId":"34278","iAppId":"2123","iCJiFenActId":"0","iCJiFenAmount":"0","iChannel":"2123090001","iCoin1Amount":"0","iCouponAmount":"0","iDianQuanAmount":"2500","iFreeDqAmount":"380","iPayAmount":"0","iPlugId":"7200","iPrice":"2880","iRefund":"0","iRewardAmount":"0","iStatus":"3","iTicketAmount":"0","iValidSeconds":"3600","iWalletAmount":"0","iZoneId":"1","lBuyUin":"*","lGetUin":"*","lPayUin":"*","lRoleId":"3667****25","sActionDesc":"2025和平集市","sAppExt":"%7B%22user_price%22:2880,%22sGoodsPic%22:%22https://ossweb-img.qq.com/images/daoju/app/cjm/square/N-cjm-1-111591-107302-s50250.jpg?_t=1737518412%22,%22paytype%22:1%7D","sAttach":"{\"linksee_info\":{\"sLinkSeeId\":\"0\",\"sLinkSeeAct\":\"\"}}","sAwardInfo":"","sBizCode":"cjm","sBuyUid":"6jq4n9ae4965ea6dcf0eb0ff****7f","sCallbackData":"","sCoupon":"","sEventId":"DJC-CJM-0225114350-Zvpgof-34278-337967","sGetUid":"osewR0kigZPfAHU-hL9PNV****Mk","sGoodsInfo":"{\"award\":0,\"iRet\":0,\"iTotalNum\":1,\"isFree\":0,\"isFreeJf\":0,\"isWhiteOpenid\":0,\"list\":[{\"acctype\":\"livelink\",\"bPresale\":\"0\",\"iAmsItemType\":\"3\",\"iAmsType\":\"1\",\"iAutoItemId\":\"107303\",\"iAutoTypeId\":\"111591\",\"iBuyType\":\"0\",\"iCategoryId\":\"428\",\"iDayType\":\"\",\"iGoodsId\":\"1018679\",\"iGoodsPayAmount\":2880,\"iGoodsUnitPayAmount\":2880,\"iInfoId\":\"\",\"iIsUseTGPC\":\"1\",\"iOrgPrice\":2880,\"iPacketNum\":\"1\",\"iPartition\":0,\"iPlatId\":1,\"iPlugSvr\":1,\"iPrice\":2880,\"iQuantity\":1,\"iRelationGoodsId\":\"50250\",\"iSendDst\":\"0\",\"iSendType\":\"-1\",\"iSeqId\":\"1018679\",\"iShowNum\":\"1\",\"iSubCategoryId\":\"0\",\"iTemplId\":\"107303\",\"iUidType\":\"0\",\"iZoneId\":1,\"idipData\":{},\"lRoleId\":\"3667375425\",\"mrmsParams\":{\"sLinkSeeAct\":\"\",\"sLinkSeeId\":\"0\",\"sMailContent\":\"%E8%83%8C%E5%8C%85%E6%8C%82%E4%BB%B6-%E9%A3%8E%E6%9A%B4%E6%97%B6%E4%BB%A3%E5%8F%91%E8%B4%A7%E9%80%9A%E7%9F%A5\",\"sMailTitle\":\"2025%E5%92%8C%E5%B9%B3%E9%9B%86%E5%B8%82%E5%8F%91%E8%B4%A7%E9%80%9A%E7%9F%A5\"},\"sAmsActId\":\"699836\",\"sAmsBiz\":\"cjm\",\"sAmsModId\":\"665628\",\"sCharacNo\":\"3667****25\",\"sDayType\":\"永久\",\"sGoodsName\":\"背包挂件-风暴时代\",\"sGoodsPic\":\"https://ossweb-img.qq.com/images/daoju/app/cjm/square/N-cjm-1-111591-107302-s50250.jpg?_t=1737518412\",\"sItemId\":\"802433\",\"sItemValue\":\"2880\",\"sMrmsGid\":\"3727933\",\"sMrmsGiftId\":\"IEGAMS-699836-665628\",\"sMrmsPid\":\"6086990\",\"sPacketName\":\"背包挂件-风暴时代\",\"sPayType\":1}],\"merge\":\"0\",\"origin\":\"xn\",\"sMsg\":\"ok\",\"sUserIp\":\"123.130.221.161\"}","sLimitKey":"","sPayData":"","sPayType":"","sPayTypeChannel":"qpqb,tenpay,quick,bank,weixinpay","sPayUid":"6jq4n9ae4965ea6dcf0eb0ff****7f","sPortalSerialNo":"CJM-20250225114350369-490304391","sRemark":"","sRoleName":"小竖林里吃过亏","sSerialNum":"CJM-20250225114350369-490304391","sSource":"9263298","sUserInfo":"{\"appid\":\"wxc4c0253df149f02d\",\"ip\":\"123.130.221.161\",\"level\":1,\"partition\":0,\"plat\":1,\"platid\":1,\"roleid\":\"3667****25\",\"sVideoId\":\"\",\"uid\":\"6jq4n9ae4965ea6dcf0eb0ff****7f\",\"uin\":\"\",\"zone\":1}","sZoneDesc":""}]},"event_id":"DJC-CJM-0225120604-1hVoRY-499-501489","msg":"ok","ret":"0","span":"0-2","trace_id":"3ef384337e70607235a99f877b594767","ts":"1740456364"}; + +.子程序 查积分记录EX, 文本型 +.参数 参_uid, 文本型 +.参数 参_CK, 文本型 +.参数 参_ctnEX, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_文本, 文本型 +.局部变量 str, 文本型 +.局部变量 balance, 文本型 + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/oms/web/peace/credit/balance”, 1, “{” + #引号 + “uid” + #引号 + “:” + #引号 + 参_uid + #引号 + “,” + #引号 + “ctn” + #引号 + “:” + #引号 + 参_ctnEX + #引号 + “}”, 参_CK, , #常量6)) +balance = 文本_取出中间文本 (str, “balance” + #引号 + “:”, “,”) +状态条1.置文本 (0, “积分记录-> ” + str) +返回 (balance) + +.子程序 _图片框1_被双击, 逻辑型 +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 + +.如果真 (图片框1.图片 = { }) + 提示框 (“请先生成后,再复制二维码”, , , , 1000) + 返回 () +.如果真结束 + +剪辑板_置图片 (图片框1.图片) +' 剪辑板_置图片 (图片_后台截图 (图片框4.取窗口句柄 ())) +提示框 (“二维码已复制”, , , , 1000) + +.子程序 _超级列表框1_被双击, 逻辑型 +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 + +启动线程 (&子程序标签更新, , ) + +.子程序 子程序标签更新 +.局部变量 局_文本Ck, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 局_Cookie, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 str, 文本型 +.局部变量 游戏昵称, 文本型 +.局部变量 局_账号用户名, 文本型 +.局部变量 type, 文本型 +.局部变量 局_平台, 文本型 +.局部变量 gameOpenId, 文本型 +.局部变量 str2, 文本型 +.局部变量 yyjson, json对象 +.局部变量 roleId, 文本型 +.局部变量 balance, 文本型 + +局_文本Ck = 超级列表框1.取标题 (超级列表框1.现行选中项, 1) +_F = 分割文本 (局_文本Ck, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +全登录临界.进入 () +局_账号用户名 = _F [1] +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全登录临界.退出 () +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (超级列表框1.现行选中项, 2, 返回txurlH5) + 返回 () +.如果真结束 + +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) +' 'var oResult={"area":1,"code":{"userid":"6jq4n9ae4965ea6dcf0eb0ffdd767f"},"gameOpenId":"osewR0kigZPfAHU-hL9PNVhhsqMk","openIdType":"openid","partition":0,"platId":1,"roleId":"3667375425","roleName":"小竖林里吃过亏","type":"wx"}; +yyjson.清空 () +yyjson.解析 (文本_取出中间文本 (str, “var info=”, “;”)) +游戏昵称 = yyjson.取文本 (“roleName”) +type = yyjson.取文本 (“type”) +gameOpenId = yyjson.取文本 (“gameOpenId”) +roleId = yyjson.取文本 (“roleId”) +.如果 (type ≠ “” 或 gameOpenId ≠ “” 且 roleId ≠ “”) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live/?_jsvar=banlanceInfo&_service=pay.midas.dq.get.ttpp&_app_id=2123&acctype=ttpp&areaid=1&eventid=&interwork=0&openid=” + gameOpenId + “&openkey=openkey&partition=0&pay_token=&plat=1&plat_pc=0&roleid=” + roleId + “&_biz_code=cjm&_act_id=44042&_time=” + 时间_取现行时间戳 () + “&_sid=6”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + + + + 调试输出 (“查询余额:”, str2) + 状态条1.置文本 (0, “余额:” + str2) + yyjson.清空 () + yyjson.解析 (文本_取出中间文本 (str2, “var banlanceInfo=”, “;”)) + balance = yyjson.取文本 (“balance”) + 局_平台 = 选择 (type = “wx”, “微信”, “QQ”) + +.否则 + 局_平台 = “null” +.如果结束 + +标签_昵称.标题 = “账号:” + 局_账号用户名 + “<->” + “余额:” + 选择 (balance ≠ “”, balance, “null”) +标签_状态.标题 = “昵称:” + 局_账号用户名 + #换行符 + “游戏名称:” + 选择 (游戏昵称 ≠ “”, 游戏昵称, “null”) + #换行符 + “平台:” + 局_平台 +超级列表框1.置标题 (超级列表框1.现行选中项, 2, 游戏昵称) + +.子程序 _标签_状态_被双击, 逻辑型 +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 + +剪辑板_置图片 (快照 (标签_状态.取窗口句柄 (), , )) +提示框 (“图片已复制”, , , , 1000) + +.子程序 _窗口1_可否被关闭, 逻辑型 + +.如果 (信息框 (“确定要退出程序吗?”, #信息图标 + #确认钮 + #取消钮, , ) = #确认钮) + 返回 (真) +.否则 + 返回 (假) +.如果结束 + + +.子程序 _窗口1_将被销毁 + +Gdip结束 () +数据写出列表 () + +.子程序 子程序处理余额, 整数型 +.参数 参_数据, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 N, 整数型 + +局_F = 分割文本 (参_数据, “----”, ) +.如果真 (取数组成员数 (局_F) = 4) + 返回 (到整数 (局_F [4])) +.如果真结束 + +返回 (0) + +.子程序 _按钮_统计_被单击 +.局部变量 str, 文本型 +.局部变量 局_日志路径, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 P, 整数型 +.局部变量 局_返回余额, 整数型 +.局部变量 局_NUM, 整数型 + +局_日志路径 = 取运行目录 () + “\” + 时间_格式化 (取现行时间 (), “MM.dd-”) + “兑换日志.log” +str = 编码_Utf8到Ansi (读入文件 (局_日志路径)) +局_F = 分割文本 (str, #换行符, ) +.计次循环首 (取数组成员数 (局_F), P) + 局_返回余额 = 子程序处理余额 (局_F [P]) + _原子运算 (局_NUM, 局_返回余额) + 系统_处理事件 () +.计次循环尾 () +保存日志2 (#换行符 + #换行符 + “*************************************************今日统计总金额:” + 到文本 (局_NUM) + #换行符 + #换行符) +信息框 (时间_格式化 (取现行时间 (), “MM.dd-”) + “统计总金额:” + 到文本 (局_NUM), 0, , ) + + +.子程序 _读取Cookie_被选择 +.局部变量 局_保存目录, 文本型 +.局部变量 局_文本数据, 文本型 +.局部变量 局_文本数组, 文本型, , "0" +.局部变量 局_索引, 整数型 +.局部变量 P, 整数型 +.局部变量 N, 整数型 +.局部变量 局_3, 文本型, , "0" + +局_保存目录 = 取运行目录 () + “\斗鱼CK\” + 时间_格式化 (取现行时间 (), “MM.dd-”) + “斗鱼CK.txt” +.如果真 (文件是否存在 (局_保存目录) = 假) + 提示框 (“Cookie文件不存在!” + #换行符 + 局_保存目录, , , , 2000) + 返回 () +.如果真结束 + + +局_文本数据 = 到文本 (读入文件 (局_保存目录)) +局_文本数组 = 分割文本 (局_文本数据, #换行符, ) +.计次循环首 (取数组成员数 (局_文本数组), P) + 判断重复列表 (局_文本数组 [P]) + 系统_处理事件 () +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), N) + 系统_处理事件 () + 超级列表框1.置状态图片 (N - 1, 1) + 超级列表框1.置标题 (N - 1, 0, 到文本 (N)) +.计次循环尾 () + +.子程序 判断重复列表 +.参数 参_内容, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 局_用户, 文本型 +.局部变量 _索引, 整数型 +.局部变量 局_索引2, 整数型 +.局部变量 P, 整数型 + +_索引 = 超级列表框1.查找表项 (参_内容, , , 1) +.如果 (_索引 = -1) + 局_索引2 = 超级列表框1.插入表项 (, , , , , ) + 超级列表框1.置标题 (局_索引2, 0, 到文本 (局_索引2 + 1)) + 超级列表框1.置标题 (局_索引2, 1, 参_内容) + 超级列表框1.置状态图片 (局_索引2, 1) + +.否则 + 超级列表框1.置标题 (_索引, 1, 参_内容) +.如果结束 + + +.子程序 _同步删除Cookie_被选择 +.局部变量 局_保存目录, 文本型 +.局部变量 局_保存文本, 鱼刺类_输出文本 +.局部变量 i, 整数型 +.局部变量 P, 整数型 + +局_保存目录 = 取运行目录 () + “\斗鱼CK\” + 时间_格式化 (取现行时间 (), “MM.dd-”) + “斗鱼CK.txt” +超级列表框1.删除表项 (超级列表框1.现行选中项) +删除文件 (局_保存目录) +程序_延时 (500) +局_保存目录 = 取运行目录 () + “\斗鱼CK\” +.计次循环首 (超级列表框1.取表项数 (), i) + 系统_处理事件 () + 局_保存文本.写文本行 (超级列表框1.取标题 (i - 1, 1), 时间_格式化 (取现行时间 (), “MM.dd-”) + “斗鱼CK”, 局_保存目录, “.txt”) +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), P) + 系统_处理事件 () + 超级列表框1.置状态图片 (P - 1, 1) + 超级列表框1.置标题 (P - 1, 0, 到文本 (P)) +.计次循环尾 () + +提示框 (“同步完成”, , , , 1000) + +.子程序 保存日志 +.参数 参_str, 文本型 +.局部变量 filename, 文本型 +.局部变量 保存到文件, 鱼刺类_输出文本 + +filename = 时间_格式化 (取现行时间 (), “MM.dd-”) + “流程日志” +保存到文件.写文本行 (参_str, filename, 取运行目录 () + “\”, “.log”) + +.子程序 保存日志2 +.参数 参_str, 文本型 +.局部变量 filename, 文本型 +.局部变量 保存到文件, 鱼刺类_输出文本 + +filename = 时间_格式化 (取现行时间 (), “MM.dd-”) + “兑换日志” +保存到文件.写文本行 (参_str, filename, 取运行目录 () + “\”, “.log”) +保存到文件.关闭所有文件占用 () + +.子程序 数据写入列表, , , APP +.局部变量 文件号, 整数型 +.局部变量 文件名, 文本型 +.局部变量 状态数组, 文本型, , "0" +.局部变量 文本数组, 文本型, , "0" +.局部变量 M, 整数型 +.局部变量 N, 整数型 +.局部变量 局_状态图片, 整数型 + +文件名 = 全目录临时 + “\临时ck.txt” +文件号 = 打开文件 (文件名, , ) +移到文件首 (文件号) +处理事件 () +.判断循环首 (取反 (是否在文件尾 (文件号, 真))) + 重定义数组 (状态数组, 假, 0) + 重定义数组 (文本数组, 假, 0) + 状态数组 = 分割文本 (读入一行 (文件号), “$”, ) + .如果真 (取数组成员数 (状态数组) ≥ 2) + .如果 (状态数组 [1] = “x”) + 局_状态图片 = 1 + .否则 + 局_状态图片 = 0 + .如果结束 + 文本数组 = 分割文本 (状态数组 [2], “|||”, ) + M = 超级列表框1.插入表项 (, , , , , ) + + 超级列表框1.置状态图片 (M, 局_状态图片) + .计次循环首 (取数组成员数 (文本数组), N) + 系统_处理事件 () + 超级列表框1.置标题 (M, N - 1, 文本数组 [N]) + .如果真 (N = 20) ' 填充满一页就手动重画 + 超级列表框1.禁止重画 () + .如果真结束 + .如果真 (N % 100 = 0) ' 每100次插入 换一次姿势 ``233333 + 超级列表框1.允许重画 () + 超级列表框1.发送信息 (277, 7, 0) ' 显示最后一行 + 超级列表框1.禁止重画 () + .如果真结束 + + .计次循环尾 () + + + + .如果真结束 + +.判断循环尾 () +关闭文件 (文件号) +超级列表框1.允许重画 () ' 恢复自动重画 +超级列表框1.发送信息 (277, 7, 0) ' 显示最后一行 + +.子程序 数据写出列表, , , APP +.局部变量 文件名, 文本型 +.局部变量 读入账号, 文本型 +.局部变量 n, 整数型 +.局部变量 临时文件名, 文本型 +.局部变量 文件号, 整数型 +.局部变量 文本, 文本型 +.局部变量 空, 字节集 +.局部变量 局_状态图片, 文本型 + +临时文件名 = 全目录临时 + “\临时ck.txt” +文件号 = 打开文件 (临时文件名, 4, ) +_处理事件 () +文本 = “” + +.计次循环首 (超级列表框1.取表项数 (), n) + 系统_处理事件 () + .判断开始 (超级列表框1.取当前状态图片 (n - 1) = 1) + 局_状态图片 = “x” + + .默认 + 局_状态图片 = “y” + .判断结束 + + 文本 = 局_状态图片 + “$” + 超级列表框1.取标题 (n - 1, 0) + “|||” + 超级列表框1.取标题 (n - 1, 1) + “|||” + 超级列表框1.取标题 (n - 1, 2) + “|||” + 超级列表框1.取标题 (n - 1, 3) + “|||” + 超级列表框1.取标题 (n - 1, 4) + “|||” + 超级列表框1.取标题 (n - 1, 5) + “|||” + 超级列表框1.取标题 (n - 1, 6) + + 写文本行 (文件号, 文本) +.计次循环尾 () +关闭文件 (文件号) + +.子程序 _标签_昵称_被双击, 逻辑型, , https://livelink.qq.com/act/a20200527midgroupage/pc/?sig=0d29d14f3e9bdb05f7f091340952054f&faceUrl=https%3A%2F%2Fapic.douyucdn.cn%2Fupload%2Favatar%2Fdefault%2F15_middle.jpg&code=wW6EhNWpLEVNHKEMfB9vaEWKPdowIikRqFJI0IKm%2BcxGa%2B8OEPhyF%2BZ58W80CrGigCGtLddIofBcnRkylmccKw%3D%3D&redirectUrl=null&t=1661433534&livePlatId=douyu&nickName=%E7%94%A8%E6%88%B702435853&actId=2811&gameIdList=cjm +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 +.局部变量 str, 文本型, , , 昵称:null <-> 余额:null + +str = 删首尾空 (文本_取出中间文本 (标签_昵称.标题, “账号:”, “<->”)) +置剪辑板文本 (str) +提示框 (str + “ 已复制”, , , , 1000) + +.子程序 _按钮_关闭_被单击, , , 测试 + +_扫码框.可视 = 假 +工作中 = 假 +关闭线程句柄 (集句柄) +强制结束线程 (集句柄) + +.子程序 _扫码登录_被选择 + +' 载入 (窗口_扫码, , 真) +_扫码框.可视 = 真 +标签显示.可视 = 假 +按钮_刷新.可视 = 假 +按钮_刷新.禁止 = 真 +启动线程 (&getscanEX, , 集句柄) + +.子程序 getscanEX, 逻辑型, , 获取扫码 +.局部变量 str, 文本型 +.局部变量 yyjson, json对象 +.局部变量 surl, 文本型 +.局部变量 code, 文本型 +.局部变量 bool, 逻辑型 +.局部变量 局_Code, 文本型 +.局部变量 局_msg, 文本型 +.局部变量 局_LoginUrl, 文本型 +.局部变量 CK, 文本型 + +图片框2.图片 = { } +网页_清除Cookie (“passport.douyu.com”) +标签_反馈.标题 = “正在二维码...” +网页_访问_对象 (“https://passport.douyu.com/index/login?passport_reg_callback=PASSPORT_REG_SUCCESS_CALLBACK&passport_login_callback=PASSPORT_LOGIN_SUCCESS_CALLBACK&passport_close_callback=PASSPORT_CLOSE_CALLBACK&passport_dp_callback=PASSPORT_DP_CALLBACK&type=login&client_id=1&state=https%3A%2F%2Fwww.douyu.com%2F&source=click_topnavi_login”, , , “dy_did=05444ffb59d181b4d194b59900011601; acf_did=05444ffb59d181b4d194b59900011601; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=” + 到文本 (时间_取现行时间戳1 (假)), , #常量8) +程序_延时 (1000) +str = 编码_usc2到ansi (到文本 (网页_访问_对象 (“https://passport.douyu.com/scan/generateCode”, 1, “client_id=1&isMultiAccount=0”, “dy_did=05444ffb59d181b4d194b59900011601; acf_did=05444ffb59d181b4d194b59900011601; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=” + 到文本 (时间_取现行时间戳1 (假)), , #扫码XY1))) + +' “dy_did=05444ffb59d181b4d194b59900011601; acf_did=05444ffb59d181b4d194b59900011601; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=” + 到文本 (时间_取现行时间戳1 (假)) + +' 调试输出 (str) +yyjson.清空 () +yyjson.解析 (str) +surl = yyjson.取文本 (“data/url”) +局_Code = yyjson.取文本 (“data/code”) +.如果真 (surl = “” 或 局_Code = “”) + 标签_反馈.标题 = “请关闭后重新生成二维码!” + 返回 (假) +.如果真结束 + +图片框2.图片 = 文本生成二维码图片 (surl, , , , , 20) +标签_反馈.标题 = “二维码已生成,请在手机上确认!” + +工作中 = 真 +.判断循环首 (工作中 = 真) + bool = scanauthEX (局_Code, 局_msg, 局_LoginUrl) + .如果真 (bool = 真) + 跳出循环 () + .如果真结束 + + .如果真 (寻找文本 (局_msg, “code不存在或者是已经过期”, , 假) ≠ -1) + 关闭线程句柄 (集句柄) + 强制结束线程 (集句柄) + 标签显示.可视 = 真 + 按钮_刷新.可视 = 真 + 按钮_刷新.禁止 = 假 + 返回 (假) + .如果真结束 + + 程序_延时 (1000) + 系统_处理事件 () +.判断循环尾 () +Login_douEX (局_LoginUrl) +返回 (真) + +.子程序 scanauthEX, 逻辑型, , 检测是否扫码 +.参数 参_code, 文本型 +.参数 返回msg, 文本型, 参考 +.参数 参_登录url, 文本型, 参考 +.局部变量 str, 文本型 +.局部变量 yyjson, json对象 +.局部变量 局_msg, 文本型 +.局部变量 局surl, 文本型 + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://passport.douyu.com/japi/scan/auth?time=” + 时间_取现行时间戳 () + “&code=” + 参_code, , , , , #扫码XY1)) +调试输出 (“参_code---”, 参_code) +调试输出 (str) +yyjson.清空 () +yyjson.解析 (str) +返回msg = yyjson.取文本 (“msg”) +参_登录url = yyjson.取文本 (“data/url”) +标签_反馈.标题 = “>>>>” + 返回msg +.如果真 (参_登录url ≠ “”) + 标签_反馈.标题 = “扫码成功,正在登录...” + 返回 (真) +.如果真结束 + +返回 (假) + +.子程序 Login_douEX, , , 登录斗鱼 +.参数 参_url, 文本型 +.局部变量 str, 文本型 +.局部变量 局_索引, 整数型 +.局部变量 局_COOK, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_nickname, 文本型 +.局部变量 解析CK, 类_Cookie + +str = 编码_usc2到ansi (到文本 (网页_访问_对象 (参_url + “&callback=appClient_json_callback&_=” + 时间_取现行时间戳 (), , , , 局_COOK, #扫码登录))) +' 调试输出 (str) +调试输出 (“局_COOK---”, 局_COOK) +.如果真 (局_COOK ≠ “”) + 标签_反馈.标题 = “>>>扫码登录成功!” + acf_uid = 网页_取单条Cookie (局_COOK, “acf_uid”, 真) + + acf_nickname = 编码_URL解码 (网页_取单条Cookie (局_COOK, “acf_nickname”, 真), 真) + 局_索引 = 超级列表框1.插入表项 (, , , , , ) + 超级列表框1.置标题 (局_索引, 0, 到文本 (局_索引 + 1)) + 超级列表框1.置标题 (局_索引, 1, acf_nickname + “----” + acf_uid + “----” + 局_COOK) + 超级列表框1.置状态图片 (局_索引, 1) + 超级列表框1.保证显示 (局_索引) + 工作中 = 假 + _扫码框.可视 = 假 + +.如果真结束 + + +.子程序 _按钮_刷新_被单击 + +标签显示.可视 = 假 +按钮_刷新.可视 = 假 +按钮_刷新.禁止 = 真 +启动线程 (&getscanEX, , 集句柄) + +.子程序 _图片框2_被双击, 逻辑型 +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 + +剪辑板_置图片 (图片框2.图片) +提示框 (“图片已复制”, , , , 1000) + +.子程序 __扫码框_鼠标左键被按下, 逻辑型 +.参数 横向位置, 整数型 +.参数 纵向位置, 整数型 +.参数 功能键状态, 整数型 + +窗口1.发送信息 (161, 2, 0) + +.子程序 _粘贴Cookie_被选择 +.局部变量 文本数组, 文本型, , "0" +.局部变量 计次1, 整数型 +.局部变量 计次2, 整数型 +.局部变量 临时数组, 文本型, , "0" +.局部变量 索引, 整数型 +.局部变量 i, 文本型 +.局部变量 总数数组, 文本型, , "0" +.局部变量 内容, 文本型 +.局部变量 X, 整数型 +.局部变量 状态数组, 文本型, , "0" +.局部变量 N, 整数型 +.局部变量 M, 整数型 +.局部变量 判断数据, 文本型 + +' 下面的是粘贴根据“----“判断是否是一条或者两条数据 +i = 取剪辑板文本 () +.如果真 (i = “”) + 返回 () +.如果真结束 + +文本数组 = 分割文本 (i, #换行符, ) +.计次循环首 (取数组成员数 (文本数组), X) + .如果真 (文本数组 [X] ≠ “”) + M = 超级列表框1.插入表项 (, , , , , ) + 超级列表框1.置状态图片 (M, 1) + 超级列表框1.置标题 (M, 0, 到文本 (M + 1)) + 超级列表框1.置标题 (M, 1, 文本数组 [X]) + .如果真结束 + + 系统_处理事件 () +.计次循环尾 () +超级列表框1.允许重画 () ' 恢复自动重画 +超级列表框1.发送信息 (277, 7, 0) ' 显示最后一行 + +清除数组 (文本数组) +返回 () + +.子程序 _搜索游戏名_被选择 +.局部变量 索引EX, 整数型 +.局部变量 str, 文本型 + +输入框 (“查找包含游戏名的字符”, “查找游戏名”, , str, , ) +.如果真 (str = “”) + 返回 () +.如果真结束 + +索引EX = 超级列表框1.查找表项 (str, , 假, 2) +.如果真 (索引EX ≠ -1) + 超级列表框1.保证显示 (索引EX) + 超级列表框1.选择表项 (索引EX) +.如果真结束 + +返回 () + +.子程序 _搜索状态_被选择 +.局部变量 索引EX, 整数型 +.局部变量 str, 文本型 + +输入框 (“查找包含状态的字符”, “查找状态”, , str, , ) +.如果真 (str = “”) + 返回 () +.如果真结束 + +索引EX = 超级列表框1.查找表项 (str, , 假, 4) +.如果真 (索引EX ≠ -1) + 超级列表框1.保证显示 (索引EX) + 超级列表框1.选择表项 (索引EX) +.如果真结束 + +返回 () + + +.子程序 子程序检测账号EX +.参数 参_索引, 整数型 +.局部变量 局_文本, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_CCK, 文本型 +.局部变量 str, 文本型 +.局部变量 返回CK, 文本型 + +全检车临界.进入 () +局_文本 = 超级列表框1.取标题 (参_索引, 1) +全检车临界.退出 () + +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 窗口_置状态信息 (参_索引, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +局_CCK = 局_F [3] +str = 到文本 (网页_访问_对象 (“https://www.douyu.com/curl/csrfApi/getCsrfCookie?”, , , 局_CCK, 返回CK, #常量1)) +状态条1.置文本 (0, “生成1-> ” + 编码_usc2到ansi (str)) +.判断开始 (寻找文本 (str, “-99”, , 假) ≠ -1) + 窗口_置状态信息 (参_索引, 1, “账号未登录”) + 返回 () + +.判断 (寻找文本 (str, “无效”, , 假) ≠ -1) + 窗口_置状态信息 (参_索引, 1, “账号无效”) + 返回 () + +.默认 + 窗口_置状态信息 (参_索引, 1, “账号正常”) +.判断结束 + +返回 () + +.子程序 _一键检测账号_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&子程序检测账号EX, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + + +.子程序 _全选_被选择 +.局部变量 P, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), P) + 系统_处理事件 () + 超级列表框1.置状态图片 (P - 1, 1) +.计次循环尾 () + +.子程序 _反选_被选择 +.局部变量 P, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), P) + 系统_处理事件 () + .如果 (超级列表框1.取当前状态图片 (P - 1) = 0) + 超级列表框1.置状态图片 (P - 1, 1) + + .否则 + 超级列表框1.置状态图片 (P - 1, 0) + .如果结束 + +.计次循环尾 () + + +.子程序 _一键获取游戏名_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&子程序获取昵称EX, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + +.子程序 子程序获取昵称EX +.参数 索引EX, 整数型 +.局部变量 局_文本, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_uid, 文本型 +.局部变量 nick, 文本型 +.局部变量 str, 文本型 +.局部变量 roleName, 文本型 +.局部变量 余额, 文本型 +.局部变量 areaName, 文本型 +.局部变量 platName, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 局_ctn, 文本型 + +全临界.进入 () +局_文本 = 超级列表框1.取标题 (索引EX, 1) +局_ctn = 超级列表框1.取标题 (索引EX, 5) +全临界.退出 () +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 状态条1.置文本 (0, “Cookie格式错误”) + 返回 () +.如果真结束 + +局_uid = 局_F [2] +局_Cookie = 局_F [3] + +' https://www.douyu.com/japi/carnival/nc/txEmbed/getIframeUrl?actAlias=20241125NXFQY&rid=9263298&token=496599680_12_447c3494cbda7ea6_1_28514598 +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnivalApi/tencent/bindInfo?actAlias=20251203DSRGL”, , , 局_Cookie, , #常量3)) + +全临界.进入 () +状态条1.置文本 (0, “是否绑定-> ” + str) +roleName = 文本_取出中间文本 (str, “roleName” + #引号 + “:” + #引号, #引号) +超级列表框1.置标题 (索引EX, 2, roleName) +全临界.退出 () + +' {"error":0,"msg":"success","data":{"bindAccount":1,"bindRole":1,"bindAct":1,"needBindRole":null,"txAct":{"txActId":2811,"gameId":"cjm","gameName":"和平精英","bindType":1},"gameAccount":{"bindType":2,"type":"","faceuri":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTI4cIOxb4f7vpSkqYCIIvY1EJTgkhS0ZhVzzJSl2LzDpUzVBJKiaDjvuzpdS6cadAvA6bnrYwZ7jlQ/132","nick":"zicoo"},"gameRole":{"roleName":"白菜被拱了呀","areaName":"微信","platName":"安卓(android)","partitionName":""},"isGranted":null,"gameAuthScene":null,"canChangeRole":0,"changeRoleWaitTime":2490528},"redirectUrl":null} + + +' nick = 文本_取出中间文本 (str, “nick” + #引号 + “:” + #引号, #引号) +' areaName = 文本_取出中间文本 (str, “areaName” + #引号 + “:” + #引号, #引号) +' platName = 文本_取出中间文本 (str, “platName” + #引号 + “:” + #引号, #引号) + + +.子程序 _按钮_添加商品到列表_被单击 + +启动线程 (&商品加列表, , ) + +.子程序 商品加列表 +.局部变量 局_商品名, 文本型 + +局_商品名 = 组合框1.取项目文本 (组合框1.现行选中项) +超级列表框1.置标题 (超级列表框1.现行选中项, 3, 局_商品名) + +.子程序 _按钮_启动_被单击 + +.判断开始 (按钮_启动.标题 = “批量购买商品”) + .如果真 (超级列表框1.取表项数 () ≤ 0) + 返回 () + .如果真结束 + + 按钮_启动.禁止 = 真 + .如果真 (线程_创建 (&工作线程) = 假) + 按钮_启动.禁止 = 假 + 返回 () + .如果真结束 + +.判断 (按钮_启动.标题 = “停止购买”) + 按钮_启动.禁止 = 真 + 按钮_启动.标题 = “停止中...” + 全工作中 = 假 + 工作线程池EX.销毁 () + 返回 () +.默认 + +.判断结束 + + +.子程序 工作线程 +.局部变量 bool, 逻辑型 +.局部变量 int, 整数型 +.局部变量 任务数, 整数型 + +全定时数 = 0 +按钮_启动.标题 = “兑换中...” +状态条1.置文本 (0, “线程启动中...”) +bool = 工作线程池EX.创建 (50, , , 真, , 1024 × 128) +.如果真 (bool = 假) + 状态条1.置文本 (0, “初始化工作线程池失败!”) + 按钮_启动.标题 = “批量购买商品” + 按钮_启动.禁止 = 假 + 返回 () +.如果真结束 + +全工作中 = 真 +按钮_启动.标题 = “停止购买” +按钮_启动.禁止 = 假 +全心跳记录 = 0 +int = 0 +.判断循环首 (全工作中 = 真) + 任务数 = 工作线程池EX.取_执行线程数 () + 工作线程池EX.取_队列任务数 () + 任务数 = 工作线程池EX.取_最大线程容量 () - 任务数 + .如果真 (任务数 > 0) + .如果真 (超级列表框1.取当前状态图片 (int) = 1) + 工作线程池EX.投递任务 (&线程子程序, int) + 程序_延时 (1) + .如果真结束 + + + int = int + 1 + + .如果真结束 + .如果真 (int ≥ 超级列表框1.取表项数 ()) + .判断开始 (选择框_定时抢购.选中 = 真) + 选择框_心跳.选中 = 假 + int = 0 + 子程序等待定时 () + + .判断 (选择框_心跳.选中 = 真) + 状态条1.置文本 (1, “心跳【” + 删全部空 (编辑框_心跳秒.内容) + “】秒/次”) + int = 0 + 心跳等待定时 () + + .默认 + 状态条1.置文本 (0, “定时已取消!”) + 跳出循环 () + .判断结束 + + .如果真结束 + +.判断循环尾 () +.循环判断首 () + 程序_延时 (300) +.循环判断尾 (工作线程池EX.取_是否完全空闲 () = 假) +状态条1.置文本 (0, “正在销毁工作线程池。。。。”) +工作线程池EX.销毁 () +状态条1.置文本 (0, “销毁工作线程池成功!”) +按钮_启动.标题 = “批量购买商品” +按钮_启动.禁止 = 假 +状态条1.置文本 (0, “执行停止完毕!”) + +.子程序 心跳等待定时 +.局部变量 P, 整数型 +.局部变量 N, 整数型 +.局部变量 局_兑换状态, 文本型 + +.计次循环首 (到整数 (删首尾空 (编辑框_心跳秒.内容)), P) + 系统_处理事件 () + 状态条1.置文本 (1, “心跳:” + 编辑框_心跳秒.内容 + “秒,开始计时” + 编辑框_心跳秒.内容 + “/” + 到文本 (P)) + 程序_延时 (1000) +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), N) + 全临界.进入 () + 局_兑换状态 = 超级列表框1.取标题 (N - 1, 4) + 全临界.退出 () + .如果 (寻找文本 (局_兑换状态, “您已拥有”, , 假) ≠ -1 或 局_兑换状态 = “购买成功”) + 超级列表框1.置状态图片 (N - 1, 0) + + .否则 + 超级列表框1.置状态图片 (N - 1, 1) + .如果结束 + + 系统_处理事件 () +.计次循环尾 () + +.子程序 子程序等待定时 +.局部变量 P, 整数型 +.局部变量 N, 整数型 +.局部变量 局_兑换状态, 文本型 + +.计次循环首 (到整数 (删首尾空 (编辑框_定时秒.内容)), P) + 系统_处理事件 () + 状态条1.置文本 (0, “已设置定时:” + 编辑框_定时秒.内容 + “秒,开始计时/” + 到文本 (P)) + 程序_延时 (1000) +.计次循环尾 () +.计次循环首 (超级列表框1.取表项数 (), N) + + 全临界.进入 () + 局_兑换状态 = 超级列表框1.取标题 (N - 1, 4) + 全临界.退出 () + .如果 (寻找文本 (局_兑换状态, “您已拥有”, , 假) ≠ -1 或 局_兑换状态 = “购买成功”) + 超级列表框1.置状态图片 (N - 1, 0) + .否则 + 超级列表框1.置状态图片 (N - 1, 1) + .如果结束 + + 系统_处理事件 () +.计次循环尾 () + +.子程序 线程子程序 +.参数 索引E, 整数型 +.局部变量 局_商品TXT, 文本型 +.局部变量 局_CKdata, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 局_账号用户名, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 F2_, 文本型, , "0" +.局部变量 要兑换的商品名称, 文本型 +.局部变量 要兑换的商品价格, 文本型 +.局部变量 要兑换的商品propid, 文本型 +.局部变量 局_商品图片, 文本型 +.局部变量 局_商品图片time, 文本型 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 appext, 文本型 +.局部变量 purl, 文本型 +.局部变量 str1, 文本型 +.局部变量 str2, 文本型 +.局部变量 游戏昵称, 文本型 +.局部变量 局_bin, 字节集 +.局部变量 msg, 文本型 +.局部变量 优化价格, 文本型 + +窗口_置状态信息 (索引E, 2, “正在购买...”) +全临界E2.进入 () +超级列表框1.置状态图片 (索引E, 0) +局_CKdata = 超级列表框1.取标题 (索引E, 1) +局_商品TXT = 超级列表框1.取标题 (索引E, 3) +超级列表框1.保证显示 (索引E) +全临界E2.退出 () +.如果真 (局_商品TXT = “”) + 窗口_置状态信息 (索引E, 1, “请添加商品!”) + 返回 () +.如果真结束 + + +F2_ = 分割文本 (局_商品TXT, “一”, ) +.如果真 (取数组成员数 (F2_) < 4) + 窗口_置状态信息 (索引E, 2, “商品格式错误x”) + 返回 () +.如果真结束 + +全临界E2.进入 () +要兑换的商品名称 = F2_ [1] +要兑换的商品价格 = F2_ [2] +要兑换的商品propid = F2_ [3] +局_商品图片 = 文本_取出中间文本 (F2_ [4], “square/”, “.jpg”) +局_商品图片time = 文本_取右边 (F2_ [4], “_t=”) +全临界E2.退出 () + +_F = 分割文本 (局_CKdata, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (索引E, 1, “Cookie格式错误”) + 返回 () +.如果真结束 + +全临界E2.进入 () +局_账号用户名 = _F [1] +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全临界E2.退出 () + +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (索引E, 2, 返回txurlH5) + 返回 () +.如果真结束 + + +' APP购买商品 +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +.如果真 (局_actId参 = “”) + 窗口_置状态信息 (索引E, 2, “登录小店失败”) + 返回 () +.如果真结束 + + +' 调试输出 (“purl---”, purl) +全临界E2.进入 () +.如果 (组合框2.现行选中项 = 0) + purl = “https://apps.game.qq.com/daoju/igw/livebuy/?_service=buy.plug.svr.web&_plug_id=7200&_jsvar=buyInfo&acctype=livelink&_app_id=2123&iActionId=44042&propid=” + 要兑换的商品propid + “&paytype=1&source=9263298&sAnchorId=9263298&attach={%22ch%22:%220%22}&apptype=3&_biz_code=cjm&_act_id=44042&sLiveUserInfo={%22sAnchorId%22:%229263298%22,%22sVideoId%22:0}&” + 局_actId参 + “&appext=%7B%22user_price%22:” + 要兑换的商品价格 + “,%22sGoodsPic%22:%22” + 局_商品图片 + “%22,%22paytype%22:1%7D&_sid=8&set=8” + +.否则 + purl = “https://apps.game.qq.com/daoju/igw/livebuy/?_service=buy.plug.svr.web&_plug_id=7200&_jsvar=buyInfo&acctype=livelink&_app_id=2123&iActionId=44042&propid=” + 要兑换的商品propid + “&paytype=5&source=9263298&sAnchorId=9263298&attach={%22ch%22:%220%22}&apptype=3&_biz_code=cjm&_act_id=44042&sLiveUserInfo={%22sAnchorId%22:%229263298%22,%22sVideoId%22:0}&” + 局_actId参 + “&appext=%7B%22user_price%22:” + 要兑换的商品价格 + “,%22sGoodsPic%22:%22” + 局_商品图片 + “%22,%22paytype%22:5%7D&_sid=8&set=8” +.如果结束 + +全临界E2.退出 () + + +str1 = 编码_Utf8到Ansi (网页_访问_对象 (purl, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”, , , 真, , )) + +状态条1.置文本 (0, “购买:” + str1) + +' 购买成功返回:'var buyInfo={"act_amount":800,"event_id":"DJC-CJM-0101113752-nazUnu-44042-007277","iPayType":"1","msg":"ok","newBalance":170,"ret":"0","sSerialNum":"CJM-20260101113752036-860804563","serial":"CJM-20260101113752036-860804563","serverTime":1767238672,"span":"0-4","trace_id":"070c4fd9ac0e50ad80ca64b83e8df299","ts":"1767238672"}; + +.如果真 (寻找文本 (str1, “msg” + #引号 + “:” + #引号 + “ok” + #引号, , 假) ≠ -1) + 窗口_置状态信息 (索引E, 2, “购买成功”) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; DCO-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/95.0.4638.74 Mobile Safari/537.36, Douyu_Android” + #换行符 + “sec-ch-ua-platform: ” + #引号 + “” + #引号 + “” + #换行符 + “Accept: */*” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + + 状态条1.置文本 (0, “查询:” + str2) + + ' 返回: var info={"area":1,"code":{"userid":"12353341"},"event_id":"DJC-CJM-0101111544-XPqqUw-44042-936077","gameOpenId":"osewR0kigZPfAHU-hL9PNVhhsqMk","openIdType":"openid","partition":0,"platId":1,"roleId":"3667375425","roleName":"小竖林里吃过亏","type":"wx"}; + 全临界E2.进入 () + 游戏昵称 = 文本_取出中间文本 (str2, “roleName” + #引号 + “:” + #引号, #引号) + 优化价格 = 到文本 (到整数 (要兑换的商品价格) ÷ 10) + 保存日志2 (时间_到文本 (取现行时间 (), 1) + “ ” + 局_账号用户名 + “----” + 游戏昵称 + “----” + 要兑换的商品名称 + “----” + 优化价格) + 局_bin = 文转图片P (要兑换的商品名称 + “ ” + #换行符 + 时间_格式化 (取现行时间 (), “yyyy年MM月dd日”, “ hh:mm:ss”, 真) + #换行符 + “兑换账号:” + 游戏昵称 + “(” + 局_账号用户名 + “)”) + 全临界E2.退出 () + .计次循环首 (3, ) + .如果真 (写到文件_ (全PIC + “\” + 游戏昵称 + “-” + 要兑换的商品名称 + “.png”, 局_bin) = 真) + 跳出循环 () + .如果真结束 + + .计次循环尾 () + + 返回 () +.如果真结束 + + +msg = 文本_取出中间文本 (str1, “msg” + #引号 + “:” + #引号, #引号) +.如果真 (msg = “”) + msg = str1 +.如果真结束 + +窗口_置状态信息 (索引E, 2, msg) + +.子程序 Getcsrf_token222, 文本型 +.参数 参_Cookie, 文本型 +.局部变量 局_文本, 文本型 +.局部变量 局_CCK, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 str, 文本型 +.局部变量 返回CK, 文本型 +.局部变量 csrf_token, 文本型 + +局_CCK = 参_Cookie +str = 到文本 (网页_访问_对象 (“https://www.douyu.com/japi/carnival/nc/common/generateCsrf”, 1, , 局_CCK, 返回CK, #常量10)) +csrf_token = 文本_取出中间文本 (返回CK, “cvl_csrf_token=”, “;”) +返回 (csrf_token) + +.子程序 _一键查询换绑时间_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + 系统_处理事件 () + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&子程序查换绑时间, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + +.子程序 子程序查换绑时间 +.参数 索引E, 整数型 +.局部变量 局_文本, 文本型 +.局部变量 局_ctn, 文本型 +.局部变量 局_F, 文本型, , "0" +.局部变量 局_uid, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 yyjson, json对象 +.局部变量 changeRoleWaitTime, 整数型 +.局部变量 timetxt, 文本型 +.局部变量 局_txt, 文本型 + +全临界.进入 () +局_文本 = 超级列表框1.取标题 (索引E, 1) +局_ctn = 超级列表框1.取标题 (索引E, 5) +全临界.退出 () +局_F = 分割文本 (局_文本, “----”, ) +.如果真 (取数组成员数 (局_F) < 3) + 状态条1.置文本 (0, “Cookie格式错误”) + 返回 () +.如果真结束 + +局_uid = 局_F [2] +局_Cookie = 局_F [3] +' 'actAlias=20220616CJSZU + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://www.douyu.com/japi/carnivalApi/v2/tencent/bindInfo?actAlias=20250213NQCYX”, , , 局_Cookie, , #常量3)) +yyjson.清空 () +yyjson.解析 (str) +.如果 (yyjson.取文本 (“msg”) = “success”) + changeRoleWaitTime = yyjson.取整数 (“data/changeRoleWaitTime”) + timetxt = 时间_秒到时分秒格式 (changeRoleWaitTime) + 窗口_置状态信息 (索引E, 2, “释放时间:” + timetxt) + +.否则 + 窗口_置状态信息 (索引E, 2, “查询失败”) +.如果结束 + + +.子程序 _时钟1_周期事件 + +启动线程 (&等待抢购, , ) + +.子程序 等待抢购 + +.如果真 (时间_取北京时间 () = 到时间 (到文本 (取年份 (取现行时间 ())) + “年” + 到文本 (取月份 (取现行时间 ())) + “月” + 到文本 (取日 (取现行时间 ())) + “日” + 编辑框_时.内容 + “时” + 编辑框_分.内容 + “分” + 编辑框_秒.内容 + “秒”)) + 时钟1.时钟周期 = 0 + .如果真 (工作线程池EX.取_状态 () = 1) + 返回 () + .如果真结束 + + _按钮_启动_被单击 () + +.如果真结束 + + +.子程序 _选择框_定时抢购_被单击 + +.如果 (选择框_定时抢购.选中 = 真) + 选择框_心跳.选中 = 假 + _全选_被选择 () + 提示框 (“已开启定时抢购√”, , , , 1000) + 时钟1.时钟周期 = 1000 + 启动线程 (&等待抢购, , ) + +.否则 + 时钟1.时钟周期 = 0 + 提示框 (“已关闭定时抢购×”, , , , 1000) +.如果结束 + + +.子程序 _一键添加商品_被选择 +.局部变量 局_商品名, 文本型 + +启动线程 (&子程序添加商品列表, , ) + +.子程序 子程序添加商品列表 +.局部变量 i, 整数型 +.局部变量 局_商品名, 文本型 + +局_商品名 = 组合框1.取项目文本 (组合框1.现行选中项) +.计次循环首 (超级列表框1.取表项数 (), i) + .如果真 (超级列表框1.取当前状态图片 (i - 1) = 1) + 超级列表框1.置标题 (i - 1, 3, 局_商品名) + .如果真结束 + + 系统_处理事件 () +.计次循环尾 () +状态条1.置文本 (0, “成功添加商品:” + 局_商品名) + +.子程序 _按钮1_被单击 +.局部变量 P, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), P) + 系统_处理事件 () + 超级列表框1.置状态图片 (P - 1, 1) +.计次循环尾 () + + +.子程序 _按钮2_被单击 +.局部变量 i, 整数型 +.局部变量 局_商品名称, 文本型 +.局部变量 查找名称, 文本型 + +局_商品名称 = 删全部空 (编辑框_商品名称.内容) +.如果真 (局_商品名称 = “”) + 提示框 (“请输入商品名称”) + 返回 () +.如果真结束 + +.计次循环首 (组合框1.取项目数 (), i) + 查找名称 = 组合框1.取项目文本 (i - 1) + .如果真 (寻找文本 (查找名称, 局_商品名称, , 假) ≠ -1) + 组合框1.现行选中项 = i - 1 + 跳出循环 () + .如果真结束 + +.计次循环尾 () + +.子程序 _一键查询碎片_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&查询碎片, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + + +.子程序 查询碎片 +.参数 参_索引E, 整数型 +.局部变量 局_文本Ck, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 balance, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 yyjson, json对象 +.局部变量 gameOpenId, 文本型 +.局部变量 roleId, 文本型 +.局部变量 str2, 文本型 +.局部变量 msg, 文本型 +.局部变量 str_x, 文本型 +.局部变量 jb2, 文本型 +.局部变量 type, 文本型 +.局部变量 areaid, 文本型 +.局部变量 plat, 文本型 + +局_文本Ck = 超级列表框1.取标题 (参_索引E, 1) +_F = 分割文本 (局_文本Ck, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (参_索引E, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +全临界.进入 () +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全临界.退出 () +' 调试输出 (“局_token--”, 局_token) +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (参_索引E, 2, 返回txurlH5) + 返回 () +.如果真结束 + +全临界.进入 () +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +全临界.退出 () + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live?acctype=livelink&_jsvar=info&_service=other.livelink.getrole.out&_biz_code=cjm&_act_id=44042&_app_id=2123&” + 局_actId参, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) +yyjson.清空 () +yyjson.解析 (文本_取出中间文本 (str, “var info=”, “;”)) +gameOpenId = yyjson.取文本 (“gameOpenId”) +roleId = yyjson.取文本 (“roleId”) +plat = yyjson.取文本 (“platId”) +type = yyjson.取文本 (“type”) +areaid = 选择 (type = “wx”, “1”, “2”) + +.如果真 (gameOpenId ≠ “” 且 roleId ≠ “”) + str2 = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live/?_jsvar=jbInfos&_service=pay.idip.gamecoin.get&_app_id=2123&acctype=ttpp&areaid=” + areaid + “&eventid=&interwork=0&openid=” + gameOpenId + “&openkey=openkey&partition=0&pay_token=&plat=” + plat + “&plat_pc=0&roleid=” + roleId + “&_biz_code=cjm&_act_id=44042&coin_type=1&_sid=6”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) + ' '调试输出 (取程序名称 (1), str2) + 状态条1.置文本 (0, “余额:” + str2) + yyjson.清空 () + yyjson.解析 (文本_取出中间文本 (str2, “var jbInfos=”, “;”)) + jb2 = yyjson.取文本 (“jb2”) + 窗口_置状态信息 (参_索引E, 2, “碎片:” + 选择 (jb2 ≠ “”, jb2, str2)) + 返回 () +.如果真结束 + +msg = 文本_取出中间文本 (str, “msg” + #引号 + “:” + #引号, #引号) +.如果真 (msg = “”) + msg = str +.如果真结束 + +窗口_置状态信息 (参_索引E, 2, msg) + + +.子程序 _选择框_心跳_被单击 + +.如果真 (选择框_心跳.选中 = 真) + 时钟1.时钟周期 = 0 + 选择框_定时抢购.选中 = 假 + +.如果真结束 + + +.子程序 _组合框1_列表项被选择 +.局部变量 当前项目, 文本型 +.局部变量 _F, 文本型, , "0" + +当前项目 = 组合框1.取项目文本 (组合框1.现行选中项) +_F = 分割文本 (当前项目, “一”, ) +.如果真 (取数组成员数 (_F) < 5) + 编辑框_剩余量.内容 = “NULL” + 返回 () +.如果真结束 + +编辑框_剩余量.内容 = _F [5] + +.子程序 _一键查询购买记录_被选择 +.局部变量 p, 整数型 + +.计次循环首 (超级列表框1.取表项数 (), p) + .如果真 (超级列表框1.取当前状态图片 (p - 1) = 1) + 启动线程 (&查询兑换记录, p - 1, ) + 程序_延时 (10) + .如果真结束 + +.计次循环尾 () + + +.子程序 查询兑换记录 +.参数 参_索引E, 整数型 +.局部变量 局_文本Ck, 文本型 +.局部变量 局_Cookie, 文本型 +.局部变量 str, 文本型 +.局部变量 balance, 文本型 +.局部变量 _F, 文本型, , "0" +.局部变量 acf_uid, 文本型 +.局部变量 acf_stk, 文本型 +.局部变量 acf_ltkid, 文本型 +.局部变量 局_token, 文本型 +.局部变量 返回txurlH5, 文本型 +.局部变量 局_actId参, 文本型 +.局部变量 yyjson, json对象 +.局部变量 yyjson2, json对象 +.局部变量 gameOpenId, 文本型 +.局部变量 roleId, 文本型 +.局部变量 str2, 文本型 +.局部变量 msg, 文本型 +.局部变量 str_x, 文本型 +.局部变量 jb2, 文本型 +.局部变量 兑换list, 整数型 +.局部变量 i, 整数型 +.局部变量 sGoodsInfo, 文本型 +.局部变量 p, 整数型 +.局部变量 sGoodsName, 文本型 +.局部变量 兑换记录组, 文本型, , "0" +.局部变量 局_合并str, 文本型 +.局部变量 sPacketName, 文本型 + +局_文本Ck = 超级列表框1.取标题 (参_索引E, 1) +_F = 分割文本 (局_文本Ck, “----”, ) +.如果真 (取数组成员数 (_F) < 3) + 窗口_置状态信息 (参_索引E, 2, “Cookie格式错误”) + 返回 () +.如果真结束 + +全临界.进入 () +局_Cookie = _F [3] +acf_uid = 网页_取单条Cookie (局_Cookie, “acf_uid”, 真) +acf_stk = 网页_取单条Cookie (局_Cookie, “acf_stk”, 真) +acf_ltkid = 网页_取单条Cookie (局_Cookie, “acf_ltkid”, 真) +局_token = acf_uid + “_1_” + acf_stk + “_0_” + acf_ltkid +全临界.退出 () +' 调试输出 (“局_token--”, 局_token) +.如果真 (登录和平集市 (局_token, 返回txurlH5) = 假) + 窗口_置状态信息 (参_索引E, 2, 返回txurlH5) + 返回 () +.如果真结束 + +全临界.进入 () +局_actId参 = 文本_取右边 (返回txurlH5, “?”) +全临界.退出 () + + + +str = 编码_Utf8到Ansi (网页_访问_对象 (“https://apps.game.qq.com/daoju/igw/live/?_service=order.list&_jsvar=info&acctype=livelink&_app_id=2123&hist=0&ps=10&pn=1&_biz_code=cjm&_act_id=44042&” + 局_actId参 + “&_sid=8&set=8”, , , , , “Host: apps.game.qq.com” + #换行符 + “Connection: keep-alive” + #换行符 + “Pragma: no-cache” + #换行符 + “Cache-Control: no-cache” + #换行符 + “User-Agent: Mozilla/5.0 (Linux; Android 12; HBN-AL00 Build/V417IR; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/101.0.4951.61 Mobile Safari/537.36, Douyu_Android” + #换行符 + “Accept: */*” + #换行符 + “X-Requested-With: air.tv.douyu.android” + #换行符 + “Sec-Fetch-Site: same-site” + #换行符 + “Sec-Fetch-Mode: no-cors” + #换行符 + “Sec-Fetch-Dest: script” + #换行符 + “Referer: https://app.daoju.qq.com/”)) +yyjson.清空 () +yyjson.解析 (文本_取出中间文本 (str, “var info=”, “;”)) +兑换list = yyjson.取成员数 (“data/list”) + +.计次循环首 (兑换list, i) + sGoodsInfo = yyjson.取文本 (“data/list/” + 到文本 (i - 1) + “/sGoodsInfo”) + yyjson2.清空 () + yyjson2.解析 (sGoodsInfo) + .计次循环首 (yyjson2.取成员数 (“list”), p) + sPacketName = yyjson2.取文本 (“list/” + 到文本 (p - 1) + “/sPacketName”) + 加入成员 (兑换记录组, sPacketName) + + .计次循环尾 () +.计次循环尾 () +局_合并str = 数组_合并_快速 (兑换记录组, “,”) +超级列表框1.置标题 (参_索引E, 4, 到文本 (取数组成员数 (兑换记录组)) + “*” + 局_合并str) + diff --git a/web/backend/services/douyu_runner.py b/web/backend/services/douyu_runner.py index d4f8da9..0782468 100644 --- a/web/backend/services/douyu_runner.py +++ b/web/backend/services/douyu_runner.py @@ -1086,7 +1086,10 @@ class DouyuBatchRunner: cookie: str, config: dict, ): - """生成和平小店绑定二维码并轮询等待微信扫码绑定/换绑完成。""" + """生成和平小店绑定二维码并轮询等待微信扫码绑定/换绑完成。 + + 识别到新角色后仅标记"待确认",不自动回写账号,由用户手动确认绑定。 + """ client = self._client(cookie) act_alias = str(config.get("xpd_act_alias") or "").strip() if not act_alias: @@ -1114,19 +1117,15 @@ class DouyuBatchRunner: "二维码已生成,请微信扫码在小程序中绑定角色", result, ) - bound = self._wait_xpd_bind(db, task, account, client, act_alias, result) - if self._stop.is_set(): - result["bind_polling"] = False + state = self._wait_xpd_bind(db, task, client, act_alias, result) + result["bind_polling"] = False + if state == "stopped": self._mark_task(db, task, "stopped", "任务已停止", result) return - if bound: - account.xpd_bind_status = "xpd_bound" - account.updated_at = datetime.now(timezone.utc) - db.commit() - role_text = str(result.get("role_name") or account.xpd_game_name or "-") - self._mark_task(db, task, "success", f"小店绑定成功: {role_text}", result) + if state == "pending": + role_text = str(result.get("role_name") or "-") + self._mark_task(db, task, "success", f"已识别角色: {role_text},待确认绑定", result) return - result["bind_polling"] = False self._mark_task( db, task, @@ -1139,15 +1138,15 @@ class DouyuBatchRunner: self, db: Session, task: DouyuTask, - account: Account, client: DouyuActivityClient, act_alias: str, result: dict, - ) -> bool: - """轮询 bindInfo 等待绑定/换绑完成。 + ) -> str: + """轮询 bindInfo 检测绑定/换绑角色,识别到后停在"待确认",不自动回写账号。 - - 绑定前未绑定:检测到 bind_role=1 即绑定成功 - - 绑定前已绑定(换绑):检测到角色名变化才算换绑成功,角色不变继续等 + - 绑定前未绑定:检测到 bind_role=1 即识别到待确认角色 + - 绑定前已绑定(换绑):检测到角色名变化才算换绑完成,角色不变继续等 + 返回 "pending"=已识别待确认角色, "stopped"=任务停止, "timeout"=超时未识别。 """ before_bound = bool(result.get("before_bound")) before_role_name = str(result.get("before_role_name") or "") @@ -1165,11 +1164,8 @@ class DouyuBatchRunner: if (not before_bound and bound_now and role_name) or changed: result.update({key: value for key, value in info.items() if key != "raw"}) result["bind_polling"] = False - result["xpd_bound"] = True - account.xpd_game_name = role_name - account.updated_at = datetime.now(timezone.utc) - db.commit() - return True + result["xpd_pending_confirm"] = True + return "pending" self._update_task_progress( db, task, @@ -1191,7 +1187,48 @@ class DouyuBatchRunner: if self._stop.wait(DOUYU_XPD_BIND_POLL_INTERVAL): break result["bind_polling"] = False - return False + return "stopped" if self._stop.is_set() else "timeout" + + def _execute_confirm_xpd_bind( + self, + db: Session, + task: DouyuTask, + account: Account, + cookie: str, + config: dict, + ): + """确认和平小店绑定:回查 bindInfo,确认绑定角色后将账号回写为已绑定。""" + client = self._client(cookie) + act_alias = str(config.get("xpd_act_alias") or "").strip() + if not act_alias: + self._mark_task(db, task, "failed", "请先配置小店活动代号 actAlias") + return + result = client.xpd_bind_info(act_alias=act_alias) + role_name = str(result.get("role_name") or "") + if not result.get("bind_role") or not role_name: + account.xpd_bind_status = "xpd_not_bound" + account.updated_at = datetime.now(timezone.utc) + db.commit() + self._mark_task(db, task, "failed", "尚未检测到小店绑定角色,请先扫码绑定", result) + return + # 优先用完整角色信息回写(与查询角色一致),失败时回退 bindInfo 角色名 + try: + ctx = self._xpd_role_context(client, config) + role = ctx["role"] + if role.get("role_id"): + self._apply_xpd_role_to_account(account, role, self._xpd_area_id(role, account)) + else: + account.xpd_game_name = role_name + account.updated_at = datetime.now(timezone.utc) + except Exception: + account.xpd_game_name = role_name + account.updated_at = datetime.now(timezone.utc) + account.xpd_bind_status = "xpd_bound" + account.updated_at = datetime.now(timezone.utc) + db.commit() + result["xpd_pending_confirm"] = False + result["xpd_bound"] = True + self._mark_task(db, task, "success", f"小店绑定成功: {role_name}", result) def _execute_query_xpd_bind_info( self, @@ -1201,19 +1238,16 @@ class DouyuBatchRunner: cookie: str, config: dict, ): - """查询和平小店绑定信息(bindInfo)。""" + """查询和平小店绑定信息(bindInfo)。 + + 仅查询展示,不回写账号;确认绑定由 confirm_xpd_bind 任务完成。 + """ client = self._client(cookie) act_alias = str(config.get("xpd_act_alias") or "").strip() if not act_alias: self._mark_task(db, task, "failed", "请先配置小店活动代号 actAlias") return result = client.xpd_bind_info(act_alias=act_alias) - role_name = str(result.get("role_name") or "") - if role_name: - account.xpd_game_name = role_name - account.xpd_bind_status = "xpd_bound" if result.get("bind_role") else "xpd_not_bound" - account.updated_at = datetime.now(timezone.utc) - db.commit() status = "已绑定" if result.get("bind_role") else "未绑定" text = str(result.get("role_name") or result.get("nick") or "-") self._mark_task( @@ -2593,6 +2627,7 @@ class DouyuBatchRunner: "prefetch_csrf_token": self._execute_prefetch_csrf_token, "get_xpd_bind_qr": self._execute_get_xpd_bind_qr, "query_xpd_bind_info": self._execute_query_xpd_bind_info, + "confirm_xpd_bind": self._execute_confirm_xpd_bind, "query_xpd_role": self._execute_query_xpd_role, "refresh_xpd_goods": self._execute_refresh_xpd_goods, "query_xpd_balance": self._execute_query_xpd_balance, diff --git a/web/backend/services/douyu_service.py b/web/backend/services/douyu_service.py index 3e3dd93..8848b43 100644 --- a/web/backend/services/douyu_service.py +++ b/web/backend/services/douyu_service.py @@ -40,6 +40,7 @@ SUPPORTED_DOUYU_TASK_TYPES = { "prefetch_csrf_token": "一键获取兑换 CSRF Token", "get_xpd_bind_qr": "生成小店绑定二维码", "query_xpd_bind_info": "查询小店绑定信息", + "confirm_xpd_bind": "确认小店绑定", "query_xpd_role": "查询小店绑定角色", "refresh_xpd_goods": "刷新小店商品列表", "query_xpd_balance": "查询小店点券余额", diff --git a/web/frontend/src/pages/DouyuTasksPage.tsx b/web/frontend/src/pages/DouyuTasksPage.tsx index 591b0ee..674a007 100644 --- a/web/frontend/src/pages/DouyuTasksPage.tsx +++ b/web/frontend/src/pages/DouyuTasksPage.tsx @@ -86,6 +86,7 @@ const ESPORTS_QUICK_ACTIONS = [ const PEACE_QUICK_ACTIONS = [ { key: 'get_xpd_bind_qr', icon: }, { key: 'query_xpd_bind_info', icon: }, + { key: 'confirm_xpd_bind', icon: }, { key: 'query_xpd_role', icon: }, { key: 'refresh_xpd_goods', icon: }, { key: 'query_xpd_balance', icon: }, @@ -126,6 +127,7 @@ const ESPORTS_TASK_TYPES = new Set([ const PEACE_TASK_TYPES = new Set([ 'get_xpd_bind_qr', 'query_xpd_bind_info', + 'confirm_xpd_bind', 'query_xpd_role', 'refresh_xpd_goods', 'query_xpd_balance', @@ -164,7 +166,13 @@ function taskQrUrl(task: DouyuTaskItem | null | undefined): string { } function bindReadyForConfirm(task: DouyuTaskItem | null | undefined): boolean { - if (!task || task.task_type !== 'get_bind_qr') return false; + if (!task) return false; + if (task.task_type === 'get_xpd_bind_qr') { + if (resultFlag(task.result, 'xpd_bound') || resultFlag(task.result, 'bind_confirmed')) return false; + // 轮询识别到角色后停在待确认(xpd_pending_confirm),有角色名即可确认绑定 + return Boolean(resultText(task.result, 'role_name')); + } + if (task.task_type !== 'get_bind_qr') return false; if (task.result?.bind_ready_for_confirm === true) return true; const roleName = resultText(task.result, 'role_name'); if (!roleName) return false; @@ -389,6 +397,26 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) return map; }, [tasks]); + const latestXpdQueryTaskByAccount = useMemo(() => { + const map = new Map(); + for (const task of tasks) { + if (!['query_xpd_bind_info', 'query_xpd_role'].includes(task.task_type)) continue; + const previous = map.get(task.account_id); + if (!previous || task.id > previous.id) map.set(task.account_id, task); + } + return map; + }, [tasks]); + + const latestConfirmXpdBindTaskByAccount = useMemo(() => { + const map = new Map(); + for (const task of tasks) { + if (task.task_type !== 'confirm_xpd_bind') continue; + const previous = map.get(task.account_id); + if (!previous || task.id > previous.id) map.set(task.account_id, task); + } + return map; + }, [tasks]); + const latestConfirmBindFailureByAccount = useMemo(() => { const map = new Map(); for (const task of tasks) { @@ -1033,15 +1061,23 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) const qrUrl = resultText(qrResult, 'url'); const qrBindPhase = resultText(qrResult, 'bind_phase'); const qrAutoPolling = qrTask?.status === 'running' && qrResult?.bind_polling === true; + const isXpdBindTask = qrTask?.task_type === 'get_xpd_bind_qr'; const qrQueryTask = qrTask - ? latestQueryGameTaskByAccount.get(qrTask.account_id) || null + ? (isXpdBindTask + ? (latestXpdQueryTaskByAccount.get(qrTask.account_id) || null) + : (latestQueryGameTaskByAccount.get(qrTask.account_id) || null)) : null; const qrQueryResult = qrTask && qrQueryTask && qrQueryTask.id > qrTask.id ? qrQueryTask.result : null; const qrQueryRunning = Boolean(qrQueryTask && qrTask && qrQueryTask.id > qrTask.id && qrQueryTask.status === 'running'); + const qrXpdConfirmTask = isXpdBindTask && qrTask + ? (latestConfirmXpdBindTaskByAccount.get(qrTask.account_id) || null) + : null; + const qrXpdBound = Boolean(qrXpdConfirmTask && qrXpdConfirmTask.status === 'success'); + const qrXpdConfirmRunning = Boolean(qrXpdConfirmTask && ['planned', 'pending', 'running'].includes(qrXpdConfirmTask.status)); const qrQueryRoleName = resultText(qrQueryResult, 'role_name'); const qrQueryPendingRoleName = resultText(qrQueryResult, 'pending_role_name'); const qrQueryIsBoundAct = resultFlag(qrQueryResult, 'is_bound_act') || resultFlag(qrQueryResult, 'bind_confirmed'); - const qrQueryPending = Boolean( + const qrQueryPending = !isXpdBindTask && Boolean( qrQueryResult && ( qrQueryPendingRoleName @@ -1054,12 +1090,10 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) ) ), ); - const isXpdBindTask = qrTask?.task_type === 'get_xpd_bind_qr'; - const qrXpdBound = Boolean(isXpdBindTask && resultFlag(qrResult, 'xpd_bound')); - const qrBindReady = bindReadyForConfirm(qrTask) || qrQueryPending || qrXpdBound; + const qrBindReady = (bindReadyForConfirm(qrTask) || qrQueryPending) && !qrXpdBound; const qrRoleSourceResult = qrQueryPending ? qrQueryResult - : (bindReadyForConfirm(qrTask) || qrXpdBound ? qrResult : null); + : ((bindReadyForConfirm(qrTask) || qrXpdBound) ? qrResult : null); // 待确认角色优先用 pending_* 字段(已绑定角色之外的扫码新角色) const qrRoleName = resultText(qrRoleSourceResult, 'pending_role_name') || resultText(qrRoleSourceResult, 'role_name'); const qrAreaName = resultText(qrRoleSourceResult, 'pending_area_name') || resultText(qrRoleSourceResult, 'area_name'); @@ -1098,17 +1132,23 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) ? [qrPlatName, qrAreaName, qrRoleName].filter(Boolean).join(' - ') : ''; const qrBindSummary = resultText(qrResult, 'bind_summary') || resultText(qrQueryResult, 'bind_summary'); - const qrStatusText = qrBindReady - ? (isXpdBindTask ? '绑定成功' : '已识别角色,待确认') - : (isXpdBindTask && qrTask?.status === 'failed') - ? '未检测到绑定' - : (isXpdBindTask && qrTask?.status === 'running') - ? '等待扫码绑定' - : qrQueryRunning - ? '查询角色中' - : qrQueryTask && qrQueryTask.id > (qrTask?.id || 0) && qrQueryTask.status === 'success' && qrQueryIsBoundAct - ? '查询结果:仍是当前绑定角色' - : bindPhaseText(qrBindPhase, qrAutoPolling); + const qrStatusText = qrXpdBound + ? '绑定成功' + : (isXpdBindTask && qrBindReady) + ? '已识别角色,待确认' + : (isXpdBindTask && qrTask?.status === 'failed') + ? '未检测到绑定' + : (isXpdBindTask && qrTask?.status === 'running') + ? '等待扫码绑定' + : qrXpdConfirmRunning + ? '正在确认绑定' + : qrBindReady + ? '已识别角色,待确认' + : qrQueryRunning + ? '查询角色中' + : qrQueryTask && qrQueryTask.id > (qrTask?.id || 0) && qrQueryTask.status === 'success' && qrQueryIsBoundAct + ? '查询结果:仍是当前绑定角色' + : bindPhaseText(qrBindPhase, qrAutoPolling); const qrAccountName = qrTask ? (qrTask.account_nickname || qrTask.account_username || qrTask.account_uid || `#${qrTask.account_id}`) : ''; @@ -1121,7 +1161,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) const accountId = qrTask.account_id; const taskId = qrTask.id; closeQrTask(taskId); - void startTask('confirm_bind', [accountId]); + void startTask(isXpdBindTask ? 'confirm_xpd_bind' : 'confirm_bind', [accountId]); }; const queryQrRole = () => { @@ -1130,7 +1170,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) message.info('正在自动识别角色,请稍候'); return; } - void startTask('query_game_name', [qrTask.account_id]); + void startTask(isXpdBindTask ? 'query_xpd_bind_info' : 'query_game_name', [qrTask.account_id]); }; // Account table @@ -1463,6 +1503,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) {renderActionButton('get_xpd_bind_qr', 'primary')} {renderActionButton('query_xpd_bind_info', 'primary')} + {renderActionButton('confirm_xpd_bind', 'primary')} {renderActionButton('query_xpd_role', 'primary')} {renderActionButton('query_xpd_balance', 'primary')} {renderActionButton('refresh_xpd_goods')} @@ -2081,7 +2122,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) {qrAccountName} )} - + {qrStatusText} {qrUrl ? ( @@ -2096,7 +2137,7 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) 本次未生成二维码 )} - {qrBindReady ? ( + {qrBindReady || qrXpdBound ? ( <> {qrRoleName} @@ -2125,26 +2166,24 @@ export default function DouyuTasksPage({ handbook }: { handbook: HandbookKind }) 最近查询: {qrQueryTask.message} ) : null} - {!isXpdBindTask && ( - - - - - )} + + + + )}