diff options
| author | 2018-12-20 20:46:18 +0000 | |
|---|---|---|
| committer | 2018-12-20 20:46:18 +0000 | |
| commit | dbee856c4deaf9c73d9ecffe0d074f50ca74c135 (patch) | |
| tree | 61bb585414daf49d29dad874c03c7b30cca51158 /modules/badges.py | |
| parent | Show "day"/"days" alongside day count (diff) | |
| signature | ||
Add !updatebadge to manually set a date on a badge (badges.py)
Diffstat (limited to 'modules/badges.py')
| -rw-r--r-- | modules/badges.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/modules/badges.py b/modules/badges.py index 51268e71..072102a5 100644 --- a/modules/badges.py +++ b/modules/badges.py @@ -1,6 +1,8 @@ -import datetime +import datetime, re from src import ModuleManager, utils +RE_HUMAN_FORMAT = re.compile(r"(\d\d\d\d)-(\d?\d)-(\d?\d)") +HUMAN_FORMAT_HELP = "year-month-day (e.g. 2018-12-29)" DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" class Module(ModuleManager.BaseModule): @@ -87,3 +89,29 @@ class Module(ModuleManager.BaseModule): event["stdout"].write("Reset badge '%s'" % badge) else: event["stderr"].write("You have no '%s' badge" % badge) + + @utils.hook("received.command.updatebadge", min_args=2) + def update_badge(self, event): + badge = " ".join(event["args_split"][:-1]) + badge_lower = badge.lower() + badges = self._get_badges(event["user"]) + + found_badge = None + for badge_name in badges.keys(): + if badge_name.lower() == badge_lower: + found_badge = badge_name + break + + value = event["args_split"][-1] + if value.lower() == "today": + value = self._now() + else: + match = RE_HUMAN_FORMAT.match(value) + if not match: + raise utils.EventError("Invalid date format, please use %s" % + HUMAN_FORMAT_HELP) + value = datetime.datetime( + year=match.group(1), month=match.group(2), day=match.group(3)) + + badges[found_badge] = self._format_datetime(value) + self._set_badges(event["user"], badges) |
