Refactor bot state management logic

This commit refactors the code handling bot state management to
improve readability and modularity. The new implementation uses a more
structured approach to handling different types of events, making it
easier to reason about and maintain. Additionally, it fixes an issue
where the bot was not properly handling errors when putting state in
rooms.

This change should improve the overall stability and performance of the
RSS bot, as well as make it easier for developers to understand and work
with the codebase.
This commit is contained in:
Kumi 2024-03-02 16:24:47 +01:00
parent ebb9b245a8
commit 8ea8c9208a
Signed by: kumi
GPG key ID: ECBCC9082395383F
2 changed files with 24 additions and 7 deletions

View file

@ -503,8 +503,7 @@ class RSSBot:
room, event_type, content, state_key room, event_type, content, state_key
) )
if isinstance(response, RoomPutStateError): return response
self.logger.log(f"Error putting state in {room}")
async def get_state_event( async def get_state_event(
self, room: MatrixRoom | str, event_type: str, state_key: Optional[str] = None self, room: MatrixRoom | str, event_type: str, state_key: Optional[str] = None

View file

@ -23,9 +23,7 @@ async def command_addfeed(room: MatrixRoom, event: RoomMessageText, bot):
feeds.append(url) feeds.append(url)
try: try:
feed = feedparser.parse(url) feedparser.parse(url)
for entry in feed.entries:
print(entry)
except: except:
await bot.send_state_event( await bot.send_state_event(
f"Could not access or parse feed at {url}. Please ensure that you got the URL right, and that it is actually an RSS/Atom feed.", f"Could not access or parse feed at {url}. Please ensure that you got the URL right, and that it is actually an RSS/Atom feed.",
@ -33,13 +31,33 @@ async def command_addfeed(room: MatrixRoom, event: RoomMessageText, bot):
) )
try: try:
await bot.send_state_event( response1 = await bot.send_state_event(
room, room,
"rssbot.feed_state", "rssbot.feed_state",
{"timestamp": int(datetime.now().timestamp())}, {"timestamp": int(datetime.now().timestamp())},
url, url,
) )
await bot.send_state_event(room, "rssbot.feeds", {"feeds": feeds})
if isinstance(response1, RoomPutStateError):
if response1.status_code == "M_FORBIDDEN":
await bot.send_message(
room,
"Unable to put status events into this room. Please ensure I have the required permissions, then try again.",
)
await bot.send_message(
room, "Unable to write feed state to the room. Please try again.", True
)
return
response2 = await bot.send_state_event(room, "rssbot.feeds", {"feeds": feeds})
if isinstance(response2, RoomPutStateError):
await bot.send_message(
room, "Unable to write feed list to the room. Please try again.", True
)
return
await bot.send_message(room, f"Added {url} to this room's feeds.", True) await bot.send_message(room, f"Added {url} to this room's feeds.", True)
except: except:
await bot.send_message( await bot.send_message(