diff --git a/config.lua.example b/config.lua.example index 5f7c9c9..85a52f0 100644 --- a/config.lua.example +++ b/config.lua.example @@ -24,6 +24,10 @@ Sende /hilfe, um zu starten -- false = only whitelisted users can use inline querys -- NOTE that it doesn't matter, if the chat is whitelisted! The USER must be whitelisted! enable_inline_for_everyone = true, + + -- Botan.io statistics + enable_statistics = false, + botan_token = '', errors = { -- Generic error messages used in various plugins. generic = 'An unexpected error occurred.', @@ -71,8 +75,7 @@ Sende /hilfe, um zu starten 'adfly', 'twitter', -- Put new plugins above this line. - 'help', - 'greetings' + 'help' } -} +} \ No newline at end of file diff --git a/miku/bindings.lua b/miku/bindings.lua index 15af11b..1b98a71 100644 --- a/miku/bindings.lua +++ b/miku/bindings.lua @@ -10,6 +10,7 @@ local bindings = {} local HTTPS = require('ssl.https') +HTTPS.timeout = 10 local JSON = require('dkjson') local ltn12 = require('ltn12') local MP_ENCODE = require('multipart-post').encode diff --git a/miku/bot.lua b/miku/bot.lua index eca5e6c..0ff6804 100644 --- a/miku/bot.lua +++ b/miku/bot.lua @@ -5,7 +5,7 @@ local bindings -- Load Telegram bindings. local utilities -- Load miscellaneous and cross-plugin functions. local redis = (loadfile "./miku/redis.lua")() -bot.version = '160717' +bot.version = '160726' function bot:init(config) -- The function run when the bot is started or reloaded. @@ -31,21 +31,6 @@ function bot:init(config) -- The function run when the bot is started or reloade if not self.database then self.database = utilities.load_data(self.info.username..'.db') end - - -- MIGRATION CODE 2.0 -> 2.1 - if self.database.users and self.database.version ~= '2.1' then - self.database.userdata = {} - for id, user in pairs(self.database.users) do - self.database.userdata[id] = {} - self.database.userdata[id].nickname = user.nickname - self.database.userdata[id].lastfm = user.lastfm - user.nickname = nil - user.lastfm = nil - user.id_str = nil - user.name = nil - end - end - -- END MIGRATION CODE -- Table to cache user info (usernames, IDs, etc). self.database.users = self.database.users or {} @@ -230,7 +215,7 @@ function match_inline_plugins(self, inline_query, config, plugin) break; end end - print('Inline: '..plugin.name..' triggered') + print('Inline: '..plugin.name..' ausgelöst') return plugin.inline_callback(self, inline_query, config, matches) end) if not success then @@ -253,7 +238,8 @@ function match_plugins(self, msg, config, plugin) break; end end - print(plugin.name..' triggered') + print(plugin.name..' ausgelöst') + plugin_name = plugin.name return plugin.action(self, msg, config, matches) end) if not success then @@ -265,9 +251,19 @@ function match_plugins(self, msg, config, plugin) elseif plugin.error == nil then utilities.send_reply(self, msg, config.errors.generic, true) end - utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config) - return + utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config) + return end + + -- Analytics + if config.enable_analytics and config.botan_token ~= '' then + for _,plugin in ipairs(self.plugins) do + if plugin.name == 'botan' then + plugin.action(self, msg, config, nil, plugin_name) + end + end + end + -- If the action returns a table, make that table the new msg. if type(result) == 'table' then msg = result diff --git a/miku/plugins/botan.lua b/miku/plugins/botan.lua new file mode 100644 index 0000000..765fe0c --- /dev/null +++ b/miku/plugins/botan.lua @@ -0,0 +1,34 @@ +local botan = {} + +local https = require('ssl.https') +local URL = require('socket.url') +local redis = (loadfile "./miku/redis.lua")() +local utilities = require('miku.utilities') +local bindings = require('miku.bindings') + +function botan:init(config) + if not config.botan_token then + print('Fehlender Key: botan_token.') + print('botan.lua wird nicht aktiviert.') + return + end + botan.triggers = { + "^/nil$" + } +end + +local BASE_URL = 'https://api.botan.io/track' + +function botan:appmetrica(text, token, plugin_name) + https.request(BASE_URL..'/?token='..token..'&uid=1&name='..plugin_name) +end + +function botan:action(msg, config, matches, plugin_name) + if not plugin_name then + return + end + + botan:appmetrica(msg.text, config.botan_token, plugin_name) +end + +return botan \ No newline at end of file diff --git a/miku/plugins/help.lua b/miku/plugins/help.lua index 61748bc..ea40b86 100644 --- a/miku/plugins/help.lua +++ b/miku/plugins/help.lua @@ -1,5 +1,4 @@ - -- This plugin should go at the end of your plugin list in - -- config.lua, but not after greetings.lua. + -- This plugin should go at the end of your plugin list in config.lua. local help = {} @@ -8,11 +7,10 @@ local utilities = require('miku.utilities') local help_text function help:init(config) - help.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('hilfe', true):t('help', true).table + help.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('[Hh][Ii][Ll][Ff][Ee]', true):t('[Hh][Ee][Ll][Pp]', true).table end function help:action(msg, config) - local commandlist = {} help_text = '*Verfügbare Befehle:*\n• '..config.cmd_pat @@ -20,11 +18,10 @@ function help:action(msg, config) if plugin.command then table.insert(commandlist, plugin.command) - --help_text = help_text .. '\n• '..config.cmd_pat .. plugin.command:gsub('%[', '\\[') end end - table.insert(commandlist, 'hilfe [Plugin]') + table.insert(commandlist, 'hilfe [Befehl]') table.sort(commandlist) help_text = help_text .. table.concat(commandlist, '\n• '..config.cmd_pat) .. '\nParameter: [optional]' @@ -52,7 +49,6 @@ function help:action(msg, config) end utilities.send_reply(self, msg, 'Für diesen Befehl gibt es keine Hilfe.') - end -return help +return help \ No newline at end of file diff --git a/miku/utilities.lua b/miku/utilities.lua index fedd649..fa7e8fb 100644 --- a/miku/utilities.lua +++ b/miku/utilities.lua @@ -13,6 +13,8 @@ local serpent = require("serpent") local bindings = require('miku.bindings') local redis = (loadfile "./miku/redis.lua")() local mimetype = (loadfile "./miku/mimetype.lua")() +local OAuth = require "OAuth" +local helpers = require "OAuth.helpers" HTTP.timeout = 10 @@ -646,9 +648,8 @@ function post_petition(url, arguments, headers) local source = arguments if type(arguments) == "table" then - local source = helpers.url_encode_arguments(arguments) + source = helpers.url_encode_arguments(arguments) end - if not headers then request_constructor.headers["Content-Type"] = "application/x-www-form-urlencoded; charset=UTF8" request_constructor.headers["X-Accept"] = "application/json"