public.go 1.8 KB

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