1.购买服务器阿里云:服务器购买地址https://t.aliyun.com/U/E8o0aM若失效,可用地址
阿里云:
服务器购买地址
https://t.aliyun.com/U/E8o0aM
若失效,可用地址
https://www.aliyun.com/daily-act/ecs/activity_selection?source=5176.29345612&userCode=49hts92d
腾讯云:
https://curl.qcloud.com/wJpWmSfU
若失效,可用地址
https://cloud.tencent.com/act/cps/redirect?redirect=2446&cps_key=ad201ee2ef3b771157f72ee5464b1fea&from=console
华为云
https://activity.huaweicloud.com/cps.html?fromacct=64b5cf7cc11b4840bb4ed2ea0b2f4468&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905
2.部署教程
3.代码如下
import {
getLoginInfo, getCharacterBindInfo, doSignIn, getSignLog, getSignInRewardList, getSignInReward,
createPostComment, createDynamic, deleteDynamic,
} from './api.ts';
import logger from './logger.ts';
export default async (cookies: string) => {
await getLoginInfo(cookies);
const characterInfo = await getCharacterBindInfo(cookies);
if (characterInfo.isSign !== 1) {
logger.info('今天尚未签到');
const signInResult = await doSignIn(cookies);
if (signInResult) {
logger.info(`签到成功:连续签到${signInResult.continuousDays.toString()}天,获得${signInResult.sqExp.toString()}经验`);
} else {
logger.info('今天已签到');
}
await new Promise((resolve) => { setTimeout(resolve, 5000); });
} else {
logger.info('今天已签到');
}
await getSignLog(cookies);
const signInReward = await getSignInRewardList(cookies);
const pendingReward = signInReward.filter((item) => item.is_get === 0);
const incompleteReward = signInReward.filter((item) => item.is_get === -1);
logger.info(`尚有${pendingReward.length.toString()}个签到奖励待领取`);
logger.info(`尚有${incompleteReward.length.toString()}个签到奖励未完成`);
if (pendingReward.length > 0) {
await Promise.all(pendingReward
.map(async (item) => {
logger.info(`领取签到奖励:${item.item_name}`);
try {
await getSignInReward(cookies, item.id);
logger.info(`领取成功:${item.item_name}`);
} catch (err) {
logger.error(`领取失败:${(err as Error).message}`);
}
}));
await new Promise((resolve) => { setTimeout(resolve, 5000); });
}
// XXX: 目前官方水贴已失效
for (let i = 0; i < 0; i += 1) {
const content = '<p><span class="at-emo">[emo1]</span> </p>';
const postID = '9365';
logger.info(`水贴发表评论(${(i + 1).toString()} / 5)`);
// eslint-disable-next-line no-await-in-loop
await createPostComment(cookies, content, postID);
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => { setTimeout(resolve, 5000); });
}
for (let i = 0; i < 5; i += 1) {
const content = '<p><span class="at-emo">[emo1]</span> </p>';
logger.info(`发表动态并删除(${(i + 1).toString()} / 5)`);
logger.info(`发表动态(${(i + 1).toString()} / 5)`);
// eslint-disable-next-line no-await-in-loop
const data = await createDynamic(cookies, content);
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => { setTimeout(resolve, 5000); });
logger.info(`删除动态(${(i + 1).toString()} / 5)`);
// eslint-disable-next-line no-await-in-loop
await deleteDynamic(cookies, data.id);
// eslint-disable-next-line no-await-in-loop
await new Promise((resolve) => { setTimeout(resolve, 5000); });
}
};
这脚本为石之家自动化"签到 + 奖励领取 + 动态发表/删除(刷任务量)"脚本。
https://ff14risingstones.web.sdo.com/pc/index.html#/post
主要作用
校验登录态 → 2) 判断并执行当天签到 → 3) 查询签到记录 → 4) 拉取并领取未领取的签到奖励 → 5) 通过批量发表并删除"动态"来满足平台的活跃/任务条件(原本的"水贴评论"已被注释为 0 次,不执行)。
主要方法
getLoginInfo(cookies)
用给定的 cookies 拉取登录信息,验证当前会话有效。getCharacterBindInfo(cookies)
读取与账号绑定的角色/角色状态,脚本用其中的isSign
字段判断"今天是否已签到"。doSignIn(cookies)
执行签到。若成功,返回包含"连续签到天数(continuousDays
)"和"获得经验(sqExp
)"等信息,日志里会打印出来。(本地逻辑)
if (characterInfo.isSign !== 1) ... else ...
根据是否已签到决定是否调用doSignIn
,并在两次关键动作之间setTimeout
5 秒,模拟人操作的节奏。getSignLog(cookies)
拉取签到日志/记录(用于留存或后续统计,脚本不再额外处理返回值)。getSignInRewardList(cookies)
获取当前签到奖励列表。脚本将其分成:pendingReward
:is_get === 0
,表示"满足条件但未领取"的奖励;incompleteReward
:is_get === -1
,表示"未达成条件"的奖励。
并打印各自数量。getSignInReward(cookies, item.id)
对pendingReward
中的每个奖励逐一领取,成功/失败都写日志。领取完成后再等待 5 秒。"水贴评论"段
for (let i = 0; i < 0; i += 1) { createPostComment(...) }
循环上限是 0,等于不执行。注释表明"官方水贴已失效"。createDynamic(cookies, content)
与deleteDynamic(cookies, data.id)
连续 5 次执行"先发动态 → 等 5 秒 → 再删动态 → 再等 5 秒"的闭环。
文本内容是简单的表情 HTML([emo1]
),用于完成"发表动态/活跃度"这一类任务指标。logger.info / logger.error(...)
贯穿全程的日志记录工具,用于输出每个节点的状态与异常信息,便于观测脚本行为。await new Promise(resolve => setTimeout(resolve, 5000))
多处人为插入 5 秒延迟,节流请求,降低被平台判定为异常的概率。
输入参数:
cookies: string
:外部传入的登录 Cookie 串,是所有 API 调用的身份凭证。
注意:
本文部分变量已做脱敏处理,仅用于测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。技术层面需要提供帮助,可以通过打赏的方式进行探讨。
没有评论:
发表评论