| @@ -58,30 +58,43 @@ class LTAMonitor(Command): | |||||
| if len(self._recent) > self._recent_max: | if len(self._recent) > self._recent_max: | ||||
| self._recent.pop(0) | self._recent.pop(0) | ||||
| block = self._get_block_for_ip(ip) | |||||
| if not block: | |||||
| return | |||||
| msg = ("\x02[{note}]\x0F Joined user \x02{nick}\x0F is {type}blocked " | |||||
| "on-wiki ([[User:{user}]]) because: {reason}") | |||||
| self.say(self._report_chan, msg.format(nick=data.nick, **block)) | |||||
| log = ("Reporting block ({note}): {nick} is [[User:{user}]], " | |||||
| "{type}blocked because: {reason}") | |||||
| self.logger.info(log.format(nick=data.nick, **block)) | |||||
| def _get_block_for_ip(self, ip): | |||||
| """Return a dictionary of blockinfo for an IP.""" | |||||
| site = self.bot.wiki.get_site() | site = self.bot.wiki.get_site() | ||||
| try: | try: | ||||
| result = site.api_query(action="query", list="blocks", bkip=ip, | |||||
| bklimit=1, bkprop="user|reason|range") | |||||
| result = site.api_query( | |||||
| action="query", list="blocks|globalblocks", bkip=ip, bgip=ip, | |||||
| bklimit=1, bglimit=1, bkprop="user|reason|range", | |||||
| bgprop="address|reason|range") | |||||
| except APIError: | except APIError: | ||||
| return | return | ||||
| blocks = result["query"]["blocks"] | |||||
| if not blocks: | |||||
| lblocks = result["query"]["blocks"] | |||||
| gblocks = result["query"]["globalblocks"] | |||||
| if not lblocks and not gblocks: | |||||
| return | return | ||||
| block = blocks[0] | |||||
| if re.search(r"web[ _-]?host", block["reason"], re.IGNORECASE): | |||||
| block["note"] = "webhost warning" | |||||
| else: | |||||
| block["note"] = "alert" | |||||
| block = lblocks[0] if lblocks else gblocks[0] | |||||
| if block["rangestart"] != block["rangeend"]: | if block["rangestart"] != block["rangeend"]: | ||||
| block["type"] = "range" | block["type"] = "range" | ||||
| else: | else: | ||||
| block["type"] = "IP-" | block["type"] = "IP-" | ||||
| if not lblocks: | |||||
| block["type"] = "globally " + block["type"] | |||||
| msg = ("\x02[{note}]\x0F Joined user \x02{nick}\x0F is {type}blocked " | |||||
| "on-wiki ([[User:{user}]]) because: {reason}") | |||||
| self.say(self._report_chan, msg.format(nick=data.nick, **block)) | |||||
| log = ("Reporting block ({note}): {nick} is [[User:{user}]], " | |||||
| "{type}blocked because: {reason}") | |||||
| self.logger.info(log.format(nick=data.nick, **block)) | |||||
| if re.search(r"web[ _-]?host", block["reason"], re.IGNORECASE): | |||||
| block["note"] = "webhost warning" | |||||
| else: | |||||
| block["note"] = "alert" | |||||
| return block | |||||