diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/admin.py | 14 | ||||
| -rw-r--r-- | modules/badges.py | 9 | ||||
| -rw-r--r-- | modules/karma.py | 3 | ||||
| -rw-r--r-- | modules/markov.py | 5 | ||||
| -rw-r--r-- | modules/rss.py | 3 | ||||
| -rw-r--r-- | modules/signals.py | 6 | ||||
| -rw-r--r-- | modules/stats.py | 3 | ||||
| -rw-r--r-- | modules/tweets/format.py | 6 | ||||
| -rw-r--r-- | modules/vote.py | 28 |
9 files changed, 44 insertions, 33 deletions
diff --git a/modules/admin.py b/modules/admin.py index 2ca50843..1a732a7c 100644 --- a/modules/admin.py +++ b/modules/admin.py @@ -45,10 +45,13 @@ class Module(ModuleManager.BaseModule): def _id_from_alias(self, alias): return self.bot.database.servers.get_by_alias(alias) def _server_from_alias(self, alias): + id, server = self._both_from_alias(alias) + return server + def _both_from_alias(self, alias): id = self._id_from_alias(alias) if id == None: raise utils.EventError("Unknown server alias") - return self.bot.get_server_by_id(id) + return id, self.bot.get_server_by_id(id) @utils.hook("received.command.reconnect") def reconnect(self, event): @@ -95,10 +98,11 @@ class Module(ModuleManager.BaseModule): :permission: disconnect """ server = event["server"] + id = -1 alias = str(event["server"]) if event["args"]: alias = event["args_split"][0] - server = self._server_from_alias(alias) + id, server = self._both_from_alias(alias) if not server == None: alias = str(server) @@ -168,8 +172,8 @@ class Module(ModuleManager.BaseModule): @utils.kwarg("permission", "editserver") def edit_server(self, event): alias = event["args_split"][0] - server = self.bot.get_server_by_alias(alias) - if server == None: + server_id = self._id_from_alias(alias) + if server_id == None: raise utils.EventError("Unknown server '%s'" % alias) option = event["args_split"][1].lower() @@ -196,5 +200,5 @@ class Module(ModuleManager.BaseModule): else: raise utils.EventError("Unknown option '%s'" % option) - self.bot.database.servers.edit(server.id, option, value_parsed) + self.bot.database.servers.edit(server_id, option, value_parsed) event["stdout"].write("Set %s for %s" % (option, alias)) diff --git a/modules/badges.py b/modules/badges.py index 854e6ff2..7370dab8 100644 --- a/modules/badges.py +++ b/modules/badges.py @@ -9,12 +9,9 @@ DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%SZ" DATE_FORMAT = "%Y-%m-%d" class Module(ModuleManager.BaseModule): - def _now(self): - return datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc) - def _parse_date(self, dt: str): if dt.lower() == "today": - return self._now() + return utils.datetime_utcnow() else: match = RE_HUMAN_FORMAT.match(dt) if not match: @@ -57,7 +54,7 @@ class Module(ModuleManager.BaseModule): badge_lower = badge.lower() badges = self._get_badges(event["user"]) - now = self._round_up_day(self._now()) + now = self._round_up_day(utils.datetime_utcnow()) found_badge = self._find_badge(badges, badge) @@ -79,7 +76,7 @@ class Module(ModuleManager.BaseModule): if event["args"]: user = event["server"].get_user(event["args_split"][0]) - now = self._round_up_day(self._now()) + now = self._round_up_day(utils.datetime_utcnow()) badges = [] for badge, date in self._get_badges(user).items(): days_since = self._days_since(now, utils.iso8601_parse(date)) diff --git a/modules/karma.py b/modules/karma.py index d5b9ae9f..2634f8d6 100644 --- a/modules/karma.py +++ b/modules/karma.py @@ -21,7 +21,8 @@ class Module(ModuleManager.BaseModule): return utils.irc.color(str(karma), utils.consts.RED) elif karma > 0: return utils.irc.color(str(karma), utils.consts.LIGHTGREEN) - return str(karma) + else: + return utils.irc.color(str(karma), utils.consts.YELLOW) @utils.hook("new.user") def new_user(self, event): diff --git a/modules/markov.py b/modules/markov.py index 1508ad99..0075c1a5 100644 --- a/modules/markov.py +++ b/modules/markov.py @@ -46,7 +46,7 @@ class Module(ModuleManager.BaseModule): event["stderr"].write("Failed to load log (%d)" % page.code) def _load_loop(self, channel_id, data): - for line in data.decode("utf8").split("\n"): + for line in data.decode("utf8", errors="ignore").split("\n"): self.bot.trigger(self._create_factory(channel_id, line.strip())) self._load_thread = None def _create_factory(self, channel_id, line): @@ -167,4 +167,7 @@ class Module(ModuleManager.BaseModule): break words.append(third_word) + if words == first_words: + return None + return " ".join(words) diff --git a/modules/rss.py b/modules/rss.py index e8e237da..e18ef18b 100644 --- a/modules/rss.py +++ b/modules/rss.py @@ -18,7 +18,8 @@ class Module(ModuleManager.BaseModule): self.bot.get_setting("rss-interval", RSS_INTERVAL)) def _format_entry(self, server, feed_title, entry, shorten): - title = entry["title"] + title = utils.parse.line_normalise(utils.http.strip_html( + entry["title"])) author = entry.get("author", None) author = " by %s" % author if author else "" diff --git a/modules/signals.py b/modules/signals.py index 336a83d3..286852d6 100644 --- a/modules/signals.py +++ b/modules/signals.py @@ -35,7 +35,11 @@ class Module(ModuleManager.BaseModule): sys.exit() def _make_hook(self, server): - return lambda e: self.bot.disconnect(server) + return lambda e: self._disconnect_hook(server) + def _disconnect_hook(self, server): + self.bot.disconnect(server) + if not self.bot.servers: + sys.exit() def SIGUSR1(self, signum, frame): self.bot.trigger(self._reload_config) diff --git a/modules/stats.py b/modules/stats.py index 3c140855..ee92e7c8 100644 --- a/modules/stats.py +++ b/modules/stats.py @@ -73,8 +73,7 @@ class Module(ModuleManager.BaseModule): "port": server.connection_params.port, "tls": server.connection_params.tls, "alias": server.connection_params.alias, - "hostmask": "%s!%s@%s" % ( - server.nickname, server.username, server.hostname), + "hostmask": server.hostmask(), "users": len(server.users), "bytes-written": server.socket.bytes_written, "bytes-read": server.socket.bytes_read, diff --git a/modules/tweets/format.py b/modules/tweets/format.py index 8b84cba3..4d64dffd 100644 --- a/modules/tweets/format.py +++ b/modules/tweets/format.py @@ -7,11 +7,7 @@ def _timestamp(dt): return "%s %s ago" % (since, unit) def _normalise(tweet): - while " " in tweet: - tweet = tweet.replace(" ", " ") - lines = [line.strip() for line in tweet.split("\n")] - lines = list(filter(None, lines)) - return html.unescape(" ".join(lines)) + return html.unescape(utils.parse.line_normalise(tweet)) def _tweet(exports, server, tweet, from_url): linked_id = tweet.id diff --git a/modules/vote.py b/modules/vote.py index 27216392..30043fe0 100644 --- a/modules/vote.py +++ b/modules/vote.py @@ -10,6 +10,7 @@ STR_NOVOTE = "Unknown vote '%s'" class VoteCastResult(enum.Enum): Cast = 1 Changed = 2 + Unchanged = 3 @utils.export("channelset", utils.BoolSetting("votes-start-restricted", "Whether starting a vote should be restricted to ops")) @@ -46,25 +47,28 @@ class Module(ModuleManager.BaseModule): def _format_options(self, vote): return ", ".join("'%s'" % o for o in vote["options"]) - def _cast_vote(self, channel, vote_id, user, option): + def _cast_vote(self, channel, vote_id, user, chosen_option): vote = self._get_vote(channel, vote_id) - option = vote["options"][option] + option_nicks = vote["options"][chosen_option] cast_type = VoteCastResult.Cast - for nicks in vote["options"].values(): + for option, nicks in vote["options"].items(): if user.name in nicks: - nicks.remove(user.name) - cast_type = VoteCastResult.Changed - break + if option == chosen_option: + return VoteCastResult.Unchanged + else: + nicks.remove(user.name) + cast_type = VoteCastResult.Changed + break - option.append(user.name) + option_nicks.append(user.name) self._set_vote(channel, vote_id, vote) return cast_type def _open_votes(self, channel): open = [] - for setting, vote in channel.find_setting(prefix="vote-"): + for setting, vote in channel.find_settings(prefix="vote-"): if vote["open"]: open.append(vote) return open @@ -132,11 +136,13 @@ class Module(ModuleManager.BaseModule): cast_result = self._cast_vote(event["target"], vote_id, event["user"], choice) - cast_desc = "cast" + cast_desc = "has been cast" if cast_result == VoteCastResult.Changed: - cast_desc = "changed" + cast_desc = "has been changed" + elif cast_result == VoteCastResult.Unchanged: + cast_desc = "is unchanged" - event["stdout"].write("%s: your vote has been %s." % + event["stdout"].write("%s: your vote %s." % (event["user"].nickname, cast_desc)) @utils.hook("received.command.votes", channel_only=True) |
