]> git.lizzy.rs Git - amogus.git/commitdiff
Initial commit
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 12 Sep 2021 17:10:06 +0000 (19:10 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Sun, 12 Sep 2021 17:10:06 +0000 (19:10 +0200)
README.md [new file with mode: 0644]
backend.py [new file with mode: 0644]
bot.lua [new file with mode: 0644]
init.lua [new file with mode: 0644]
mod.conf [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..d489157
--- /dev/null
+++ b/README.md
@@ -0,0 +1,9 @@
+# AmogusV3
+Funny clamity chatbot powered by cleverbot_free API.
+
+## Dependencies
+- Needs http access and optionally insecure env (for hot reloading)
+
+Depends on the [libclamity](https://github.com/EliasFleckenstein03/libclamity) CSM.
+
+You need to run the backend.py before running any instances of the bot, which depends on https://github.com/plasticuproject/cleverbotfree
diff --git a/backend.py b/backend.py
new file mode 100644 (file)
index 0000000..b467386
--- /dev/null
@@ -0,0 +1,34 @@
+import cleverbotfree
+from urllib.parse import urlparse, parse_qs
+from http.server import HTTPServer, BaseHTTPRequestHandler
+
+cleverbot = None
+
+class AmogusServer(BaseHTTPRequestHandler):
+       def _set_headers(self):
+               self.send_response(200)
+               self.send_header("Content-type", "text/plain")
+               self.end_headers()
+
+       def do_GET(self):
+               self._set_headers()
+               query_components = parse_qs(urlparse(self.path).query)
+               self.wfile.write(cleverbot.single_exchange(query_components["message"][0]).encode("utf8"))
+
+def main():
+       global cleverbot
+
+       with cleverbotfree.sync_playwright() as cleverbot_pw:
+               cleverbot = cleverbotfree.Cleverbot(cleverbot_pw)
+
+               httpd = HTTPServer(("localhost", 6969), AmogusServer)
+
+               try:
+                       httpd.serve_forever()
+               except KeyboardInterrupt:
+                       pass
+               finally:
+                       cleverbot.close()
+
+if __name__ == "__main__":
+       main()
diff --git a/bot.lua b/bot.lua
new file mode 100644 (file)
index 0000000..cbffb2e
--- /dev/null
+++ b/bot.lua
@@ -0,0 +1,40 @@
+local http, env, storage
+
+function amogus.urlencode(url)
+       url = url:gsub("\n", "\r\n")
+       url = url:gsub("([^%w ])", function(c)
+               return string.format("%%%02X", string.byte(c))
+       end)
+       url = url:gsub(" ", "+")
+       return url
+end
+
+function amogus.parse_message(player, message, discord)
+       if player ~= minetest.localplayer:get_name() then
+               http.fetch({url = "http://localhost:6969?message=" .. amogus.urlencode(message), timeout = 100}, function(res)
+                       if res.succeeded then
+                               minetest.send_chat_message(res.data)
+                       end
+               end)
+       end
+end
+
+function amogus.reload()
+       local func, err = env.loadfile("clientmods/amogus/bot.lua")
+       if func then
+               local old_amogus = table.copy(amogus)
+               local status, init = pcall(func)
+               if status then
+                       init(http, env, storage)
+               else
+                       amogus = old_amogus
+                       return false, "Error: " .. init
+               end
+       else
+               return false, "Syntax error: " .. err
+       end
+end
+
+return function(_http, _env, _storage)
+       http, env, storage = _http, _env, _storage
+end
diff --git a/init.lua b/init.lua
new file mode 100644 (file)
index 0000000..a21bb9d
--- /dev/null
+++ b/init.lua
@@ -0,0 +1,18 @@
+amogus = {}
+
+local http = minetest.request_http_api()
+local env = minetest.request_insecure_environment()
+local storage = minetest.get_mod_storage()
+
+libclamity.register_on_chat_message(function(...)
+       amogus.parse_message(...)
+end)
+
+minetest.register_chatcommand("amogus_reload", {
+       func = function()
+               return amogus.reload(http, env, storage)
+       end
+})
+
+loadfile(minetest.get_modpath("amogus") .. "/bot.lua")()(http, env, storage)
+
diff --git a/mod.conf b/mod.conf
new file mode 100644 (file)
index 0000000..7c498cc
--- /dev/null
+++ b/mod.conf
@@ -0,0 +1 @@
+name = amogus