feat: 支持定时发送排名信息
All checks were successful
Egg CI/CD / build-image (push) Successful in 55s
Egg CI/CD / deploy (push) Successful in 30s

This commit is contained in:
zhaoyingbo 2024-06-16 05:06:25 +00:00
parent 289e88711a
commit 4932d6b8d6
6 changed files with 134 additions and 6 deletions

View File

@ -1,5 +1,7 @@
import PocketBase from 'pocketbase';
import PocketBase from "pocketbase";
const pbClient = new PocketBase('https://eggpb.imoaix.cn')
const pbClient = new PocketBase("https://eggpb.imoaix.cn");
pbClient.autoCancellation(false);
export default pbClient;

View File

@ -1,3 +1,4 @@
import sendRank from "../../schedule/rank";
import service from "../../services";
import { LarkEvent } from "../../types";
import {
@ -99,6 +100,10 @@ const manageCMDMsg = (body: LarkEvent.Data) => {
service.attach.ciMonitor(chatId);
return true;
}
if (text === "/rank") {
sendRank();
return true;
}
if (text.includes("share") && text.includes("简报")) {
service.attach.reportCollector(body);
// 这个用时比较久,先发一条提醒用户收到了请求

View File

@ -1,9 +1,13 @@
import { resetAccessToken } from "./accessToken";
import schedule from 'node-schedule'
import schedule from "node-schedule";
import sendRank from "./rank";
export const initSchedule = async () => {
// 定时任务每15分钟刷新一次token
schedule.scheduleJob('*/15 * * * *', resetAccessToken);
schedule.scheduleJob("*/15 * * * *", resetAccessToken);
// 每天的早九到晚九点,每小时请求一次
schedule.scheduleJob("0 9-21 * * *", sendRank);
// 立即执行一次
resetAccessToken()
}
resetAccessToken();
sendRank();
};

52
schedule/rank.ts Normal file
View File

@ -0,0 +1,52 @@
import service from "../services";
const sendRank = async () => {
try {
const res = await fetch(
"https://hackathon.tech.xiaomi.com/api/hackathon/2024/vote/list?eventId=33",
{
headers: {
accept: "*/*",
"accept-language": "zh-CN,zh;q=0.9",
baggage:
"sentry-environment=production,sentry-public_key=5b89f1d1d10446f8aca80e4abb1d1024,sentry-trace_id=959f1d5181e3484f841c54042b92ffa2,sentry-sample_rate=1,sentry-sampled=true",
priority: "u=1, i",
"sec-ch-ua":
'"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"sentry-trace": "959f1d5181e3484f841c54042b92ffa2-a6a672209bb4b943-1",
cookie:
"_ga=GA1.2.1499426685.1700792693; _ga_7QJJZB70B9=GS1.1.1712110519.9.1.1712110567.0.0.0; _tea_utm_cache_1229=undefined; _aegis_cas=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3MTgzNzM4NTYsImRlcGlkIjoiK1x1MDAxYkx1JVx1MDAwMWd3aV1WYkNcdTAwMTVcXG9wXHUwMDA0aV1WakRcdTAwMWIyeFx1MDAwM1x1MDAwNGldXmEiLCJhdWQiOiJoYWNrYXRob24udGVjaC54aWFvbWkuY29tIiwiYyI6MCwiZGV0YWlsIjoixuw1XHLVr96TnXR4-es_QGRccrRB6rJcdTAwMTEyNrt3OfOQI-epXHK8x0fJX-NRjtVRUdNPJm_oQ1xm85OLkIA_V9ZQyvGd5u2Hxpp0x7lzcozY0ttZy35cL1wi3v-gXHUwMDFikppyuztEx1x1MDAxZaJcdTAwMWJKXHUwMDFjOi02fjH74sxXXGJcdTAwMTNIeTtpXHUwMDA0sdlcdTAwMTFaTyXIXHUwMDA20Vx1MDAxZVxyw6Y1lm_a8pJccimWXGZcdTAwMTFMXHUwMDBmacBcdTAwMDZl3ZTxuEhL5Vx1MDAxZVx1MDAxOFx1MDAwYofjYIHLh0Ggg3eNbLTv6HBcYlx1MDAxNLmKZd25wEQ5XHUwMDA3Jlx1MDAxOFxyJJSSXCJbdjxcdTAwMDPp3ZKvKHXXXHUwMDE5ei43NHNzS4orXHUwMDFlsJFrra2KllxcTu-ucoRRXCJH_mHqj-wy0ZmRROlcdTAwMGWMpLd8U2W6tyaEcFx1MDAxYapMrTRKqLyHqfJ4dTdcYvYycKt4N1x1MDAwMkSZxlwio9YoR7bmiWKpyOuIXHUwMDAzp9XrQrOJ7Lx4tiNcdTAwMDdcIlx1MDAwYmg0k82Dr__vnbVNdfSEkoL19Ow-LV9DNimXUpW9sEpqwLvbXHUwMDA3V-UzTTNZXHLwtn6iPnfcdjlaoCpN2KRcdTAwMGZcdTAwMWaqk43C4Uh6wmJgUWhmSu9Go33msVx1MDAxMWoyvWPgTfq-h8HzXHUwMDExs1wvRYxvt-09XG6r1_JcZqGUo3j2dVeGXHUwMDdmujb59_xlMaDeToNcdTAwMDE3KrggT4CmifFcdTAwMTKyVVx1MDAxOWFD5Fx1MDAxOIOdTCb17cjTsUh6NofpScrnJ0T7iej0XHUwMDE4mlx1MDAxNuSchHFR5mK31Fx0Vlx1MDAwNMRZpcnI14vfkmfJ3PXe1kSs81x1MDAwYu6z0tW294NH31x1MDAxMv7z0yQ6KetGQP0-4c6A5quU48lcdTAwMDbLSK5cdTAwMTjVg1x1MDAxMMd3co5FQip2bfNaa2fQg37-W1xmi1x1MDAxZsOmb9i1XHUwMDE1oU6O7pRcbtk0TjPLXHUwMDA2REzqXCLW5pra1ilfPpfgZF1KvMdkXHUwMDA3J_ddZutdTLxVlHt0KFW7Plx1MDAwM1x1MDAxNven-_dqIyIsInN1YiI6InpoYW95aW5nYm8iLCJ0IjoiZmFsc2UiLCJ1dCI6Ilx1MDAwMz9cdTAwMDZNXHRCVlEiLCJleHAiOjE3MTg2MzY2NTYsImQiOiI2NTI3OTdhYTZjZTg2ZWI2NzNiN2Y2OTdjYWM0Y2ZkZSIsImlzcyI6Ik1JLUlORk9TRUMiLCJsIjoiJVx1MDAxYThcdTAwMTFWXHUwMDBmIiwidHlwIjoiY2FzIn0.o6vB65DrlSft290e5OM4TPD4mHOI5MXMOZFM-WS1RMdhMTrUfs4meDiBjIBY28dDlQ2ANXVnRDsKvu7zFWacvA",
Referer: "https://hackathon.tech.xiaomi.com/2024",
"Referrer-Policy": "strict-origin-when-cross-origin",
},
body: null,
method: "GET",
}
);
const data = (await res.json()) as any;
const list = data.data.votedInfoList as any[];
// 排序
list.sort((a: any, b: any) => b.voteCount - a.voteCount);
const index = list.findIndex((v) => v.teamName === "聚光灯");
const diff = list[0].voteCount - list[index].voteCount;
const content = `当前票数:${list[index].voteCount},排名:${
index + 1
}${diff}`;
service.lark.message.send("egg")(
"chat_id",
"oc_bafb83413e933e25994dd313f5d76c7e",
"text",
content
);
} catch (e) {
console.error(e);
}
};
export default sendRank;

View File

@ -18,6 +18,9 @@ const send =
content: string
) => {
const URL = `https://open.f.mioffice.cn/open-apis/im/v1/messages?receive_id_type=${receive_id_type}`;
if (msg_type === "text" && !content.includes("text:")) {
content = JSON.stringify({ text: content });
}
return larkNetTool.post(appName)<LarkServer.BaseRes>(URL, {
receive_id,
msg_type,

62
test/req.ts Normal file
View File

@ -0,0 +1,62 @@
import { initSchedule } from "../schedule";
import service from "../services";
const req = async () => {
const res = await fetch(
"https://hackathon.tech.xiaomi.com/api/hackathon/2024/vote/list?eventId=33",
{
headers: {
accept: "*/*",
"accept-language": "zh-CN,zh;q=0.9",
baggage:
"sentry-environment=production,sentry-public_key=5b89f1d1d10446f8aca80e4abb1d1024,sentry-trace_id=959f1d5181e3484f841c54042b92ffa2,sentry-sample_rate=1,sentry-sampled=true",
priority: "u=1, i",
"sec-ch-ua":
'"Not/A)Brand";v="8", "Chromium";v="126", "Microsoft Edge";v="126"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"sentry-trace": "959f1d5181e3484f841c54042b92ffa2-a6a672209bb4b943-1",
cookie:
"_ga=GA1.2.1499426685.1700792693; _ga_7QJJZB70B9=GS1.1.1712110519.9.1.1712110567.0.0.0; _tea_utm_cache_1229=undefined; _aegis_cas=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE3MTgzNzM4NTYsImRlcGlkIjoiK1x1MDAxYkx1JVx1MDAwMWd3aV1WYkNcdTAwMTVcXG9wXHUwMDA0aV1WakRcdTAwMWIyeFx1MDAwM1x1MDAwNGldXmEiLCJhdWQiOiJoYWNrYXRob24udGVjaC54aWFvbWkuY29tIiwiYyI6MCwiZGV0YWlsIjoixuw1XHLVr96TnXR4-es_QGRccrRB6rJcdTAwMTEyNrt3OfOQI-epXHK8x0fJX-NRjtVRUdNPJm_oQ1xm85OLkIA_V9ZQyvGd5u2Hxpp0x7lzcozY0ttZy35cL1wi3v-gXHUwMDFikppyuztEx1x1MDAxZaJcdTAwMWJKXHUwMDFjOi02fjH74sxXXGJcdTAwMTNIeTtpXHUwMDA0sdlcdTAwMTFaTyXIXHUwMDA20Vx1MDAxZVxyw6Y1lm_a8pJccimWXGZcdTAwMTFMXHUwMDBmacBcdTAwMDZl3ZTxuEhL5Vx1MDAxZVx1MDAxOFx1MDAwYofjYIHLh0Ggg3eNbLTv6HBcYlx1MDAxNLmKZd25wEQ5XHUwMDA3Jlx1MDAxOFxyJJSSXCJbdjxcdTAwMDPp3ZKvKHXXXHUwMDE5ei43NHNzS4orXHUwMDFlsJFrra2KllxcTu-ucoRRXCJH_mHqj-wy0ZmRROlcdTAwMGWMpLd8U2W6tyaEcFx1MDAxYapMrTRKqLyHqfJ4dTdcYvYycKt4N1x1MDAwMkSZxlwio9YoR7bmiWKpyOuIXHUwMDAzp9XrQrOJ7Lx4tiNcdTAwMDdcIlx1MDAwYmg0k82Dr__vnbVNdfSEkoL19Ow-LV9DNimXUpW9sEpqwLvbXHUwMDA3V-UzTTNZXHLwtn6iPnfcdjlaoCpN2KRcdTAwMGZcdTAwMWaqk43C4Uh6wmJgUWhmSu9Go33msVx1MDAxMWoyvWPgTfq-h8HzXHUwMDExs1wvRYxvt-09XG6r1_JcZqGUo3j2dVeGXHUwMDdmujb59_xlMaDeToNcdTAwMDE3KrggT4CmifFcdTAwMTKyVVx1MDAxOWFD5Fx1MDAxOIOdTCb17cjTsUh6NofpScrnJ0T7iej0XHUwMDE4mlx1MDAxNuSchHFR5mK31Fx0Vlx1MDAwNMRZpcnI14vfkmfJ3PXe1kSs81x1MDAwYu6z0tW294NH31x1MDAxMv7z0yQ6KetGQP0-4c6A5quU48lcdTAwMDbLSK5cdTAwMTjVg1x1MDAxMMd3co5FQip2bfNaa2fQg37-W1xmi1x1MDAxZsOmb9i1XHUwMDE1oU6O7pRcbtk0TjPLXHUwMDA2REzqXCLW5pra1ilfPpfgZF1KvMdkXHUwMDA3J_ddZutdTLxVlHt0KFW7Plx1MDAwM1x1MDAxNven-_dqIyIsInN1YiI6InpoYW95aW5nYm8iLCJ0IjoiZmFsc2UiLCJ1dCI6Ilx1MDAwMz9cdTAwMDZNXHRCVlEiLCJleHAiOjE3MTg2MzY2NTYsImQiOiI2NTI3OTdhYTZjZTg2ZWI2NzNiN2Y2OTdjYWM0Y2ZkZSIsImlzcyI6Ik1JLUlORk9TRUMiLCJsIjoiJVx1MDAxYThcdTAwMTFWXHUwMDBmIiwidHlwIjoiY2FzIn0.o6vB65DrlSft290e5OM4TPD4mHOI5MXMOZFM-WS1RMdhMTrUfs4meDiBjIBY28dDlQ2ANXVnRDsKvu7zFWacvA",
Referer: "https://hackathon.tech.xiaomi.com/2024",
"Referrer-Policy": "strict-origin-when-cross-origin",
},
body: null,
method: "GET",
}
);
return (await res.json()) as any;
};
setInterval(async () => {
const res = await req();
const list = res.data.votedInfoList as any[];
// 排序
list.sort((a: any, b: any) => b.voteCount - a.voteCount);
const index = list.findIndex((v) => v.teamName === "聚光灯");
const curItem = list[index];
const firstItem = list[0];
const voteCount = curItem.voteCount;
const voteCountFirst = firstItem.voteCount;
const diff = voteCountFirst - voteCount;
const content = `当前票数:${voteCount},排名:${
index + 1
}${diff}`;
console.log(content);
// console.log("🚀 ~ finalData:", finalData);
// if (res !== "配置模块不存在") {
// service.lark.message.send("egg")(
// "user_id",
// "zhaoyingbo",
// "text",
// '{"text":"投票系统可用"}'
// );
// clearInterval(timer);
// }
}, 2000);