Fri, 07 Aug 2015 21:45:02 +0200
plugins.github: Support per-room configuration
90
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 | local storage_backends = {}; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 | 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
|
3 | local factoids = {}; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 | 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
|
5 | local backend; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 | -- 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
|
8 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 | 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
|
10 | 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
|
11 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 | 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
|
14 | 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
|
15 | local factoid = factoids[name]; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
16 | if factoid then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 | return factoid; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 | 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
|
19 | 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
|
20 | 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
|
21 | end |
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 | 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
|
24 | local name = cmd.param; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
25 | local factoid = factoids[name]; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
26 | if factoid then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
27 | factoids[name] = nil; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
28 | 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
|
29 | backend.del(name); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
30 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
31 | 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
|
32 | end |
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 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
36 | -- A simple file backend |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
37 | 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
|
38 | 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
|
39 | 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
|
40 | 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
|
41 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
42 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
43 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
44 | 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
|
45 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
46 | 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
|
47 | 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
|
48 | 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
|
49 | factoids[k] = v; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
50 | end |
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 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
53 | end |
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 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
56 | 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
|
57 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
58 | 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
|
59 | 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
|
60 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
61 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 | end |
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 | add = function(k, v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 | 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
|
66 | 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
|
67 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 | }; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 | 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
|
71 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
72 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
73 | __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
|
74 | v = v:gsub("\n"," "); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 | -- 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
|
83 | 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
|
84 | 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
|
85 | 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
|
86 | 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
|
87 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
88 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
89 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 | 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
|
91 | if chunk then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 | setfenv(chunk, {_G = factoids} ); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 | chunk(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 | else |
121
d68a4ae37f4a
plugins.factoids: Remove debug output
Kim Alvefur <zash@zash.se>
parents:
90
diff
changeset
|
95 | 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
|
96 | end |
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 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
99 | 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
|
100 | 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
|
101 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
102 | 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
|
103 | 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
|
104 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 | end |
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 | add = function(k,v) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
109 | 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
|
110 | 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
|
111 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
112 | 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
|
113 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 | end |
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 | del = function(k) |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 | 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
|
118 | 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
|
119 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
120 | 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
|
121 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
122 | end |
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 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
125 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
127 | __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
|
128 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
129 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
130 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 | -- 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
|
136 | 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
|
137 | 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
|
138 | 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
|
139 | 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
|
140 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 | 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
|
143 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 | 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
|
145 | setmetatable(factoids, {}); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 | 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
|
147 | setmetatable(factoids, old_mt); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 | df:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
149 | end |
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 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 | 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
|
153 | 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
|
154 | if fd then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 | fd:write(serialize(factoids)); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 | fd:close(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
157 | end |
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 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 | 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
|
161 | 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
|
162 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
164 | __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
|
165 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
166 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
167 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
168 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
169 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
170 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
171 | |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
172 | -- 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
|
173 | 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
|
174 | 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
|
175 | local factoids_node = "factoids"; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
176 | 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
|
177 | local actions = { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
178 | load = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
179 | 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
|
180 | if storage then |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
181 | 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
|
182 | 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
|
183 | end |
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 | save = function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
188 | local st = verse.stanza(factoids_node, { xmlns = factoids_xmlns }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
189 | for name, text in pairs(factoids) do |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
190 | st:tag("factoid", { name = name }):text(text):up(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
191 | end |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
192 | bot.stream:private_set(factoids_node, factoids_xmlns, st); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
193 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
194 | } |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
195 | 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
|
196 | 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
|
197 | bot:hook("started", function() |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
198 | actions.load(); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
199 | setmetatable(factoids, { |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
200 | __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
|
201 | rawset(t, k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
202 | actions.add(k, v); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
203 | end, |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
204 | }); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
205 | end); |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
206 | return actions; |
dd8172982299
plugins.factoids: Add plugin for storing text snippets, with multiple backends
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
207 | end |