public.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package public
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/eryajf/chatgpt-dingtalk/config"
  6. "github.com/eryajf/chatgpt-dingtalk/pkg/cache"
  7. "github.com/eryajf/chatgpt-dingtalk/public/logger"
  8. )
  9. var UserService cache.UserServiceInterface
  10. var Config *config.Configuration
  11. var Prompt *[]config.Prompt
  12. func InitSvc() {
  13. Config = config.LoadConfig()
  14. Prompt = config.LoadPrompt()
  15. UserService = cache.NewUserService()
  16. _, _ = GetBalance()
  17. }
  18. func FirstCheck(rmsg *ReceiveMsg) bool {
  19. lc := UserService.GetUserMode(rmsg.SenderStaffId)
  20. if lc == "" {
  21. if Config.DefaultMode == "串聊" {
  22. return true
  23. } else {
  24. return false
  25. }
  26. }
  27. if lc != "" && strings.Contains(lc, "串聊") {
  28. return true
  29. }
  30. return false
  31. }
  32. // ProcessRequest 分析处理请求逻辑
  33. // 主要提供单日请求限额的功能
  34. func CheckRequest(rmsg *ReceiveMsg) bool {
  35. if Config.MaxRequest == 0 {
  36. return true
  37. }
  38. count := UserService.GetUseRequestCount(rmsg.SenderStaffId)
  39. // 判断访问次数是否超过限制
  40. if count >= Config.MaxRequest {
  41. logger.Info(fmt.Sprintf("亲爱的: %s,您今日请求次数已达上限,请明天再来,交互发问资源有限,请务必斟酌您的问题,给您带来不便,敬请谅解!", rmsg.SenderNick))
  42. _, err := rmsg.ReplyToDingtalk(string(TEXT), fmt.Sprintf("一个好的问题,胜过十个好的答案!\n亲爱的: %s,您今日请求次数已达上限,请明天再来,交互发问资源有限,请务必斟酌您的问题,给您带来不便,敬请谅解!", rmsg.SenderNick), rmsg.SenderStaffId)
  43. if err != nil {
  44. logger.Warning(fmt.Errorf("send message error: %v", err))
  45. }
  46. return false
  47. }
  48. // 访问次数未超过限制,将计数加1
  49. UserService.SetUseRequestCount(rmsg.SenderStaffId, count+1)
  50. return true
  51. }