From 49c36c9688b6f3d1a5e7a754b887e951d2cd97a9 Mon Sep 17 00:00:00 2001 From: Frisk Date: Thu, 21 Jan 2021 14:40:55 +0100 Subject: [PATCH] Some sort of progress --- src/bot.py | 16 ++++++++++++---- src/irc_feed.py | 10 ++++------ src/wiki.py | 1 + 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/bot.py b/src/bot.py index b39aa76..1b9bee2 100644 --- a/src/bot.py +++ b/src/bot.py @@ -4,6 +4,7 @@ import logging.config import signal import traceback import nest_asyncio +import time from collections import defaultdict, namedtuple from typing import Generator @@ -65,12 +66,14 @@ class RcQueue: async def start_group(self, group, initial_wikis): """Starts a task for given domain group""" if group not in self.domain_list: - if group in settings["irc_servers"]: - irc_connection = AioIRCCat(settings["irc_servers"]["group"]["irc_channel_mapping"], all_wikis) - irc_connection.connect(settings["irc_servers"][group]["irc_host"], settings["irc_servers"][group]["irc_port"], "RcGcDb") + for irc_server in settings["irc_servers"].keys(): + if group in settings["irc_servers"]["irc_server"]["domains"]: + irc_connection = AioIRCCat(settings["irc_servers"]["group"]["irc_channel_mapping"], all_wikis) + irc_connection.connect(settings["irc_servers"][irc_server]["irc_host"], settings["irc_servers"][irc_server]["irc_port"], settings["irc_servers"][irc_server]["irc_name"]) + break else: irc_connection = None - self.domain_list[group] = {"task": asyncio.create_task(scan_group(group)), "last_rowid": 0, "query": LimitedList(initial_wikis), "rate_limiter": RateLimiter()} + self.domain_list[group] = {"task": asyncio.create_task(scan_group(group)), "last_rowid": 0, "query": LimitedList(initial_wikis), "rate_limiter": RateLimiter(), "irc": irc_connection} logger.debug(self.domain_list[group]) else: raise KeyError @@ -149,6 +152,11 @@ class RcQueue: continue try: current_domain: dict = self[domain] + if current_domain["irc"]: + if db_wiki["wiki"] not in current_domain["irc"].updated and all_wikis[db_wiki["wiki"]].last_updated+settings["irc_overtime"] > time.time(): + continue # if domain has IRC, has not been updated, and it was updated less than an hour ago + else: # otherwise remove it from the list + current_domain["irc"].updated.remove(db_wiki["wiki"]) if not db_wiki["ROWID"] < current_domain["last_rowid"]: current_domain["query"].append(QueuedWiki(db_wiki["wiki"], 20)) except KeyError: diff --git a/src/irc_feed.py b/src/irc_feed.py index 2d8654b..20cff7f 100644 --- a/src/irc_feed.py +++ b/src/irc_feed.py @@ -13,18 +13,16 @@ class AioIRCCat(irc.client_aio.AioSimpleIRCClient): connection.join(channel) def on_pubmsg(self, channel, event): - + if channel == self.targets["rc"]: + self.parse_fandom_message(' '.join(event.arguments)) + elif channel == self.targets["discussion"]: + self.parse_fandom_discussion(' '.join(event.arguments)) def on_nicknameinuse(self, c, e): c.nick(c.get_nickname() + "_") async def parse_fandom_message(self, message): - raw_msg = message message = message.split("\x035*\x03") - try: - user = message[1][4:].strip().strip(chr(3)) - except IndexError: - return # print(asyncio.all_tasks()) half = message[0].find("\x0302http") if half == -1: diff --git a/src/wiki.py b/src/wiki.py index 148a7a1..7cdde43 100644 --- a/src/wiki.py +++ b/src/wiki.py @@ -24,6 +24,7 @@ class Wiki: fail_times: int = 0 # corresponding to amount of times connection with wiki failed for client reasons (400-499) session: aiohttp.ClientSession = None rc_active: int = 0 + last_check: float = 0.0 @staticmethod async def fetch_wiki(extended, script_path, session: aiohttp.ClientSession, ratelimiter: RateLimiter, amount=20) -> aiohttp.ClientResponse: