mirror of
https://github.com/geekgeekrun/geekgeekrun.git
synced 2026-05-17 15:37:36 +08:00
add the logic to save chat record when open boss manually
This commit is contained in:
49
packages/sqlite-plugin/src/entity/ChatMessageRecord.ts
Normal file
49
packages/sqlite-plugin/src/entity/ChatMessageRecord.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { requireTypeorm } from "../utils/module-loader";
|
||||
const { Entity, Column, PrimaryGeneratedColumn } = requireTypeorm()
|
||||
|
||||
@Entity()
|
||||
export class ChatMessageRecord {
|
||||
@PrimaryGeneratedColumn()
|
||||
mid: number;
|
||||
|
||||
@Column()
|
||||
encryptFromUserId: string;
|
||||
|
||||
@Column()
|
||||
encryptToUserId: string;
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
time: Date | null;
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
type?: 'text' | 'image' | 'resume';
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
style?: 'sent' | 'receive';
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
text: string;
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
imageUrl?: string;
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
imageWidth?: number;
|
||||
|
||||
@Column({
|
||||
nullable: true
|
||||
})
|
||||
imageHeight?: number;
|
||||
}
|
||||
@@ -9,6 +9,7 @@ import { BossInfoChangeLog } from "./entity/BossInfoChangeLog";
|
||||
import { CompanyInfoChangeLog } from "./entity/CompanyInfoChangeLog";
|
||||
import { JobInfoChangeLog } from "./entity/JobInfoChangeLog";
|
||||
import { MarkAsNotSuitLog } from "./entity/MarkAsNotSuitLog";
|
||||
import { ChatMessageRecord } from "./entity/ChatMessageRecord";
|
||||
|
||||
function getBossInfoIfIsEqual (savedOne, currentOne) {
|
||||
if (savedOne === currentOne) {
|
||||
@@ -290,3 +291,19 @@ export async function saveMarkAsNotSuitRecord(
|
||||
//#endregion
|
||||
return
|
||||
}
|
||||
|
||||
export async function saveChatMessageRecord(
|
||||
ds: DataSource,
|
||||
records: ChatMessageRecord[]
|
||||
) {
|
||||
//#region mark-as-not-suit-log
|
||||
const chatMessageRecordList = records.map(it => {
|
||||
const o = new ChatMessageRecord()
|
||||
Object.assign(o, it)
|
||||
return o
|
||||
})
|
||||
const chatMessageRecordRepository = ds.getRepository(ChatMessageRecord);
|
||||
await chatMessageRecordRepository.save(chatMessageRecordList);
|
||||
//#endregion
|
||||
return
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ import { VBossLibrary } from "./entity/VBossLibrary";
|
||||
import { VJobLibrary } from "./entity/VJobLibrary";
|
||||
import { VCompanyLibrary } from "./entity/VCompanyLibrary"
|
||||
import { VMarkAsNotSuitLog } from "./entity/VMarkAsNotSuitLog"
|
||||
import { ChatMessageRecord } from './entity/ChatMessageRecord'
|
||||
|
||||
import sqlite3 from 'sqlite3';
|
||||
import * as cliHighlight from 'cli-highlight';
|
||||
@@ -53,6 +54,7 @@ export function initDb(dbFilePath) {
|
||||
VCompanyLibrary,
|
||||
MarkAsNotSuitLog,
|
||||
VMarkAsNotSuitLog,
|
||||
ChatMessageRecord,
|
||||
],
|
||||
migrations: [
|
||||
UpdateChatStartupLogTable1729182577167
|
||||
|
||||
@@ -9,7 +9,8 @@ import { setDomainLocalStorage } from '@geekgeekrun/utils/puppeteer/local-storag
|
||||
import {
|
||||
saveJobInfoFromRecommendPage,
|
||||
saveChatStartupRecord,
|
||||
saveMarkAsNotSuitRecord
|
||||
saveMarkAsNotSuitRecord,
|
||||
saveChatMessageRecord
|
||||
} from '@geekgeekrun/sqlite-plugin/dist/handlers'
|
||||
import { initDb } from '@geekgeekrun/sqlite-plugin'
|
||||
import { getPublicDbFilePath } from '@geekgeekrun/geek-auto-start-chat-with-boss/runtime-file-utils.mjs'
|
||||
@@ -26,6 +27,7 @@ import * as JSONStream from 'JSONStream'
|
||||
import { ChatStartupFrom } from '@geekgeekrun/sqlite-plugin/dist/entity/ChatStartupLog'
|
||||
import gtag from '../../utils/gtag'
|
||||
import attachListenerForKillSelfOnParentExited from '../../utils/attachListenerForKillSelfOnParentExited'
|
||||
import { type ChatMessageRecord } from '@geekgeekrun/sqlite-plugin/src/entity/ChatMessageRecord'
|
||||
|
||||
const __dirname = url.fileURLToPath(new URL('.', import.meta.url))
|
||||
const isRunFromUi = Boolean(process.env.MAIN_BOSSGEEKGO_UI_RUN_MODE)
|
||||
@@ -166,6 +168,49 @@ const attachRequestsListener = async (target: Target) => {
|
||||
chatStartupFrom: ChatStartupFrom.ManuallyFromRecommendList
|
||||
}
|
||||
)
|
||||
} else if (
|
||||
page.url().startsWith('https://www.zhipin.com/web/geek/chat') &&
|
||||
response.url().startsWith('https://www.zhipin.com/wapi/zpchat/geek/historyMsg')
|
||||
) {
|
||||
const currentUserInfo = await page.evaluate(
|
||||
'document.querySelector(".main-wrap").__vue__.$store.state.userInfo'
|
||||
)
|
||||
const request = response.request().url()
|
||||
|
||||
const url = new URL(request)
|
||||
const encryptBossIdInAddFriendUrl = url.searchParams.get('bossId')
|
||||
|
||||
const bossInfo = await page.evaluate(
|
||||
'document.querySelector(".chat-conversation").__vue__.bossInfo$'
|
||||
)
|
||||
if (encryptBossIdInAddFriendUrl !== bossInfo.encryptBossId) {
|
||||
return
|
||||
}
|
||||
const rawChatRecordList =
|
||||
(
|
||||
await page.evaluate(
|
||||
'document.querySelector(".message-content .chat-record").__vue__.records$'
|
||||
)
|
||||
)?.filter((msg) => ['received', 'sent'].includes(msg.style)) ?? []
|
||||
|
||||
const chatRecordList = rawChatRecordList.map(it => {
|
||||
const mappedItem = {} as InstanceType<typeof ChatMessageRecord>
|
||||
mappedItem.mid = it.mid
|
||||
mappedItem.encryptFromUserId = it.style === 'sent' ? currentUserInfo.encryptUserId : it.style === 'received' ? bossInfo.encryptBossId : ''
|
||||
mappedItem.encryptToUserId = it.style === 'sent' ? bossInfo.encryptBossId: it.style === 'received' ? currentUserInfo.encryptUserId : ''
|
||||
mappedItem.style = it.style
|
||||
mappedItem.type = it.type
|
||||
mappedItem.time = it.time ? new Date(it.time) : null
|
||||
mappedItem.text = it.text
|
||||
if (it.type === 'image') {
|
||||
mappedItem.imageUrl = it.image?.originImage?.url
|
||||
mappedItem.imageHeight = it.image?.originImage?.url?.height
|
||||
mappedItem.imageWidth = it.image?.originImage?.url?.width
|
||||
}
|
||||
|
||||
return mappedItem
|
||||
})
|
||||
await saveChatMessageRecord(await dbInitPromise, chatRecordList)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user