RSS custom format (#286)
* Update rss.py * add even more customization options
This commit is contained in:
parent
2d39421aeb
commit
cb43a6ae2b
1 changed files with 16 additions and 9 deletions
|
@ -9,11 +9,11 @@ RSS_INTERVAL = 60 # 1 minute
|
||||||
|
|
||||||
SETTING_BIND = utils.Setting("rss-bindhost",
|
SETTING_BIND = utils.Setting("rss-bindhost",
|
||||||
"Which local address to bind to for RSS requests", example="127.0.0.1")
|
"Which local address to bind to for RSS requests", example="127.0.0.1")
|
||||||
|
|
||||||
@utils.export("botset", utils.IntSetting("rss-interval",
|
@utils.export("botset", utils.IntSetting("rss-interval",
|
||||||
"Interval (in seconds) between RSS polls", example="120"))
|
"Interval (in seconds) between RSS polls", example="120"))
|
||||||
@utils.export("channelset", utils.BoolSetting("rss-shorten",
|
@utils.export("channelset", utils.BoolSetting("rss-shorten",
|
||||||
"Whether or not to shorten RSS urls"))
|
"Whether or not to shorten RSS urls"))
|
||||||
|
@utils.export("channelset", utils.Setting("rss-format", "Format of RSS announcements", example="$longtitle: $title - $link [$author]"))
|
||||||
@utils.export("serverset", SETTING_BIND)
|
@utils.export("serverset", SETTING_BIND)
|
||||||
@utils.export("channelset", SETTING_BIND)
|
@utils.export("channelset", SETTING_BIND)
|
||||||
class Module(ModuleManager.BaseModule):
|
class Module(ModuleManager.BaseModule):
|
||||||
|
@ -22,12 +22,12 @@ class Module(ModuleManager.BaseModule):
|
||||||
self.timers.add("rss-feeds", self._timer,
|
self.timers.add("rss-feeds", self._timer,
|
||||||
self.bot.get_setting("rss-interval", RSS_INTERVAL))
|
self.bot.get_setting("rss-interval", RSS_INTERVAL))
|
||||||
|
|
||||||
def _format_entry(self, server, feed_title, entry, shorten):
|
def _format_entry(self, server, channel, feed_title, entry, shorten):
|
||||||
title = utils.parse.line_normalise(utils.http.strip_html(
|
title = utils.parse.line_normalise(utils.http.strip_html(
|
||||||
entry["title"]))
|
entry["title"]))
|
||||||
|
|
||||||
author = entry.get("author", None)
|
author = entry.get("author", "unknown author")
|
||||||
author = " by %s" % author if author else ""
|
author = "%s" % author if author else ""
|
||||||
|
|
||||||
link = entry.get("link", None)
|
link = entry.get("link", None)
|
||||||
if shorten:
|
if shorten:
|
||||||
|
@ -35,11 +35,18 @@ class Module(ModuleManager.BaseModule):
|
||||||
link = self.exports.get("shorturl")(server, link)
|
link = self.exports.get("shorturl")(server, link)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
link = " - %s" % link if link else ""
|
link = "%s" % link if link else ""
|
||||||
|
|
||||||
feed_title_str = "%s: " % feed_title if feed_title else ""
|
feed_title_str = "%s" % feed_title if feed_title else ""
|
||||||
|
# just in case the format starts keyerroring and you're not sure why
|
||||||
|
self.log.trace("RSS Entry: " + str(entry))
|
||||||
|
try:
|
||||||
|
format = channel.get_setting("rss-format", "$longtitle: $title by $author - $link").replace("$longtitle", feed_title_str).replace("$title", title).replace("$link", link).replace("$author", author).format(**entry)
|
||||||
|
except KeyError:
|
||||||
|
self.log.warn(f"Failed to format RSS entry for {channel}. Falling back to default format.")
|
||||||
|
format = f"{feed_title_str}: {title} by {author} - {link}"
|
||||||
|
|
||||||
return "%s%s%s%s" % (feed_title_str, title, author, link)
|
return format
|
||||||
|
|
||||||
def _timer(self, timer):
|
def _timer(self, timer):
|
||||||
start_time = time.monotonic()
|
start_time = time.monotonic()
|
||||||
|
@ -106,7 +113,7 @@ class Module(ModuleManager.BaseModule):
|
||||||
valid += 1
|
valid += 1
|
||||||
|
|
||||||
shorten = channel.get_setting("rss-shorten", False)
|
shorten = channel.get_setting("rss-shorten", False)
|
||||||
output = self._format_entry(server, feed_title, entry,
|
output = self._format_entry(server, channel, feed_title, entry,
|
||||||
shorten)
|
shorten)
|
||||||
|
|
||||||
self.events.on("send.stdout").call(target=channel,
|
self.events.on("send.stdout").call(target=channel,
|
||||||
|
@ -203,7 +210,7 @@ class Module(ModuleManager.BaseModule):
|
||||||
raise utils.EventError("Failed to get RSS entries")
|
raise utils.EventError("Failed to get RSS entries")
|
||||||
|
|
||||||
shorten = event["target"].get_setting("rss-shorten", False)
|
shorten = event["target"].get_setting("rss-shorten", False)
|
||||||
out = self._format_entry(event["server"], title, entries[0],
|
out = self._format_entry(event["server"], event["target"], title, entries[0],
|
||||||
shorten)
|
shorten)
|
||||||
event["stdout"].write(out)
|
event["stdout"].write(out)
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in a new issue