egg_server/routes/sheet/createKVTemp.ts
zhaoyingbo b44f66f6be
All checks were successful
Egg Server CI/CD / build-image (push) Successful in 1m9s
Egg Server CI/CD / refresh-image (push) Successful in 14s
Egg Server CI/CD / fast-deploy (push) Successful in 5s
feat(mi-chat): 优化消息返回功能
2024-10-11 10:59:32 +00:00

115 lines
2.9 KiB
TypeScript

import { getChatId, getChatType, getUserId } from "@egg/lark-msg-tool"
import { Context, LarkServer } from "../../types"
import { genSheetDbErrorMsg } from "../../utils/larkMsg"
/**
* 创建键值多维表格
* 实际上是从模版复制出来一个
* @param ctx - Context
*/
const create = async ({
larkService,
logger,
}: Context.Data): Promise<LarkServer.BaseRes> => {
const copyRes = await larkService.drive.copyFile(
"D6ETfzaU9lN08adVDz3kjLey4Bx",
"bask4drDOy7zc3nDVyZb5RYDzOe",
"xxx 项目 KV管理",
"bitable"
)
if (copyRes.code !== 0) return copyRes
const fileToken = copyRes.data.file.token
const tableRes = await larkService.sheet.getTables(fileToken)
if (tableRes.code !== 0) return tableRes
const tableId = tableRes.data[0].table_id
const viewRes = await larkService.sheet.getViews(fileToken, tableId)
if (viewRes.code !== 0) return viewRes
const viewId = viewRes.data[0].view_id
const link = `https://xiaomi.f.mioffice.cn/base/${fileToken}?table=${tableId}&view=${viewId}`
const token = `${fileToken}|${tableId}|${viewId}`
logger.info(`create KV bitable successfully: ${{ link, token }}`)
return {
code: 0,
data: {
link,
token,
fileToken,
tableId,
viewId,
},
message: "success",
}
}
/**
* 从事件创建键值多维表格
* @param ctx - Context
*/
const createFromEvent = async (ctx: Context.Data) => {
const chatId = getChatId(ctx.body)
if (!chatId) return
// 先发一条消息告诉用户正在创建
ctx.larkService.message.send(
"chat_id",
chatId,
"text",
"正在为您创建多维表格,请稍等片刻~"
)
try {
const createRes = await create(ctx)
// 错误处理,发送错误消息
if (createRes.code !== 0) throw new Error(createRes.message)
// 创建成功,根据消息类型添加协作者
if (getChatType(ctx.body) === "p2p") {
const addRes = await ctx.larkService.drive.addCollaborator(
createRes.data.fileToken,
"bitable",
"userid",
getUserId(ctx.body)!,
"full_access"
)
if (addRes.code !== 0) throw new Error(addRes.message)
}
// 为群组添加协作者
else {
const addRes = await ctx.larkService.drive.addCollaborator(
createRes.data.fileToken,
"bitable",
"openchat",
chatId,
"full_access"
)
if (addRes.code !== 0) throw new Error(addRes.message)
}
// 全部成功,发送成功消息
ctx.larkService.message.sendTemp(
"chat_id",
chatId,
"ctp_AA00oqPWPXtG",
createRes.data
)
} catch (e: any) {
ctx.logger.error(`create KV bitable failed: ${e.message}`)
const errorMsg = genSheetDbErrorMsg(e.message) as string
ctx.larkService.message.send("chat_id", chatId, "interactive", errorMsg)
}
}
const createKVTemp = {
create,
createFromEvent,
}
export default createKVTemp