diff --git a/launch.sh b/launch.sh index 2e115aa..c9248b7 100755 --- a/launch.sh +++ b/launch.sh @@ -1,8 +1,25 @@ +# Run Brawlbot in Lua 5.3, if available. +# (Specifying lua5.3 because "lua" is not linked to it in Ubuntu 16.04.) +# Otherwise, use any generic installed Lua. +# If none, give an error and a friendly suggestion. +# If Lua was found, restart Brawlbot five seconds after halting each time. + #!/bin/sh -# Launch Brawlbot -# Restart Brawlbot five seconds after halted. -while true; do - lua main.lua - echo 'otouto has stopped. ^C to exit.' - sleep 5s -done + +# Ubuntu 16.04 seems to not link "lua" to lua5.3. +if type lua5.3 >/dev/null 2>/dev/null; then + while true; do + lua5.3 main.lua + echo "Brawlbot has stopped. ^C to exit." + sleep 5s + done +elif type lua >/dev/null 2>/dev/null; then + while true; do + lua main.lua + echo "Brawlbot has stopped. ^C to exit." + sleep 5s + done +else + echo "Lua not found." + echo "If you're on Ubuntu, try running ./install-dependencies.sh." +fi diff --git a/otouto/plugins/luarun.lua b/otouto/plugins/luarun.lua index 2184bb4..a15c750 100644 --- a/otouto/plugins/luarun.lua +++ b/otouto/plugins/luarun.lua @@ -17,6 +17,12 @@ function luarun:init(config) return JSON.encode(t, {indent=true}) end end + -- Lua 5.2 compatibility. + -- "loadstring" was renamed "load" in 5.3. + luarun.loadstring = load or loadstring + luarun.err_msg = function(x) + return 'Error:\n' .. tostring(x) + end end function luarun:action(msg, config) @@ -35,24 +41,21 @@ function luarun:action(msg, config) input = 'return ' .. input end - local output, success = - load("local bot = require('otouto.bot')\n\z + local output, success = luarun.loadstring( + "local bot = require('otouto.bot')\n\z local bindings = require('otouto.bindings')\n\z local utilities = require('otouto.utilities')\n\z local json = require('dkjson')\n\z local URL = require('socket.url')\n\z local http = require('socket.http')\n\z local https = require('ssl.https')\n\z - return function (self, msg, config)\n" .. input .. "\nend") - - local function err_msg(x) - return "Fehler:\n" .. tostring(x) - end + return function (self, msg, config)\n" .. input .. "\nend" + ) if output == nil then output = success else - success, output = xpcall(output(), err_msg, self, msg, config) + success, output = xpcall(output(), luarun.err_msg, self, msg, config) end if output == nil then diff --git a/otouto/utilities.lua b/otouto/utilities.lua index 5028453..91a9416 100644 --- a/otouto/utilities.lua +++ b/otouto/utilities.lua @@ -20,7 +20,6 @@ local utilities = {} -utf8 = require 'lua-utf8' ltn12 = require('ltn12') http = require('socket.http') https = require('ssl.https') @@ -33,6 +32,9 @@ redis = (loadfile "./otouto/redis.lua")() mime = (loadfile "./otouto/mimetype.lua")() OAuth = require "OAuth" helpers = require "OAuth.helpers" + -- Lua 5.2 compatibility. + -- If no built-in utf8 is available, load the library. +local utf8 = utf8 or require('lua-utf8') http.timeout = 5 https.timeout = 5 @@ -1101,7 +1103,8 @@ end -- Converts a gross string back into proper UTF-8. -- Useful for fixing improper encoding caused by bad JSON escaping. function utilities.fix_utf8(str) - return string.char(utf8.codepoint(str, 1, -1)) + return string.char(utf8.codepoint(str, 1, -1)) end + return utilities \ No newline at end of file