|
14 | 14 | from core._color_data import ALL_COLORS
|
15 | 15 | from core.models import DMDisabled, InvalidConfigError, Default, getLogger
|
16 | 16 | from core.time import UserFriendlyTimeSync
|
17 |
| -from core.utils import strtobool |
| 17 | +from core.utils import strtobool, tryint |
18 | 18 |
|
19 | 19 | logger = getLogger(__name__)
|
20 | 20 | load_dotenv()
|
@@ -175,6 +175,11 @@ class ConfigManager:
|
175 | 175 | "activity_type": discord.ActivityType,
|
176 | 176 | }
|
177 | 177 |
|
| 178 | + force_str = { |
| 179 | + "command_permissions", |
| 180 | + "level_permissions" |
| 181 | + } |
| 182 | + |
178 | 183 | defaults = {**public_keys, **private_keys, **protected_keys}
|
179 | 184 | all_keys = set(defaults.keys())
|
180 | 185 |
|
@@ -245,18 +250,19 @@ def __setitem__(self, key: str, item: typing.Any) -> None:
|
245 | 250 | self._cache[key] = item
|
246 | 251 |
|
247 | 252 | def __getitem__(self, key: str) -> typing.Any:
|
248 |
| - key = key.lower() |
249 |
| - if key not in self.all_keys: |
250 |
| - raise InvalidConfigError(f'Configuration "{key}" is invalid.') |
251 |
| - if key not in self._cache: |
252 |
| - self._cache[key] = deepcopy(self.defaults[key]) |
253 |
| - return self._cache[key] |
| 253 | + # make use of the custom methods in func:get: |
| 254 | + return self.get(key) |
254 | 255 |
|
255 | 256 | def __delitem__(self, key: str) -> None:
|
256 | 257 | return self.remove(key)
|
257 | 258 |
|
258 | 259 | def get(self, key: str, convert=True) -> typing.Any:
|
259 |
| - value = self.__getitem__(key) |
| 260 | + key = key.lower() |
| 261 | + if key not in self.all_keys: |
| 262 | + raise InvalidConfigError(f'Configuration "{key}" is invalid.') |
| 263 | + if key not in self._cache: |
| 264 | + self._cache[key] = deepcopy(self.defaults[key]) |
| 265 | + value = self._cache[key] |
260 | 266 |
|
261 | 267 | if not convert:
|
262 | 268 | return value
|
@@ -295,6 +301,29 @@ def get(self, key: str, convert=True) -> typing.Any:
|
295 | 301 | logger.warning("Invalid %s %s.", key, value)
|
296 | 302 | value = self.remove(key)
|
297 | 303 |
|
| 304 | + elif key in self.force_str: |
| 305 | + # Temporary: as we saved in int previously, leading to int32 overflow, |
| 306 | + # this is transitioning IDs to strings |
| 307 | + new_value = {} |
| 308 | + changed = False |
| 309 | + for k, v in value.items(): |
| 310 | + new_v = v |
| 311 | + if isinstance(v, list): |
| 312 | + new_v = [] |
| 313 | + for n in v: |
| 314 | + print('x', n, v) |
| 315 | + if n != -1 and not isinstance(n, str): |
| 316 | + changed = True |
| 317 | + n = str(n) |
| 318 | + new_v.append(n) |
| 319 | + new_value[k] = new_v |
| 320 | + |
| 321 | + if changed: |
| 322 | + # transition the database as well |
| 323 | + self.set(key, new_value) |
| 324 | + |
| 325 | + value = new_value |
| 326 | + |
298 | 327 | return value
|
299 | 328 |
|
300 | 329 | def set(self, key: str, item: typing.Any, convert=True) -> None:
|
|
0 commit comments