1package storage 2 3import ( 4 "github.com/automuteus/utils/pkg/game" 5 "os" 6 "sync" 7 8 "github.com/bwmarrin/discordgo" 9 "github.com/denverquane/amongusdiscord/locale" 10) 11 12const DefaultLeaderboardSize = 3 13const DefaultLeaderboardMin = 3 14 15type GuildSettings struct { 16 AdminUserIDs []string `json:"adminIDs"` 17 PermissionRoleIDs []string `json:"permissionRoleIDs"` 18 CommandPrefix string `json:"commandPrefix"` 19 Language string `json:"language"` 20 VoiceRules game.VoiceRules `json:"voiceRules"` 21 MapVersion string `json:"mapVersion"` 22 Delays game.GameDelays `json:"delays"` 23 DeleteGameSummaryMinutes int `json:"deleteGameSummary"` 24 lock sync.RWMutex 25 UnmuteDeadDuringTasks bool `json:"unmuteDeadDuringTasks"` 26 AutoRefresh bool `json:"autoRefresh"` 27 MatchSummaryChannelID string `json:"matchSummaryChannelID"` 28 LeaderboardMention bool `json:"leaderboardMention"` 29 LeaderboardSize int `json:"leaderboardSize"` 30 LeaderboardMin int `json:"leaderboardMin"` 31 MuteSpectator bool `json:"muteSpectator"` 32 DisplayRoomCode string `json:"displayRoomCode"` 33} 34 35func MakeGuildSettings() *GuildSettings { 36 prefix := os.Getenv("AUTOMUTEUS_GLOBAL_PREFIX") 37 if prefix == "" { 38 prefix = ".au" 39 } 40 return &GuildSettings{ 41 CommandPrefix: prefix, 42 Language: locale.DefaultLang, 43 AdminUserIDs: []string{}, 44 PermissionRoleIDs: []string{}, 45 Delays: game.MakeDefaultDelays(), 46 VoiceRules: game.MakeMuteAndDeafenRules(), 47 UnmuteDeadDuringTasks: false, 48 DeleteGameSummaryMinutes: 0, //-1 for never delete the match summary 49 AutoRefresh: false, 50 MapVersion: "simple", 51 MatchSummaryChannelID: "", 52 LeaderboardMention: true, 53 LeaderboardSize: 3, 54 LeaderboardMin: 3, 55 MuteSpectator: false, 56 DisplayRoomCode: "always", 57 lock: sync.RWMutex{}, 58 } 59} 60 61func (gs *GuildSettings) LocalizeMessage(args ...interface{}) string { 62 args = append(args, gs.GetLanguage()) 63 return locale.LocalizeMessage(args...) 64} 65 66func (gs *GuildSettings) HasAdminPerms(user *discordgo.User) bool { 67 if user == nil { 68 return false 69 } 70 71 for _, v := range gs.AdminUserIDs { 72 if v == user.ID { 73 return true 74 } 75 } 76 return false 77} 78 79func (gs *GuildSettings) HasRolePerms(mem *discordgo.Member) bool { 80 for _, role := range mem.Roles { 81 for _, testRole := range gs.PermissionRoleIDs { 82 if testRole == role { 83 return true 84 } 85 } 86 } 87 return false 88} 89 90func (gs *GuildSettings) GetCommandPrefix() string { 91 return gs.CommandPrefix 92} 93 94func (gs *GuildSettings) SetCommandPrefix(p string) { 95 gs.CommandPrefix = p 96} 97 98func (gs *GuildSettings) GetAdminUserIDs() []string { 99 return gs.AdminUserIDs 100} 101 102func (gs *GuildSettings) SetAdminUserIDs(ids []string) { 103 gs.AdminUserIDs = ids 104} 105 106func (gs *GuildSettings) GetPermissionRoleIDs() []string { 107 return gs.PermissionRoleIDs 108} 109 110func (gs *GuildSettings) SetPermissionRoleIDs(ids []string) { 111 gs.PermissionRoleIDs = ids 112} 113 114func (gs *GuildSettings) GetUnmuteDeadDuringTasks() bool { 115 return gs.UnmuteDeadDuringTasks 116} 117 118func (gs *GuildSettings) GetDeleteGameSummaryMinutes() int { 119 return gs.DeleteGameSummaryMinutes 120} 121 122func (gs *GuildSettings) SetDeleteGameSummaryMinutes(num int) { 123 gs.DeleteGameSummaryMinutes = num 124} 125 126func (gs *GuildSettings) SetMatchSummaryChannelID(id string) { 127 gs.MatchSummaryChannelID = id 128} 129 130func (gs *GuildSettings) GetMatchSummaryChannelID() string { 131 return gs.MatchSummaryChannelID 132} 133 134func (gs *GuildSettings) GetAutoRefresh() bool { 135 return gs.AutoRefresh 136} 137 138func (gs *GuildSettings) SetAutoRefresh(n bool) { 139 gs.AutoRefresh = n 140} 141 142func (gs *GuildSettings) GetLeaderboardMention() bool { 143 return gs.LeaderboardMention 144} 145 146func (gs *GuildSettings) SetLeaderboardMention(v bool) { 147 gs.LeaderboardMention = v 148} 149 150func (gs *GuildSettings) GetLeaderboardSize() int { 151 if gs.LeaderboardSize < 1 { 152 return DefaultLeaderboardSize 153 } 154 return gs.LeaderboardSize 155} 156 157func (gs *GuildSettings) SetLeaderboardSize(v int) { 158 gs.LeaderboardSize = v 159} 160 161func (gs *GuildSettings) GetLeaderboardMin() int { 162 if gs.LeaderboardMin < 1 { 163 return DefaultLeaderboardMin 164 } 165 return gs.LeaderboardMin 166} 167 168func (gs *GuildSettings) SetLeaderboardMin(v int) { 169 gs.LeaderboardMin = v 170} 171 172func (gs *GuildSettings) GetMuteSpectator() bool { 173 return gs.MuteSpectator 174} 175 176func (gs *GuildSettings) SetMuteSpectator(behavior bool) { 177 gs.MuteSpectator = behavior 178} 179 180func (gs *GuildSettings) GetMapVersion() string { 181 if gs.MapVersion == "" { 182 return "simple" 183 } 184 return gs.MapVersion 185} 186 187func (gs *GuildSettings) SetMapVersion(n string) { 188 gs.MapVersion = n 189} 190 191func (gs *GuildSettings) SetUnmuteDeadDuringTasks(v bool) { 192 gs.UnmuteDeadDuringTasks = v 193} 194 195func (gs *GuildSettings) GetLanguage() string { 196 return gs.Language 197} 198 199func (gs *GuildSettings) SetLanguage(l string) { 200 gs.Language = l 201} 202 203func (gs *GuildSettings) GetDelay(oldPhase, newPhase game.Phase) int { 204 return gs.Delays.GetDelay(oldPhase, newPhase) 205} 206 207func (gs *GuildSettings) SetDelay(oldPhase, newPhase game.Phase, v int) { 208 gs.Delays.Delays[oldPhase.ToString()][newPhase.ToString()] = v 209} 210 211func (gs *GuildSettings) GetVoiceRule(isMute bool, phase game.Phase, alive string) bool { 212 if isMute { 213 return gs.VoiceRules.MuteRules[phase.ToString()][alive] 214 } 215 return gs.VoiceRules.DeafRules[phase.ToString()][alive] 216} 217 218func (gs *GuildSettings) SetVoiceRule(isMute bool, phase game.Phase, alive string, val bool) { 219 if isMute { 220 gs.VoiceRules.MuteRules[phase.ToString()][alive] = val 221 } 222 gs.VoiceRules.DeafRules[phase.ToString()][alive] = val 223} 224 225func (gs *GuildSettings) GetVoiceState(alive bool, tracked bool, phase game.Phase) (bool, bool) { 226 return gs.VoiceRules.GetVoiceState(alive, tracked, phase) 227} 228 229func (gs *GuildSettings) GetDisplayRoomCode() string { 230 if gs.DisplayRoomCode == "" { 231 return "always" 232 } 233 return gs.DisplayRoomCode 234} 235 236func (gs *GuildSettings) SetDisplayRoomCode(r string) { 237 gs.DisplayRoomCode = r 238} 239