mirror of
https://github.com/eryajf/chatgpt-dingtalk.git
synced 2026-04-22 23:47:15 +08:00
fix: 修复 session_timeout 配置项不生效的bug,优化相关缓存逻辑,同时余额、查对话功能权限优化 (#210)
This commit is contained in:
@@ -3,6 +3,7 @@ package process
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/db"
|
||||
"github.com/eryajf/chatgpt-dingtalk/pkg/dingbot"
|
||||
@@ -15,16 +16,20 @@ import (
|
||||
func ProcessRequest(rmsg *dingbot.ReceiveMsg) error {
|
||||
if CheckRequestTimes(rmsg) {
|
||||
content := strings.TrimSpace(rmsg.Text.Content)
|
||||
timeoutStr := ""
|
||||
if content != public.Config.DefaultMode {
|
||||
timeoutStr = fmt.Sprintf("\n\n>%s 后将恢复默认聊天模式:%s", FormatTimeDuation(public.Config.SessionTimeout), public.Config.DefaultMode)
|
||||
}
|
||||
switch content {
|
||||
case "单聊":
|
||||
public.UserService.SetUserMode(rmsg.GetSenderIdentifier(), content)
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), fmt.Sprintf("**[Concentrate] 现在进入与 %s 的单聊模式**", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), fmt.Sprintf("**[Concentrate] 现在进入与 %s 的单聊模式**%s", rmsg.SenderNick, timeoutStr))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "串聊":
|
||||
public.UserService.SetUserMode(rmsg.GetSenderIdentifier(), content)
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), fmt.Sprintf("**[Concentrate] 现在进入与 %s 的串聊模式**", rmsg.SenderNick))
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), fmt.Sprintf("**[Concentrate] 现在进入与 %s 的串聊模式**%s", rmsg.SenderNick, timeoutStr))
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
@@ -62,25 +67,28 @@ func ProcessRequest(rmsg *dingbot.ReceiveMsg) error {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "余额":
|
||||
cacheMsg := public.UserService.GetUserMode("system_balance")
|
||||
if cacheMsg == "" {
|
||||
rst, err := public.GetBalance()
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("get balance error: %v", err))
|
||||
return err
|
||||
if public.JudgeAdminUsers(rmsg.SenderStaffId) {
|
||||
cacheMsg := public.UserService.GetUserMode("system_balance")
|
||||
if cacheMsg == "" {
|
||||
rst, err := public.GetBalance()
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("get balance error: %v", err))
|
||||
return err
|
||||
}
|
||||
cacheMsg = rst
|
||||
}
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), cacheMsg)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
cacheMsg = rst
|
||||
}
|
||||
// cacheMsg := "官方暂时改写了余额接口,因此暂不提供查询余额功能!2023-04-03"
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.TEXT), cacheMsg)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
case "查对话":
|
||||
msg := "使用如下指令进行查询:\n\n---\n\n**#查对话 username:张三**\n\n---\n\n需要注意格式必须严格与上边一致,否则将会查询失败\n\n只有程序系统管理员有权限查询,即config.yml中的admin_users指定的人员。"
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), msg)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
if public.JudgeAdminUsers(rmsg.SenderStaffId) {
|
||||
msg := "使用如下指令进行查询:\n\n---\n\n**#查对话 username:张三**\n\n---\n\n需要注意格式必须严格与上边一致,否则将会查询失败\n\n只有程序系统管理员有权限查询,即config.yml中的admin_users指定的人员。"
|
||||
_, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), msg)
|
||||
if err != nil {
|
||||
logger.Warning(fmt.Errorf("send message error: %v", err))
|
||||
}
|
||||
}
|
||||
default:
|
||||
if public.FirstCheck(rmsg) {
|
||||
@@ -223,6 +231,19 @@ func Do(mode string, rmsg *dingbot.ReceiveMsg) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
// FormatTimeDuation 格式化时间
|
||||
// 主要提示单聊/群聊切换时多久后恢复默认聊天模式
|
||||
func FormatTimeDuation(duration time.Duration) string {
|
||||
minutes := int64(duration.Minutes())
|
||||
seconds := int64(duration.Seconds()) - minutes*60
|
||||
timeoutStr := ""
|
||||
if seconds == 0 {
|
||||
timeoutStr = fmt.Sprintf("%d分钟", minutes)
|
||||
} else {
|
||||
timeoutStr = fmt.Sprintf("%d分%d秒", minutes, seconds)
|
||||
}
|
||||
return timeoutStr
|
||||
}
|
||||
|
||||
// FormatMarkdown 格式化Markdown
|
||||
// 主要修复ChatGPT返回多行代码块,钉钉会将代码块中的#当作Markdown语法里的标题来处理,这里进行下转义
|
||||
|
||||
Reference in New Issue
Block a user