@@ -3,6 +3,7 @@ package process
3
3
import (
4
4
"fmt"
5
5
"strings"
6
+ "time"
6
7
7
8
"github.com/eryajf/chatgpt-dingtalk/pkg/db"
8
9
"github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
@@ -15,16 +16,20 @@ import (
15
16
func ProcessRequest (rmsg * dingbot.ReceiveMsg ) error {
16
17
if CheckRequestTimes (rmsg ) {
17
18
content := strings .TrimSpace (rmsg .Text .Content )
19
+ timeoutStr := ""
20
+ if content != public .Config .DefaultMode {
21
+ timeoutStr = fmt .Sprintf ("\n \n >%s 后将恢复默认聊天模式:%s" , FormatTimeDuation (public .Config .SessionTimeout ), public .Config .DefaultMode )
22
+ }
18
23
switch content {
19
24
case "单聊" :
20
25
public .UserService .SetUserMode (rmsg .GetSenderIdentifier (), content )
21
- _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), fmt .Sprintf ("**[Concentrate] 现在进入与 %s 的单聊模式**" , rmsg .SenderNick ))
26
+ _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), fmt .Sprintf ("**[Concentrate] 现在进入与 %s 的单聊模式**%s " , rmsg .SenderNick , timeoutStr ))
22
27
if err != nil {
23
28
logger .Warning (fmt .Errorf ("send message error: %v" , err ))
24
29
}
25
30
case "串聊" :
26
31
public .UserService .SetUserMode (rmsg .GetSenderIdentifier (), content )
27
- _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), fmt .Sprintf ("**[Concentrate] 现在进入与 %s 的串聊模式**" , rmsg .SenderNick ))
32
+ _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), fmt .Sprintf ("**[Concentrate] 现在进入与 %s 的串聊模式**%s " , rmsg .SenderNick , timeoutStr ))
28
33
if err != nil {
29
34
logger .Warning (fmt .Errorf ("send message error: %v" , err ))
30
35
}
@@ -62,25 +67,28 @@ func ProcessRequest(rmsg *dingbot.ReceiveMsg) error {
62
67
logger .Warning (fmt .Errorf ("send message error: %v" , err ))
63
68
}
64
69
case "余额" :
65
- cacheMsg := public .UserService .GetUserMode ("system_balance" )
66
- if cacheMsg == "" {
67
- rst , err := public .GetBalance ()
70
+ if public .JudgeAdminUsers (rmsg .SenderStaffId ) {
71
+ cacheMsg := public .UserService .GetUserMode ("system_balance" )
72
+ if cacheMsg == "" {
73
+ rst , err := public .GetBalance ()
74
+ if err != nil {
75
+ logger .Warning (fmt .Errorf ("get balance error: %v" , err ))
76
+ return err
77
+ }
78
+ cacheMsg = rst
79
+ }
80
+ _ , err := rmsg .ReplyToDingtalk (string (dingbot .TEXT ), cacheMsg )
68
81
if err != nil {
69
- logger .Warning (fmt .Errorf ("get balance error: %v" , err ))
70
- return err
82
+ logger .Warning (fmt .Errorf ("send message error: %v" , err ))
71
83
}
72
- cacheMsg = rst
73
- }
74
- // cacheMsg := "官方暂时改写了余额接口,因此暂不提供查询余额功能!2023-04-03"
75
- _ , err := rmsg .ReplyToDingtalk (string (dingbot .TEXT ), cacheMsg )
76
- if err != nil {
77
- logger .Warning (fmt .Errorf ("send message error: %v" , err ))
78
84
}
79
85
case "查对话" :
80
- msg := "使用如下指令进行查询:\n \n ---\n \n **#查对话 username:张三**\n \n ---\n \n 需要注意格式必须严格与上边一致,否则将会查询失败\n \n 只有程序系统管理员有权限查询,即config.yml中的admin_users指定的人员。"
81
- _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), msg )
82
- if err != nil {
83
- logger .Warning (fmt .Errorf ("send message error: %v" , err ))
86
+ if public .JudgeAdminUsers (rmsg .SenderStaffId ) {
87
+ msg := "使用如下指令进行查询:\n \n ---\n \n **#查对话 username:张三**\n \n ---\n \n 需要注意格式必须严格与上边一致,否则将会查询失败\n \n 只有程序系统管理员有权限查询,即config.yml中的admin_users指定的人员。"
88
+ _ , err := rmsg .ReplyToDingtalk (string (dingbot .MARKDOWN ), msg )
89
+ if err != nil {
90
+ logger .Warning (fmt .Errorf ("send message error: %v" , err ))
91
+ }
84
92
}
85
93
default :
86
94
if public .FirstCheck (rmsg ) {
@@ -223,6 +231,19 @@ func Do(mode string, rmsg *dingbot.ReceiveMsg) error {
223
231
}
224
232
return nil
225
233
}
234
+ // FormatTimeDuation 格式化时间
235
+ // 主要提示单聊/群聊切换时多久后恢复默认聊天模式
236
+ func FormatTimeDuation (duration time.Duration ) string {
237
+ minutes := int64 (duration .Minutes ())
238
+ seconds := int64 (duration .Seconds ()) - minutes * 60
239
+ timeoutStr := ""
240
+ if seconds == 0 {
241
+ timeoutStr = fmt .Sprintf ("%d分钟" , minutes )
242
+ } else {
243
+ timeoutStr = fmt .Sprintf ("%d分%d秒" , minutes , seconds )
244
+ }
245
+ return timeoutStr
246
+ }
226
247
227
248
// FormatMarkdown 格式化Markdown
228
249
// 主要修复ChatGPT返回多行代码块,钉钉会将代码块中的#当作Markdown语法里的标题来处理,这里进行下转义
0 commit comments