mirror of
https://github.com/eryajf/chatgpt-dingtalk.git
synced 2025-10-05 08:07:03 +08:00
feat: 调整log库以及其他包的组织目录 (#132)
This commit is contained in:
@@ -347,6 +347,7 @@ $ go run main.go
|
||||
- [xgfone/ship](https://github.com/xgfone/ship)
|
||||
- [avast/retry-go](https://github.com/avast/retry-go)
|
||||
- [sashabaranov/go-openapi](https://github.com/sashabaranov/go-openai)
|
||||
- [charmbracelet/log](https://github.com/charmbracelet/log)
|
||||
|
||||
## 赞赏
|
||||
|
||||
|
@@ -8,7 +8,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/eryajf/chatgpt-dingtalk/public/logger"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
|
||||
)
|
||||
|
||||
// Configuration 项目配置
|
||||
@@ -43,7 +43,7 @@ func LoadConfig() *Configuration {
|
||||
config = &Configuration{}
|
||||
f, err := os.Open("config.json")
|
||||
if err != nil {
|
||||
logger.Danger(fmt.Errorf("open config err: %+v", err))
|
||||
logger.Fatal(fmt.Errorf("open config err: %+v", err))
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
@@ -72,7 +72,7 @@ func LoadConfig() *Configuration {
|
||||
if sessionTimeout != "" {
|
||||
duration, err := strconv.ParseInt(sessionTimeout, 10, 64)
|
||||
if err != nil {
|
||||
logger.Danger(fmt.Sprintf("config session timeout err: %v ,get is %v", err, sessionTimeout))
|
||||
logger.Fatal(fmt.Sprintf("config session timeout err: %v ,get is %v", err, sessionTimeout))
|
||||
return
|
||||
}
|
||||
config.SessionTimeout = time.Duration(duration) * time.Second
|
||||
@@ -109,10 +109,10 @@ func LoadConfig() *Configuration {
|
||||
config.Port = "8090"
|
||||
}
|
||||
if config.ApiKey == "" {
|
||||
logger.Danger("config err: api key required")
|
||||
logger.Fatal("config err: api key required")
|
||||
}
|
||||
if config.ServiceURL == "" {
|
||||
logger.Danger("config err: service url required")
|
||||
logger.Fatal("config err: service url required")
|
||||
}
|
||||
return config
|
||||
}
|
||||
|
12
go.mod
12
go.mod
@@ -3,6 +3,7 @@ module github.com/eryajf/chatgpt-dingtalk
|
||||
go 1.18
|
||||
|
||||
require (
|
||||
github.com/charmbracelet/log v0.2.1
|
||||
github.com/go-resty/resty/v2 v2.7.0
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible
|
||||
github.com/solywsh/chatgpt v0.0.14
|
||||
@@ -12,9 +13,18 @@ require (
|
||||
|
||||
require (
|
||||
github.com/avast/retry-go v2.7.0+incompatible // indirect
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
|
||||
github.com/charmbracelet/lipgloss v0.7.1 // indirect
|
||||
github.com/go-logfmt/logfmt v0.6.0 // indirect
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
|
||||
github.com/mattn/go-isatty v0.0.18 // indirect
|
||||
github.com/mattn/go-runewidth v0.0.14 // indirect
|
||||
github.com/muesli/reflow v0.3.0 // indirect
|
||||
github.com/muesli/termenv v0.15.1 // indirect
|
||||
github.com/rivo/uniseg v0.2.0 // indirect
|
||||
github.com/sashabaranov/go-openai v1.5.3 // indirect
|
||||
github.com/stretchr/testify v1.8.2 // indirect
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb // indirect
|
||||
golang.org/x/sys v0.6.0 // indirect
|
||||
)
|
||||
|
||||
replace github.com/solywsh/chatgpt => ./pkg/chatgpt
|
||||
|
35
go.sum
35
go.sum
@@ -1,29 +1,44 @@
|
||||
github.com/avast/retry-go v2.7.0+incompatible h1:XaGnzl7gESAideSjr+I8Hki/JBi+Yb9baHlMRPeSC84=
|
||||
github.com/avast/retry-go v2.7.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevBhOOCWBLXXy3hyiqqBrY=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k=
|
||||
github.com/aymanbagabas/go-osc52/v2 v2.0.1/go.mod h1:uYgXzlJ7ZpABp8OJ+exZzJJhRNQ2ASbcXHWsFqH8hp8=
|
||||
github.com/charmbracelet/lipgloss v0.7.1 h1:17WMwi7N1b1rVWOjMT+rCh7sQkvDU75B2hbZpc5Kc1E=
|
||||
github.com/charmbracelet/lipgloss v0.7.1/go.mod h1:yG0k3giv8Qj8edTCbbg6AlQ5e8KNWpFujkNawKNhE2c=
|
||||
github.com/charmbracelet/log v0.2.1 h1:1z7jpkk4yKyjwlmKmKMM5qnEDSpV32E7XtWhuv0mTZE=
|
||||
github.com/charmbracelet/log v0.2.1/go.mod h1:GwFfjewhcVDWLrpAbY5A0Hin9YOlEn40eWT4PNaxFT4=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
|
||||
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
|
||||
github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
|
||||
github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
|
||||
github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
|
||||
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||
github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU=
|
||||
github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||
github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
|
||||
github.com/muesli/reflow v0.3.0/go.mod h1:pbwTDkVPibjO2kyvBQRBxTWEEGDGq0FlB1BIKtnHY/8=
|
||||
github.com/muesli/termenv v0.15.1 h1:UzuTb/+hhlBugQz28rpzey4ZuKcZ03MeKsoG7IJZIxs=
|
||||
github.com/muesli/termenv v0.15.1/go.mod h1:HeAQPTzpfs016yGtA4g00CsdYnVLJvxsS4ANqrZs2sQ=
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
|
||||
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/sashabaranov/go-openai v1.5.3 h1:o6n6dj0h9u+5mE1m+D8eT0zYhh7229o8ymDd2zDwAXU=
|
||||
github.com/sashabaranov/go-openai v1.5.3/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
|
||||
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
|
||||
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||
github.com/xgfone/ship/v5 v5.3.1 h1:e5qhMT6DSQOE6A/xDBL/Ftf28BGptNw6Etq+w+pme6E=
|
||||
github.com/xgfone/ship/v5 v5.3.1/go.mod h1:mGI+65lLL3kaOseMkWUYgy+OFl27WV2LY1NSsecu/9g=
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb h1:pirldcYWx7rx7kE5r+9WsOXPXK0+WH5+uZ7uPmJ44uM=
|
||||
golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
|
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
@@ -31,6 +46,4 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
|
||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
||||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
|
8
main.go
8
main.go
@@ -5,9 +5,10 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/process"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public/logger"
|
||||
"github.com/xgfone/ship/v5"
|
||||
)
|
||||
|
||||
@@ -35,7 +36,7 @@ var Welcome string = `Commands:
|
||||
func Start() {
|
||||
app := ship.Default()
|
||||
app.Route("/").POST(func(c *ship.Context) error {
|
||||
var msgObj public.ReceiveMsg
|
||||
var msgObj dingbot.ReceiveMsg
|
||||
err := c.Bind(&msgObj)
|
||||
if err != nil {
|
||||
return ship.ErrBadRequest.New(fmt.Errorf("bind to receivemsg failed : %v", err))
|
||||
@@ -50,7 +51,7 @@ func Start() {
|
||||
// TODO: 校验请求
|
||||
if len(msgObj.Text.Content) == 1 || strings.TrimSpace(msgObj.Text.Content) == "帮助" {
|
||||
// 欢迎信息
|
||||
_, err := msgObj.ReplyToDingtalk(string(public.TEXT), Welcome)
|
||||
_, err := msgObj.ReplyToDingtalk(string(dingbot.TEXT), Welcome)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return ship.ErrBadRequest.New(fmt.Errorf("send message error: %v", err))
|
||||
@@ -62,6 +63,7 @@ func Start() {
|
||||
return process.ImageGenerate(&msgObj)
|
||||
default:
|
||||
msgObj.Text.Content = process.GeneratePrompt(strings.TrimSpace(msgObj.Text.Content))
|
||||
logger.Info(fmt.Sprintf("after generate prompt: %#v", msgObj.Text.Content))
|
||||
return process.ProcessRequest(&msgObj)
|
||||
}
|
||||
}
|
||||
|
@@ -4,8 +4,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/avast/retry-go"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public/logger"
|
||||
)
|
||||
|
||||
// SingleQa 单聊
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package public
|
||||
package dingbot
|
||||
|
||||
import (
|
||||
"bytes"
|
33
pkg/logger/logger.go
Normal file
33
pkg/logger/logger.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"os"
|
||||
"sync"
|
||||
|
||||
"github.com/charmbracelet/log"
|
||||
)
|
||||
|
||||
var Logger *log.Logger
|
||||
var once sync.Once
|
||||
|
||||
func init() {
|
||||
once.Do(func() {
|
||||
Logger = log.New(os.Stderr)
|
||||
})
|
||||
}
|
||||
|
||||
func Info(args ...interface{}) {
|
||||
Logger.Info(args)
|
||||
}
|
||||
|
||||
func Warning(args ...interface{}) {
|
||||
Logger.Warn(args)
|
||||
}
|
||||
|
||||
func Error(args ...interface{}) {
|
||||
Logger.Error(args)
|
||||
}
|
||||
|
||||
func Fatal(args ...interface{}) {
|
||||
Logger.Fatal(args)
|
||||
}
|
@@ -5,32 +5,33 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public/logger"
|
||||
"github.com/solywsh/chatgpt"
|
||||
)
|
||||
|
||||
// ProcessRequest 分析处理请求逻辑
|
||||
func ProcessRequest(rmsg *public.ReceiveMsg) error {
|
||||
func ProcessRequest(rmsg *dingbot.ReceiveMsg) error {
|
||||
if public.CheckRequest(rmsg) {
|
||||
content := strings.TrimSpace(rmsg.Text.Content)
|
||||
switch content {
|
||||
case "单聊":
|
||||
public.UserService.SetUserMode(rmsg.SenderStaffId, content)
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("=====现在进入与👉%s👈单聊的模式 =====", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("=====现在进入与👉%s👈单聊的模式 =====", rmsg.SenderNick))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "串聊":
|
||||
public.UserService.SetUserMode(rmsg.SenderStaffId, content)
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("=====现在进入与👉%s👈串聊的模式 =====", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("=====现在进入与👉%s👈串聊的模式 =====", rmsg.SenderNick))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "重置":
|
||||
public.UserService.ClearUserMode(rmsg.SenderStaffId)
|
||||
public.UserService.ClearUserSessionContext(rmsg.SenderStaffId)
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("=====已重置与👉%s👈的对话模式,可以开始新的对话=====", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("=====已重置与👉%s👈的对话模式,可以开始新的对话=====", rmsg.SenderNick))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
@@ -39,12 +40,12 @@ func ProcessRequest(rmsg *public.ReceiveMsg) error {
|
||||
for _, v := range *public.Prompt {
|
||||
title = title + v.Title + " | "
|
||||
}
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("%s 您好,当前程序内置集成了这些prompt:\n====================================\n| %s \n====================================\n你可以选择某个prompt开头,然后进行对话。\n以周报为例,可发送 #周报 我本周用Go写了一个钉钉集成ChatGPT的聊天应用", rmsg.SenderNick, title))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("%s 您好,当前程序内置集成了这些prompt:\n====================================\n| %s \n====================================\n你可以选择某个prompt开头,然后进行对话。\n以周报为例,可发送 #周报 我本周用Go写了一个钉钉集成ChatGPT的聊天应用", rmsg.SenderNick, title))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "图片":
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.MARKDOWN), "发送以 **#图片** 开头的内容,将会触发绘画能力,图片生成之后,将会保存在程序根目录下的 **images目录** \n 如果你绘图没有思路,可以在这两个网站寻找灵感。\n - [https://lexica.art/](https://lexica.art/)\n- [https://www.clickprompt.org/zh-CN/](https://www.clickprompt.org/zh-CN/)")
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), "发送以 **#图片** 开头的内容,将会触发绘画能力,图片生成之后,将会保存在程序根目录下的 **images目录** \n 如果你绘图没有思路,可以在这两个网站寻找灵感。\n - [https://lexica.art/](https://lexica.art/)\n- [https://www.clickprompt.org/zh-CN/](https://www.clickprompt.org/zh-CN/)")
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
@@ -61,7 +62,7 @@ func ProcessRequest(rmsg *public.ReceiveMsg) error {
|
||||
cacheMsg = fmt.Sprintf("💵 已用: 💲%v\n💵 剩余: 💲%v\n⏳ 有效时间: 从 %v 到 %v\n", fmt.Sprintf("%.2f", rst.TotalUsed), fmt.Sprintf("%.2f", rst.TotalAvailable), t1.Format("2006-01-02 15:04:05"), t2.Format("2006-01-02 15:04:05"))
|
||||
}
|
||||
|
||||
_, err := rmsg.ReplyToDingtalk(string(public.TEXT), cacheMsg)
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), cacheMsg)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
@@ -77,7 +78,7 @@ func ProcessRequest(rmsg *public.ReceiveMsg) error {
|
||||
}
|
||||
|
||||
// 执行处理请求
|
||||
func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
func Do(mode string, rmsg *dingbot.ReceiveMsg) error {
|
||||
// 先把模式注入
|
||||
public.UserService.SetUserMode(rmsg.SenderStaffId, mode)
|
||||
switch mode {
|
||||
@@ -87,13 +88,13 @@ func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
logger.Info(fmt.Errorf("gpt request error: %v", err))
|
||||
if strings.Contains(fmt.Sprintf("%v", err), "maximum text length exceeded") {
|
||||
public.UserService.ClearUserSessionContext(rmsg.SenderStaffId)
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v,看起来是超过最大对话限制了,已自动重置您的对话", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v,看起来是超过最大对话限制了,已自动重置您的对话", err))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
@@ -107,7 +108,7 @@ func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
reply = strings.TrimSpace(reply)
|
||||
reply = strings.Trim(reply, "\n")
|
||||
// 回复@我的用户
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), reply)
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), reply)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
@@ -119,13 +120,13 @@ func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
logger.Info(fmt.Sprintf("gpt request error: %v", err))
|
||||
if strings.Contains(fmt.Sprintf("%v", err), "maximum text length exceeded") {
|
||||
public.UserService.ClearUserSessionContext(rmsg.SenderStaffId)
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v,看起来是超过最大对话限制了,已自动重置您的对话", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v,看起来是超过最大对话限制了,已自动重置您的对话", err))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
@@ -139,7 +140,7 @@ func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
reply = strings.TrimSpace(reply)
|
||||
reply = strings.Trim(reply, "\n")
|
||||
// 回复@我的用户
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), reply)
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), reply)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
@@ -152,11 +153,11 @@ func Do(mode string, rmsg *public.ReceiveMsg) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func ImageGenerate(rmsg *public.ReceiveMsg) error {
|
||||
func ImageGenerate(rmsg *dingbot.ReceiveMsg) error {
|
||||
reply, err := chatgpt.ImageQa(rmsg.Text.Content, rmsg.SenderStaffId)
|
||||
if err != nil {
|
||||
logger.Info(fmt.Errorf("gpt request error: %v", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("请求openai失败了,错误信息:%v", err))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
@@ -169,7 +170,7 @@ func ImageGenerate(rmsg *public.ReceiveMsg) error {
|
||||
reply = strings.TrimSpace(reply)
|
||||
reply = strings.Trim(reply, "\n")
|
||||
// 回复@我的用户
|
||||
_, err = rmsg.ReplyToDingtalk(string(public.MARKDOWN), fmt.Sprintf(">点击图片可旋转或放大。\n", reply))
|
||||
_, err = rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), fmt.Sprintf(">点击图片可旋转或放大。\n", reply))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
return err
|
||||
|
@@ -33,6 +33,7 @@ type Billing struct {
|
||||
} `json:"grants"`
|
||||
}
|
||||
|
||||
// GetBalance 获取账号余额
|
||||
func GetBalance() (Billing, error) {
|
||||
var data Billing
|
||||
var url string = "https://api.openai.com/dashboard/billing/credit_grants"
|
@@ -1,40 +0,0 @@
|
||||
package logger
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
var Logger *log.Logger
|
||||
var once sync.Once
|
||||
|
||||
func init() {
|
||||
once.Do(func() {
|
||||
Logger = log.New(os.Stdout, "INFO", log.Ldate|log.Ltime|log.Lshortfile)
|
||||
})
|
||||
}
|
||||
|
||||
// Info 详情
|
||||
func Info(args ...interface{}) {
|
||||
Logger.SetPrefix("[INFO]")
|
||||
Logger.Println(args...)
|
||||
}
|
||||
|
||||
// Danger 错误 为什么不命名为 error?避免和 error 类型重名
|
||||
func Danger(args ...interface{}) {
|
||||
Logger.SetPrefix("[ERROR]")
|
||||
Logger.Fatal(args...)
|
||||
}
|
||||
|
||||
// Warning 警告
|
||||
func Warning(args ...interface{}) {
|
||||
Logger.SetPrefix("[WARNING]")
|
||||
Logger.Println(args...)
|
||||
}
|
||||
|
||||
// DeBug debug
|
||||
func DeBug(args ...interface{}) {
|
||||
Logger.SetPrefix("[DeBug]")
|
||||
Logger.Println(args...)
|
||||
}
|
@@ -6,7 +6,8 @@ import (
|
||||
|
||||
"github.com/eryajf/chatgpt-dingtalk/config"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/cache"
|
||||
"github.com/eryajf/chatgpt-dingtalk/public/logger"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/logger"
|
||||
)
|
||||
|
||||
var UserService cache.UserServiceInterface
|
||||
@@ -20,7 +21,7 @@ func InitSvc() {
|
||||
_, _ = GetBalance()
|
||||
}
|
||||
|
||||
func FirstCheck(rmsg *ReceiveMsg) bool {
|
||||
func FirstCheck(rmsg *dingbot.ReceiveMsg) bool {
|
||||
lc := UserService.GetUserMode(rmsg.SenderStaffId)
|
||||
if lc == "" {
|
||||
if Config.DefaultMode == "串聊" {
|
||||
@@ -37,7 +38,7 @@ func FirstCheck(rmsg *ReceiveMsg) bool {
|
||||
|
||||
// ProcessRequest 分析处理请求逻辑
|
||||
// 主要提供单日请求限额的功能
|
||||
func CheckRequest(rmsg *ReceiveMsg) bool {
|
||||
func CheckRequest(rmsg *dingbot.ReceiveMsg) bool {
|
||||
if Config.MaxRequest == 0 {
|
||||
return true
|
||||
}
|
||||
@@ -45,7 +46,7 @@ func CheckRequest(rmsg *ReceiveMsg) bool {
|
||||
// 判断访问次数是否超过限制
|
||||
if count >= Config.MaxRequest {
|
||||
logger.Info(fmt.Sprintf("亲爱的: %s,您今日请求次数已达上限,请明天再来,交互发问资源有限,请务必斟酌您的问题,给您带来不便,敬请谅解!", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(TEXT), fmt.Sprintf("一个好的问题,胜过十个好的答案!\n亲爱的: %s,您今日请求次数已达上限,请明天再来,交互发问资源有限,请务必斟酌您的问题,给您带来不便,敬请谅解!", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), fmt.Sprintf("一个好的问题,胜过十个好的答案!\n亲爱的: %s,您今日请求次数已达上限,请明天再来,交互发问资源有限,请务必斟酌您的问题,给您带来不便,敬请谅解!", rmsg.SenderNick))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
|
Reference in New Issue
Block a user