115 lines
2.9 KiB
TypeScript
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
|