Sun, 20 May 2018 01:57:58 +0200
riddim.plugins.pubsub2room: Return early from extractor if no stanza given
137
d16c9dba9337
riddim.plugins.factoids: Import and use util.stanza instead of relying on now non-existant verse global
Kim Alvefur <zash@zash.se>
parents:
121
diff
changeset
|
1 | local st = require "util.stanza"; |
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 | local storage_backends = {}; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 | function riddim.plugins.factoids(bot) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 | local factoids = {}; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 | local conf_backend = bot.config.factoid_backend; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 | local backend; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 | -- if backend == nil then forget everything on restart |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
10 | if conf_backend and storage_backends[conf_backend] then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
11 | backend = storage_backends[conf_backend](bot, factoids); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
14 | bot:hook("unhandled-command", function(cmd) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 | local name, param = cmd.command, cmd.param; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 | local factoid = factoids[name]; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 | if factoid then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 | return factoid; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 | elseif param and #param > 4 and param:match("^is ") then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
20 | factoids[name] = param:sub(4); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
21 | return "I'll remember that."; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 | end); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
24 | bot:hook("commands/forget", function(cmd) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 | local name = cmd.param; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 | local factoid = factoids[name]; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 | if factoid then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 | factoids[name] = nil; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
29 | if backend and backend.del then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 | backend.del(name); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
32 | return ("Okay, I'll forget that %s is %s"):format(name, factoid); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
33 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
34 | end); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
35 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 | -- A simple file backend |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
38 | function storage_backends.file(bot, factoids) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
39 | local factoids_file = bot.config.factoids_file or "./factoids.txt"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
40 | local function format_line(k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
41 | return ("%s=%s\n"):format(k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
45 | local fd = io.open(factoids_file, "r"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
47 | for line in fd:lines() do |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
48 | local k, v = line:match("^(.+)=(.*)$"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
49 | if k and v then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 | factoids[k] = v; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
51 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
52 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
54 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
55 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
57 | local fd = io.open(factoids_file, "w"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
59 | for k,v in pairs(factoids) do |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
60 | fd:write(format_line(k, v)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 | add = function(k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 | local fd = io.open(factoids_file, "a"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 | fd:write(format_line(k, v)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 | }; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 | function actions.del(...) actions.save(); end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 | __newindex = function(t, k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 | v = v:gsub("\n"," "); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 | -- A variant of the above except serializing lua code |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 | function storage_backends.lua(bot, factoids) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 | local factoids_file = bot.config.factoids_file or "./factoids.dat"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
86 | local function format_line(k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
87 | return ("_G[%q] = %q;\n"):format(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 | local chunk, err = loadfile(factoids_file); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 | if chunk then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 | setfenv(chunk, {_G = factoids} ); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 | chunk(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 | else |
121
d68a4ae37f4a
plugins.factoids: Remove debug output
Kim Alvefur <zash@zash.se>
parents:
90
diff
changeset
|
96 | bot.stream:err(tostring(err)); |
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 | local fd, err = io.open(factoids_file, "w"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
101 | if err then print(err) end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
103 | for k,v in pairs(factoids) do |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
104 | fd:write(format_line(k, v)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
108 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 | add = function(k,v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
110 | local fd, err = io.open(factoids_file, "a"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
111 | if err then print(err) end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 | fd:write(format_line(k, v)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
116 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 | del = function(k) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 | local fd, err = io.open(factoids_file, "a"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
119 | if err then print(err) end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
121 | fd:write(("_G[%q] = nil;\n"):format(k)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
123 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
124 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
128 | __newindex = function(t, k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 | -- Yet another variant, using util.serialization |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 | function storage_backends.serialize(bot, factoids) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 | local serialize = require "util.serialization".serialize; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 | local deserialize = require "util.serialization".deserialize; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 | local factoids_file = bot.config.factoids_file or "./factoids.dat"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 | local fd = io.open(factoids_file, "r"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 | local old_mt = getmetatable(factoids); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 | setmetatable(factoids, {}); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 | factoids = deserialize(fd:read("*a")); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 | setmetatable(factoids, old_mt); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
149 | df:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
150 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
151 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 | local fd, err = io.open(factoids_file, "w"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 | if err then print(err) end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 | fd:write(serialize(factoids)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
159 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
161 | function actions.add(...) actions.save(); end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 | function actions.del(...) actions.save(); end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
165 | __newindex = function(t, k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
173 | -- A backend using XEP 49 storage |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
174 | function storage_backends.iq_private(bot, factoids) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
175 | bot.stream:add_plugin("private"); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
176 | local factoids_node = "factoids"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
177 | local factoids_xmlns = "http://code.zash.se/riddim/plugins/factoids"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
180 | bot.stream:private_get(factoids_node, factoids_xmlns, function (storage) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 | if storage then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
182 | for factoid in storage:children() do |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
183 | factoids[factoid.attr.name or "something-invalid"] = factoid:get_text(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
184 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
185 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
186 | end); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
187 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 | save = function() |
137
d16c9dba9337
riddim.plugins.factoids: Import and use util.stanza instead of relying on now non-existant verse global
Kim Alvefur <zash@zash.se>
parents:
121
diff
changeset
|
189 | local wrapper = st.stanza(factoids_node, { xmlns = factoids_xmlns }); |
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 | for name, text in pairs(factoids) do |
137
d16c9dba9337
riddim.plugins.factoids: Import and use util.stanza instead of relying on now non-existant verse global
Kim Alvefur <zash@zash.se>
parents:
121
diff
changeset
|
191 | wrapper:tag("factoid", { name = name }):text(text):up(); |
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
192 | end |
137
d16c9dba9337
riddim.plugins.factoids: Import and use util.stanza instead of relying on now non-existant verse global
Kim Alvefur <zash@zash.se>
parents:
121
diff
changeset
|
193 | bot.stream:private_set(factoids_node, factoids_xmlns, wrapper); |
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
194 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
195 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
196 | function actions.add(...) actions.save(); end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
197 | function actions.del(...) actions.save(); end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
198 | bot:hook("started", function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
199 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
201 | __newindex = function(t, k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
202 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
203 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
204 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
205 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
206 | end); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
207 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
208 | end |