()
| 40 | ) |
| 41 | |
| 42 | func init() { |
| 43 | engine.OnRegex(`^(?:chatgpt|//)([\s\S]*)$`, zero.OnlyToMe, getdb).SetBlock(false). |
| 44 | Handle(func(ctx *zero.Ctx) { |
| 45 | var messages []chatMessage |
| 46 | args := ctx.State["regex_matched"].([]string)[1] |
| 47 | key := sessionKey{ |
| 48 | group: ctx.Event.GroupID, |
| 49 | user: ctx.Event.UserID, |
| 50 | } |
| 51 | if args == "reset" || args == "重置记忆" { |
| 52 | cache.Delete(key) |
| 53 | ctx.SendChain(message.Text("已清除上下文!")) |
| 54 | return |
| 55 | } |
| 56 | // 添加预设 |
| 57 | apiKey, err := getkey(ctx) |
| 58 | if err != nil { |
| 59 | ctx.SendChain(message.Text("ERROR:", err)) |
| 60 | return |
| 61 | } |
| 62 | gid := ctx.Event.GroupID |
| 63 | if gid == 0 { |
| 64 | gid = -ctx.Event.UserID |
| 65 | } |
| 66 | content, err := db.findgroupmode(gid) |
| 67 | if err == nil { |
| 68 | messages = append(messages, chatMessage{ |
| 69 | Role: "system", |
| 70 | Content: content, |
| 71 | }) |
| 72 | if len(cache.Get(key)) > 1 { |
| 73 | messages = append(messages, cache.Get(key)[1:]...) |
| 74 | } |
| 75 | } else { |
| 76 | c, err := db.findgroupmode(-1) |
| 77 | if err != nil { |
| 78 | messages = append(messages, cache.Get(key)...) |
| 79 | } else { |
| 80 | messages = append(messages, chatMessage{ |
| 81 | Role: "system", |
| 82 | Content: c, |
| 83 | }) |
| 84 | if len(cache.Get(key)) > 1 { |
| 85 | messages = append(messages, cache.Get(key)[1:]...) |
| 86 | } |
| 87 | } |
| 88 | } |
| 89 | messages = append(messages, chatMessage{ |
| 90 | Role: "user", |
| 91 | Content: args, |
| 92 | }) |
| 93 | resp, err := completions(messages, apiKey) |
| 94 | if err != nil { |
| 95 | ctx.SendChain(message.Text("请求ChatGPT失败: ", err)) |
| 96 | return |
| 97 | } |
| 98 | reply := resp.Choices[0].Message |
| 99 | reply.Content = strings.TrimSpace(reply.Content) |
nothing calls this directly
no test coverage detected