aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--plugins.go5
-rw-r--r--plugins/rss.lua57
-rw-r--r--plugins/rss.yaml7
3 files changed, 69 insertions, 0 deletions
diff --git a/plugins.go b/plugins.go
index 69b3622..45c2847 100644
--- a/plugins.go
+++ b/plugins.go
@@ -2,9 +2,12 @@ package main
import (
"log"
+ "net/http"
"reflect"
"github.com/ailncode/gluaxmlpath"
+ "github.com/cjoudrey/gluahttp"
+ "github.com/kohkimakimoto/gluayaml"
"github.com/lrstanley/girc"
lua "github.com/yuin/gopher-lua"
"gitlab.com/megalithic-llc/gluasocket"
@@ -235,6 +238,8 @@ func RunScript(scriptPath string, client *girc.Client) {
luaState.PreloadModule("milla", millaModuleLoaderClosure(luaState, client))
gluasocket.Preload(luaState)
gluaxmlpath.Preload(luaState)
+ luaState.PreloadModule("http", gluahttp.NewHttpModule(&http.Client{}).Loader)
+ luaState.PreloadModule("yaml", gluayaml.Loader)
log.Print("Running script: ", scriptPath)
diff --git a/plugins/rss.lua b/plugins/rss.lua
new file mode 100644
index 0000000..b78329f
--- /dev/null
+++ b/plugins/rss.lua
@@ -0,0 +1,57 @@
+local milla = require("milla")
+local yaml = require("yaml")
+local http = require("http")
+local xmlpath = require("xmlpath")
+
+local function read_file(file)
+ local f = assert(io.open(file, "rb"))
+ local content = f:read("*all")
+ f:close()
+ return content
+end
+
+local function get_rss_feed()
+ local yaml_config = read_file("./plugins/rss.yaml")
+ local config = yaml.parse(yaml_config)
+ local titles = {}
+ local author_names = {}
+ local uris = {}
+ local rss_feed_list = {}
+
+ for _, v in pairs(config.rssfeeds) do
+ local response, err = http.request("GET", v.url)
+ local node, err = xmlpath.loadxml(response.body)
+
+ local path, err = xmlpath.compile("//entry/title")
+ local iterator = path:iter(node)
+ for _, match in ipairs(iterator) do
+ table.insert(titles, match:string())
+ end
+
+ path, err = xmlpath.compile("//entry/author/name")
+ iterator = path:iter(node)
+ for _, match in ipairs(iterator) do
+ table.insert(author_names, match:string())
+ end
+
+ path, err = xmlpath.compile("//entry/author/uri")
+ iterator = path:iter(node)
+ for _, match in ipairs(iterator) do
+ table.insert(uris, match:string())
+ end
+ end
+
+ for i = 1, #titles do
+ table.insert(rss_feed_list,
+ author_names[i] .. ": " .. titles[i] .. " -- " .. uris[i])
+ end
+
+ return rss_feed_list
+end
+
+local function rss_feed()
+ local rss_feeds = get_rss_feed()
+ for _, v in pairs(rss_feeds) do milla.send_message(v, "#rssfeed") end
+end
+
+rss_feed()
diff --git a/plugins/rss.yaml b/plugins/rss.yaml
new file mode 100644
index 0000000..aee5bcf
--- /dev/null
+++ b/plugins/rss.yaml
@@ -0,0 +1,7 @@
+rssfeeds:
+ - name: "one"
+ url: "https://www.youtube.com/feeds/videos.xml?channel_id=UCaiL2GDNpLYH6Wokkk1VNcg"
+ - name: "two"
+ url: "https://www.youtube.com/feeds/videos.xml?channel_id=UCd26IHBHcbtxD7pUdnIgiCw"
+ - name: "three"
+ url: "https://www.youtube.com/feeds/videos.xml?channel_id=UCS4FAVeYW_IaZqAbqhlvxlA"