12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- package process
- import (
- "fmt"
- "strings"
- "time"
- "github.com/eryajf/chatgpt-dingtalk/pkg/db"
- "github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
- "github.com/eryajf/chatgpt-dingtalk/pkg/logger"
- "github.com/eryajf/chatgpt-dingtalk/public"
- )
- // 与数据库交互的请求处理在此
- // SelectHistory 查询会话历史
- func SelectHistory(rmsg *dingbot.ReceiveMsg) error {
- name := strings.TrimSpace(strings.Split(rmsg.Text.Content, ":")[1])
- if !public.JudgeAdminUsers(rmsg.SenderStaffId) {
- _, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), "**🤷 抱歉,您没有查询对话记录的权限,只有程序管理员可以查询!**")
- if err != nil {
- logger.Error(fmt.Errorf("send message error: %v", err))
- return err
- }
- return nil
- }
- // 获取数据列表
- var chat db.Chat
- if !chat.Exist(map[string]interface{}{"username": name}) {
- _, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), "用户名错误,这个用户不存在,请核实之后再进行查询")
- if err != nil {
- logger.Error(fmt.Errorf("send message error: %v", err))
- return err
- }
- return fmt.Errorf("用户名错误,这个用户不存在,请核实之后重新查询")
- }
- chats, err := chat.List(db.ChatListReq{
- Username: name,
- })
- if err != nil {
- return err
- }
- var rst string
- for _, chatTmp := range chats {
- ctime := chatTmp.CreatedAt.Format("2006-01-02 15:04:05")
- if chatTmp.ChatType == 1 {
- rst += fmt.Sprintf("## 🙋 %s 问\n\n**时间:** %v\n\n**问题为:** %s\n\n", chatTmp.Username, ctime, chatTmp.Content)
- } else {
- rst += fmt.Sprintf("## 🤖 机器人 答\n\n**时间:** %v\n\n**回答如下:** \n\n%s\n\n", ctime, chatTmp.Content)
- }
- // TODO: 答案应该严格放在问题之后,目前只根据ID排序进行的陈列,当一个用户同时提出多个问题时,最终展示的可能会有点问题
- }
- fileName := time.Now().Format("20060102-150405") + ".md"
- // 写入文件
- if err = public.WriteToFile("./data/chatHistory/"+fileName, []byte(rst)); err != nil {
- return err
- }
- // 回复@我的用户
- reply := fmt.Sprintf("- 在线查看: [点我](%s)\n- 下载文件: [点我](%s)\n- 在线预览请安装插件:[Markdown Preview Plus](https://chrome.google.com/webstore/detail/markdown-preview-plus/febilkbfcbhebfnokafefeacimjdckgl)", public.Config.ServiceURL+"/history/"+fileName, public.Config.ServiceURL+"/download/"+fileName)
- logger.Info(fmt.Sprintf("🤖 %s 得到的答案: %#v", rmsg.SenderNick, reply))
- _, err = rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), reply)
- if err != nil {
- logger.Error(fmt.Errorf("send message error: %v", err))
- return err
- }
- return nil
- }
|