feat: 支持定时发送排名信息
This commit is contained in:
parent
289e88711a
commit
4932d6b8d6
@ -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;
|
||||
|
@ -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);
|
||||
// 这个用时比较久,先发一条提醒用户收到了请求
|
||||
|
@ -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
52
schedule/rank.ts
Normal 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;
|
@ -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
62
test/req.ts
Normal 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);
|
Loading…
x
Reference in New Issue
Block a user