diff options
| author | 2018-02-12 18:45:40 +0000 | |
|---|---|---|
| committer | 2018-02-12 18:45:40 +0000 | |
| commit | 59693c1f71fe8a71d562e1506ae252fc4a5d1b5c (patch) | |
| tree | 1ef079eb271d3e5620e2b687329370e8fdf6297d | |
| parent | Swap around aliases in info command wrapper (diff) | |
Use a case-insensitive dict for cogs.
| -rw-r--r-- | bot/__main__.py | 4 | ||||
| -rw-r--r-- | bot/utils.py | 47 |
2 files changed, 51 insertions, 0 deletions
diff --git a/bot/__main__.py b/bot/__main__.py index 9f9c82077..6d5c2c063 100644 --- a/bot/__main__.py +++ b/bot/__main__.py @@ -4,6 +4,8 @@ import os from discord import Game from discord.ext.commands import AutoShardedBot, when_mentioned_or +from bot.utils import CaseInsensitiveDict + bot = AutoShardedBot( command_prefix=when_mentioned_or( ">>> self.", ">> self.", "> self.", "self.", @@ -15,6 +17,8 @@ bot = AutoShardedBot( help_attrs={"aliases": ["help()"]} ) +bot.cogs = CaseInsensitiveDict() + # Internal/debug bot.load_extension("bot.cogs.logging") bot.load_extension("bot.cogs.security") diff --git a/bot/utils.py b/bot/utils.py new file mode 100644 index 000000000..eac37a4b4 --- /dev/null +++ b/bot/utils.py @@ -0,0 +1,47 @@ +# coding=utf-8 + + +class CaseInsensitiveDict(dict): + """ + We found this class on StackOverflow. Thanks to m000 for writing it! + + https://stackoverflow.com/a/32888599/4022104 + """ + + @classmethod + def _k(cls, key): + return key.lower() if isinstance(key, str) else key + + def __init__(self, *args, **kwargs): + super(CaseInsensitiveDict, self).__init__(*args, **kwargs) + self._convert_keys() + + def __getitem__(self, key): + return super(CaseInsensitiveDict, self).__getitem__(self.__class__._k(key)) + + def __setitem__(self, key, value): + super(CaseInsensitiveDict, self).__setitem__(self.__class__._k(key), value) + + def __delitem__(self, key): + return super(CaseInsensitiveDict, self).__delitem__(self.__class__._k(key)) + + def __contains__(self, key): + return super(CaseInsensitiveDict, self).__contains__(self.__class__._k(key)) + + def pop(self, key, *args, **kwargs): + return super(CaseInsensitiveDict, self).pop(self.__class__._k(key), *args, **kwargs) + + def get(self, key, *args, **kwargs): + return super(CaseInsensitiveDict, self).get(self.__class__._k(key), *args, **kwargs) + + def setdefault(self, key, *args, **kwargs): + return super(CaseInsensitiveDict, self).setdefault(self.__class__._k(key), *args, **kwargs) + + def update(self, E=None, **F): + super(CaseInsensitiveDict, self).update(self.__class__(E)) + super(CaseInsensitiveDict, self).update(self.__class__(**F)) + + def _convert_keys(self): + for k in list(self.keys()): + v = super(CaseInsensitiveDict, self).pop(k) + self.__setitem__(k, v) |