add !badge show <name>
This commit is contained in:
parent
d24442587c
commit
74b53f1765
1 changed files with 25 additions and 14 deletions
|
@ -30,18 +30,19 @@ class Module(ModuleManager.BaseModule):
|
||||||
@utils.hook("received.command.badge")
|
@utils.hook("received.command.badge")
|
||||||
@utils.kwarg("help", "List, add and remove badges")
|
@utils.kwarg("help", "List, add and remove badges")
|
||||||
@utils.spec("!'list ?<nickname>ouser")
|
@utils.spec("!'list ?<nickname>ouser")
|
||||||
|
@utils.spec("!'show !<name>string")
|
||||||
@utils.spec("!'add !<name>marginstring !'now,today")
|
@utils.spec("!'add !<name>marginstring !'now,today")
|
||||||
@utils.spec("!'add !<name>marginstring !date")
|
@utils.spec("!'add !<name>marginstring !date")
|
||||||
@utils.spec("!'remove !<name>string")
|
@utils.spec("!'remove !<name>string")
|
||||||
def badge(self, event):
|
def badge(self, event):
|
||||||
|
now = self._round_up_day(utils.datetime.utcnow())
|
||||||
|
|
||||||
if event["spec"][0] == "list":
|
if event["spec"][0] == "list":
|
||||||
target = event["spec"][1] or event["user"]
|
target = event["spec"][1] or event["user"]
|
||||||
badges = self._get_badges(target)
|
badges = self._get_badges(target)
|
||||||
if not badges:
|
if not badges:
|
||||||
raise utils.EventError("%s has no badges" % target.nickname)
|
raise utils.EventError("%s has no badges" % target.nickname)
|
||||||
|
|
||||||
now = self._round_up_day(utils.datetime.utcnow())
|
|
||||||
|
|
||||||
outs = []
|
outs = []
|
||||||
for name in sorted(badges.keys()):
|
for name in sorted(badges.keys()):
|
||||||
dt = utils.datetime.parse.iso8601(badges[name])
|
dt = utils.datetime.parse.iso8601(badges[name])
|
||||||
|
@ -51,33 +52,43 @@ class Module(ModuleManager.BaseModule):
|
||||||
% (name, days_since, human))
|
% (name, days_since, human))
|
||||||
event["stdout"].write("badges for %s: %s"
|
event["stdout"].write("badges for %s: %s"
|
||||||
% (target.nickname, ", ".join(outs)))
|
% (target.nickname, ", ".join(outs)))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
badges = self._get_badges(event["user"])
|
badges = self._get_badges(event["user"])
|
||||||
|
mut_badges = badges.copy()
|
||||||
|
name = event["spec"][1]
|
||||||
|
|
||||||
if event["spec"][0] == "add":
|
if event["spec"][0] == "add":
|
||||||
if event["spec"][2] in ["now", "today"]:
|
if event["spec"][2] in ["now", "today"]:
|
||||||
dt = utils.datetime.utcnow()
|
dt = utils.datetime.utcnow()
|
||||||
else:
|
else:
|
||||||
dt = event["spec"][2]
|
dt = event["spec"][2]
|
||||||
|
|
||||||
exists = event["spec"][1] in badges
|
exists = name in badges
|
||||||
action = "updated" if exists else "added"
|
action = "updated" if exists else "added"
|
||||||
|
|
||||||
badges[event["spec"][1]] = utils.datetime.format.iso8601(dt)
|
mut_badges[name] = utils.datetime.format.iso8601(dt)
|
||||||
human = utils.datetime.format.date_human(dt)
|
human = utils.datetime.format.date_human(dt)
|
||||||
event["stdout"].write("%s: %s badge %s (%s)"
|
event["stdout"].write("%s: %s badge %s (%s)"
|
||||||
% (event["user"].nickname, action, event["spec"][1], human))
|
% (event["user"].nickname, action, name, human))
|
||||||
|
|
||||||
elif event["spec"][0] == "remove":
|
else:
|
||||||
if not event["spec"][1] in badges:
|
if not name in badges:
|
||||||
raise utils.EventError("%s: you don't have a '%s' badge"
|
raise utils.EventError("%s: you don't have a '%s' badge"
|
||||||
% (event["user"].nickname, event["spec"][1]))
|
% (event["user"].nickname, name))
|
||||||
|
|
||||||
human = utils.datetime.format.date_human(
|
dt = utils.datetime.parse.iso8601(badges[name])
|
||||||
utils.datetime.parse.iso8601(badges.pop(event["spec"][1])))
|
human = utils.datetime.format.date_human(dt)
|
||||||
event["stdout"].write("%s: removed badge '%s' (%s)"
|
if event["spec"][0] == "remove":
|
||||||
% (event["user"].nickname, event["spec"][1], human))
|
del mut_badges[name]
|
||||||
self._set_badges(event["user"], badges)
|
event["stdout"].write("%s: removed badge '%s' (%s)"
|
||||||
|
% (event["user"].nickname, name, human))
|
||||||
|
elif event["spec"][0] == "show":
|
||||||
|
days_since = self._days_since(now, dt)
|
||||||
|
event["stdout"].write("%s: your %s badge is on day %d (%s)"
|
||||||
|
% (event["user"].nickname, name, days_since, human))
|
||||||
|
|
||||||
|
if not mut_badges == badges:
|
||||||
|
self._set_badges(event["user"], mut_badges)
|
||||||
|
|
||||||
@utils.hook("received.command.badgeclear")
|
@utils.hook("received.command.badgeclear")
|
||||||
@utils.kwarg("help", "Clear a user's badges")
|
@utils.kwarg("help", "Clear a user's badges")
|
||||||
|
|
Loading…
Reference in a new issue