diff --git a/rss/bot.py b/rss/bot.py index 04a6850c8711f2cafbdcf8872d5104dffd308fc1..256f3bb7bf1cc1626374885c5ac83d337ab92bea 100644 --- a/rss/bot.py +++ b/rss/bot.py @@ -26,6 +26,7 @@ import feedparser from mautrix.util.config import BaseProxyConfig, ConfigUpdateHelper from mautrix.types import (StateEvent, EventType, MessageType, RoomID, EventID, PowerLevelStateEventContent) +from mautrix.errors.request import MForbidden from maubot import Plugin, MessageEvent from maubot.handlers import command, event @@ -118,12 +119,14 @@ class RSSBot(Plugin): async def _broadcast(self, feed: Feed, entry: Entry, subscriptions: List[Subscription]) -> None: spam_sleep = self.config["spam_sleep"] tasks = [self._send(feed, entry, sub) for sub in subscriptions] - if spam_sleep >= 0: - for task in tasks: + for task in tasks: + try: await task - await asyncio.sleep(spam_sleep, loop=self.loop) - else: - await asyncio.gather(*tasks) + if spam_sleep >= 0: + await asyncio.sleep(spam_sleep, loop=self.loop) + except MForbidden as e: + self.log.warning(f"Failed to broadcast: {e}") + continue async def _poll_once(self) -> None: subs = self.db.get_feeds()