From 54eaa00b67aa48fbd6c3798d736c8486cbc311e5 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Fri, 27 Dec 2024 02:03:31 +0800 Subject: [PATCH] add throttleIntervalMinutes config field for auto reminder --- .../default-config-file/boss.json | 5 +- .../flow/OPEN_SETTING_WINDOW/ipc/index.ts | 33 +++++++++--- .../flow/READ_NO_REPLY_AUTO_REMINDER/index.ts | 10 +++- .../Configuration/ReadNoReplyReminder.vue | 50 +++++++++++++++++-- 4 files changed, 82 insertions(+), 16 deletions(-) diff --git a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json index e4af7f2..bfc9ba1 100644 --- a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json +++ b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json @@ -6,5 +6,8 @@ "scaleList": [], "industryList": [] }, - "expectJobRegExpStr": "" + "expectJobRegExpStr": "", + "autoReminder": { + "throttleIntervalMinutes": 10 + } } \ No newline at end of file diff --git a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts index d117d7e..084f189 100644 --- a/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts +++ b/packages/ui/src/main/flow/OPEN_SETTING_WINDOW/ipc/index.ts @@ -28,6 +28,8 @@ import { import { PageReq } from '../../../../common/types/pagination' import { pipeWriteRegardlessError } from '../../utils/pipe' import { WriteStream } from 'node:fs' +// eslint-disable-next-line vue/prefer-import-from-vue +import { hasOwn } from '@vue/shared' export default function initIpc() { ipcMain.on('open-external-link', (_, link) => { @@ -55,18 +57,33 @@ export default function initIpc() { payload = JSON.parse(payload) ensureConfigFileExist() + const promiseArr: Array> = [] + const dingtalkConfig = readConfigFile('dingtalk.json') - dingtalkConfig.groupRobotAccessToken = payload.dingtalkRobotAccessToken + if (hasOwn(payload, 'dingtalkRobotAccessToken')) { + dingtalkConfig.groupRobotAccessToken = payload.dingtalkRobotAccessToken + } + promiseArr.push(writeConfigFile('dingtalk.json', dingtalkConfig)) const bossConfig = readConfigFile('boss.json') - bossConfig.anyCombineRecommendJobFilter = payload.anyCombineRecommendJobFilter - bossConfig.expectJobRegExpStr = payload.expectJobRegExpStr + if (hasOwn(payload, 'anyCombineRecommendJobFilter')) { + bossConfig.anyCombineRecommendJobFilter = payload.anyCombineRecommendJobFilter + } + if (hasOwn(payload, 'expectJobRegExpStr')) { + bossConfig.expectJobRegExpStr = payload.expectJobRegExpStr + } + if (hasOwn(payload, 'autoReminder')) { + bossConfig.autoReminder = payload.autoReminder + } + promiseArr.push(writeConfigFile('boss.json', bossConfig)) - return await Promise.all([ - writeConfigFile('dingtalk.json', dingtalkConfig), - writeConfigFile('target-company-list.json', payload.expectCompanies.split(',')), - writeConfigFile('boss.json', bossConfig) - ]) + if (hasOwn(payload, 'expectCompanies')) { + promiseArr.push( + writeConfigFile('target-company-list.json', payload.expectCompanies?.split(',') ?? []) + ) + } + + return await Promise.all(promiseArr) }) ipcMain.handle('read-storage-file', async (ev, payload) => { diff --git a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts index f09f029..455ad91 100644 --- a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts +++ b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts @@ -6,7 +6,10 @@ import { sleep, sleepWithRandomDelay } from '@geekgeekrun/utils/sleep.mjs' import attachListenerForKillSelfOnParentExited from '../../utils/attachListenerForKillSelfOnParentExited' import { app } from 'electron' import { initDb } from '@geekgeekrun/sqlite-plugin' -import { getPublicDbFilePath } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' +import { + getPublicDbFilePath, + readConfigFile +} from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' import { ChatMessageRecord } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatMessageRecord' import { saveChatMessageRecord } from '@geekgeekrun/sqlite-plugin/dist/handlers' import { writeStorageFile } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs' @@ -14,6 +17,8 @@ import * as fs from 'fs' import { pipeWriteRegardlessError } from '../utils/pipe' import { BossInfo } from '@geekgeekrun/sqlite-plugin/dist/entity/BossInfo' +const throttleIntervalMinutes = + readConfigFile('boss.json').autoReminder?.throttleIntervalMinutes ?? 10 const dbInitPromise = initDb(getPublicDbFilePath()) export const pageMapByName: { @@ -263,7 +268,8 @@ const mainLoop = async () => { (!bossInfo.bothTalked || !historyMessageList.filter((it) => it.style === 'received').length) && // don't disturb too much - Date.now() - lastGeekMessageSendTime >= 8 * 60 * 60 * 1000 + Date.now() - lastGeekMessageSendTime >= + (throttleIntervalMinutes + 4 * Math.random()) * 60 * 1000 ) { await sleepWithRandomDelay(3250) await sendLookForwardReplyEmotion(pageMapByName.boss!) diff --git a/packages/ui/src/renderer/src/page/Configuration/ReadNoReplyReminder.vue b/packages/ui/src/renderer/src/page/Configuration/ReadNoReplyReminder.vue index a7aa5cd..038469e 100644 --- a/packages/ui/src/renderer/src/page/Configuration/ReadNoReplyReminder.vue +++ b/packages/ui/src/renderer/src/page/Configuration/ReadNoReplyReminder.vue @@ -1,6 +1,11 @@