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:
parent
ebb9b245a8
commit
8ea8c9208a
2 changed files with 24 additions and 7 deletions
|
@ -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
|
||||||
|
|
|
@ -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(
|
||||||
|
|
Loading…
Reference in a new issue