channel_satisfy.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package model
  2. import (
  3. "github.com/QuantumNous/new-api/common"
  4. "github.com/QuantumNous/new-api/setting/ratio_setting"
  5. )
  6. func IsChannelEnabledForGroupModel(group string, modelName string, channelID int) bool {
  7. if group == "" || modelName == "" || channelID <= 0 {
  8. return false
  9. }
  10. if !common.MemoryCacheEnabled {
  11. return isChannelEnabledForGroupModelDB(group, modelName, channelID)
  12. }
  13. channelSyncLock.RLock()
  14. defer channelSyncLock.RUnlock()
  15. if group2model2channels == nil {
  16. return false
  17. }
  18. if isChannelIDInList(group2model2channels[group][modelName], channelID) {
  19. return true
  20. }
  21. normalized := ratio_setting.FormatMatchingModelName(modelName)
  22. if normalized != "" && normalized != modelName {
  23. return isChannelIDInList(group2model2channels[group][normalized], channelID)
  24. }
  25. return false
  26. }
  27. func IsChannelEnabledForAnyGroupModel(groups []string, modelName string, channelID int) bool {
  28. if len(groups) == 0 {
  29. return false
  30. }
  31. for _, g := range groups {
  32. if IsChannelEnabledForGroupModel(g, modelName, channelID) {
  33. return true
  34. }
  35. }
  36. return false
  37. }
  38. func isChannelEnabledForGroupModelDB(group string, modelName string, channelID int) bool {
  39. var count int64
  40. err := DB.Model(&Ability{}).
  41. Where(commonGroupCol+" = ? and model = ? and channel_id = ? and enabled = ?", group, modelName, channelID, true).
  42. Count(&count).Error
  43. if err == nil && count > 0 {
  44. return true
  45. }
  46. normalized := ratio_setting.FormatMatchingModelName(modelName)
  47. if normalized == "" || normalized == modelName {
  48. return false
  49. }
  50. count = 0
  51. err = DB.Model(&Ability{}).
  52. Where(commonGroupCol+" = ? and model = ? and channel_id = ? and enabled = ?", group, normalized, channelID, true).
  53. Count(&count).Error
  54. return err == nil && count > 0
  55. }
  56. func isChannelIDInList(list []int, channelID int) bool {
  57. for _, id := range list {
  58. if id == channelID {
  59. return true
  60. }
  61. }
  62. return false
  63. }