Skip to content

Commit

Permalink
updated the readme and added example for lua scripting
Browse files Browse the repository at this point in the history
  • Loading branch information
terminaldweller committed Jun 3, 2024
1 parent 16a577b commit 54510fb
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 0 deletions.
87 changes: 87 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,10 @@ webirc password to use.

webirc address to use.

### plugins

A list of plugins to load:`plugins = ["./plugins/rss.lua", "./plugins/test.lua"]`

## Custom Commands

Custom commands let you define a command that does a SQL query to the database and performs the given task. Here's an example:
Expand Down Expand Up @@ -525,6 +529,89 @@ go mod vendor
go build
```

### Plugins and Scripting

milla can be extended with plugins. The plugins are written in lua and are loaded at runtime. The plugins are loaded after an IRC connection has been made.<br/>

An example plugin is provided under `plugins/rss.lua`.<br/>

```yaml
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"
```

```lua
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()
```
More of milla's functionality will be available over time.<br/>'

The following libraries are loaded by milla by default:
* [gluaxmlpath](https://github.com/ailncode/gluaxmlpath)
* [gluahttp](https://github.com/cjoudrey/gluahttp)
* [gluayaml](https://github.com/kohkimakimoto/gluayaml)
* [gluasocket](https://gitlab.com/megalithic-llc/gluasocket)

## FAQ

- I end up with color escape sequences getting printed at the end of a line/begging of the next line. What gives?
Expand Down
3 changes: 3 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ require (
github.com/BurntSushi/toml v0.3.1
github.com/ailncode/gluaxmlpath v0.0.0-20161126153117-6ce478ecb4a6
github.com/alecthomas/chroma/v2 v2.12.0
github.com/cjoudrey/gluahttp v0.0.0-20201111170219-25003d9adfa9
github.com/google/generative-ai-go v0.11.2
github.com/jackc/pgx/v5 v5.5.5
github.com/kohkimakimoto/gluayaml v0.0.0-20160815032708-6fe413d49d73
github.com/lrstanley/girc v0.0.0-20240125042120-9add3166e52e
github.com/sashabaranov/go-openai v1.19.3
github.com/yuin/gopher-lua v1.1.1
Expand Down Expand Up @@ -55,4 +57,5 @@ require (
google.golang.org/grpc v1.63.2 // indirect
google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ github.com/alecthomas/chroma/v2 v2.12.0/go.mod h1:4TQu7gdfuPjSh76j78ietmqh9LiurG
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cjoudrey/gluahttp v0.0.0-20201111170219-25003d9adfa9 h1:rdWOzitWlNYeUsXmz+IQfa9NkGEq3gA/qQ3mOEqBU6o=
github.com/cjoudrey/gluahttp v0.0.0-20201111170219-25003d9adfa9/go.mod h1:X97UjDTXp+7bayQSFZk2hPvCTmTZIicUjZQRtkwgAKY=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
Expand Down Expand Up @@ -86,6 +88,8 @@ github.com/jackc/pgx/v5 v5.5.5 h1:amBjrZVmksIdNjxGW/IiIMzxMKZFelXbUoPNb+8sjQw=
github.com/jackc/pgx/v5 v5.5.5/go.mod h1:ez9gk+OAat140fv9ErkZDYFWmXLfV+++K0uAOiwgm1A=
github.com/jackc/puddle/v2 v2.2.1 h1:RhxXJtFG022u4ibrCSMSiu5aOq1i77R3OHKNJj77OAk=
github.com/jackc/puddle/v2 v2.2.1/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4=
github.com/kohkimakimoto/gluayaml v0.0.0-20160815032708-6fe413d49d73 h1:e2UU76WBjv6W0QUuPHe2QfSAXLR1kouek1fcSUtnSrk=
github.com/kohkimakimoto/gluayaml v0.0.0-20160815032708-6fe413d49d73/go.mod h1:I+YgUp/uc0hF+H4RuQjR+uzDJNjUz7Sm21e63UCLWWQ=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
Expand Down Expand Up @@ -201,6 +205,8 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc h1:LMEBgNcZUqXaP7evD1PZcL6EcDVa2QOFuI+cqM3+AJM=
gopkg.in/xmlpath.v2 v2.0.0-20150820204837-860cbeca3ebc/go.mod h1:N8UOSI6/c2yOpa/XDz3KVUiegocTziPiqNkeNTMiG1k=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Expand Down
5 changes: 5 additions & 0 deletions plugins.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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)

Expand Down
57 changes: 57 additions & 0 deletions plugins/rss.lua
Original file line number Diff line number Diff line change
@@ -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()
7 changes: 7 additions & 0 deletions plugins/rss.yaml
Original file line number Diff line number Diff line change
@@ -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"

0 comments on commit 54510fb

Please sign in to comment.