diff --git a/src/extensions/tasks.py b/src/extensions/tasks.py index 9f5160a..19ad9d0 100644 --- a/src/extensions/tasks.py +++ b/src/extensions/tasks.py @@ -8,13 +8,15 @@ import datetime from os import getenv from time import process_time +import aiohttp from discord import TextChannel +from discord import app_commands from discord.ext import commands, tasks from discord.errors import Forbidden from sqlalchemy import insert, select, and_ from feedparser import parse -from feed import Source, Article +from feed import Source, Article, RSSFeed from db import ( DatabaseManager, FeedChannelModel, @@ -22,11 +24,13 @@ from db import ( SentArticleModel ) from utils import get_unparsed_feed +from api import API log = logging.getLogger(__name__) TASK_INTERVAL_MINUTES = getenv("TASK_INTERVAL_MINUTES") +# task trigger times : must be of type list times = [ datetime.time(hour, minute, tzinfo=datetime.timezone.utc) for hour in range(24) @@ -61,20 +65,37 @@ class TaskCog(commands.Cog): self.rss_task.cancel() - @tasks.loop(minutes=10) + @app_commands.command(name="debug-trigger-task") + async def debug_trigger_task(self, inter): + await inter.response.defer() + await self.rss_task() + await inter.followup.send("done") + + @tasks.loop(time=times) async def rss_task(self): """Automated task responsible for processing rss feeds.""" log.info("Running rss task") time = process_time() - async with DatabaseManager() as database: - query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel) - result = await database.session.execute(query) - feeds = result.scalars().all() + # async with DatabaseManager() as database: + # query = select(FeedChannelModel, RssSourceModel).join(RssSourceModel) + # result = await database.session.execute(query) + # feeds = result.scalars().all() + + # for feed in feeds: + # await self.process_feed(feed, database) + + guild_ids = [guild.id for guild in self.bot.guilds] + + async with aiohttp.ClientSession() as session: + api = API(self.bot.api_token, session) + data, count = await api.get_rssfeed_list(discord_server_id__in=guild_ids) + rssfeeds = RSSFeed.from_list(data) + for item in rssfeeds: + log.info(item.name) + - for feed in feeds: - await self.process_feed(feed, database) log.info("Finished rss task, time elapsed: %s", process_time() - time) @@ -95,7 +116,7 @@ class TaskCog(commands.Cog): # TODO: integrate the `validate_feed` code into here, also do on list command and show errors. - unparsed_content = await self.bot.functions.get_unparsed_feed(feed.rss_source.rss_url) + unparsed_content = await get_unparsed_feed(feed.rss_source.rss_url) parsed_feed = parse(unparsed_content) source = Source.from_parsed(parsed_feed) articles = source.get_latest_articles(5)