diff --git a/config.lua.example b/config.lua.example index 8d1a881..a86d5c3 100644 --- a/config.lua.example +++ b/config.lua.example @@ -61,7 +61,7 @@ Sende /hilfe, um zu starten max_reminders_private = 50 }, - chatter = { + cleverbot = { cleverbot_api = 'https://brawlbot.tk/apis/chatter-bot-api/cleverbot.php?text=', connection = 'Ich möchte jetzt nicht reden...', response = 'Ich weiß nicht, was ich dazu sagen soll...' diff --git a/miku/bindings.lua b/miku/bindings.lua index 5f7afbe..7e6ec63 100644 --- a/miku/bindings.lua +++ b/miku/bindings.lua @@ -5,19 +5,8 @@ See the "Bindings" section of README.md for usage information. Copyright 2016 topkecleon - - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License version 3 as - published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License - for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + Modified by Brawl345 + This code is licensed under the GNU AGPLv3. See /LICENSE for details. ]]-- local bindings = {} @@ -26,7 +15,7 @@ local https = require('ssl.https') https.TIMEOUT = 10 local json = require('dkjson') local ltn12 = require('ltn12') -local mp_encode = require('multipart-post').encode +local mp = require('multipart-post') function bindings.init(token) bindings.BASE_URL = 'https://api.telegram.org/bot' .. token .. '/' @@ -65,7 +54,7 @@ function bindings.request(method, parameters, file) parameters = {''} end local response = {} - local body, boundary = mp_encode(parameters) + local body, boundary = mp.encode(parameters) local success, code = https.request{ url = bindings.BASE_URL .. method, method = 'POST', @@ -86,8 +75,9 @@ function bindings.request(method, parameters, file) return false, false elseif result.ok then return result - else - assert(result.description ~= 'Method not found', method .. ': Method not found.') + elseif result.description == 'Method not found' then + error(method .. ': Method not found.') + else return false, result end end diff --git a/miku/bot.lua b/miku/bot.lua index 4aed423..04c7fe2 100644 --- a/miku/bot.lua +++ b/miku/bot.lua @@ -20,7 +20,7 @@ local bot = {} -bot.version = '160908' +bot.version = '161005' function bot:init(config) -- The function run when the bot is started or reloaded. assert(config.bot_api_key, 'Dein Bot-Token ist nicht in der Config gesetzt!') @@ -39,6 +39,16 @@ 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.2.7 -> 2.3 + -- "database.reminders" -> "database.remind" + if self.database.version ~= '2.3' then + self.database.remind = self.database.reminders + self.database.reminders = nil + end + -- End migration code. + + self.database.version = bot.version self.plugins = {} -- Load plugins. enabled_plugins = load_plugins() @@ -75,7 +85,7 @@ function bot:on_msg_receive(msg, config) -- The fn run whenever a message is rec print(bot:print_msg(msg)) -- Support deep linking. - if msg.text:match('^'..config.cmd_pat..'start .+') then + if msg.text:match('^/start .+') then msg.text = config.cmd_pat .. utilities.input(msg.text) msg.text_lower = msg.text:lower() end @@ -368,6 +378,7 @@ function match_plugins(self, msg, config, plugin) end) if not success then utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config.log_chat) + msg = nil return end -- if one pattern matches, end diff --git a/miku/plugins/cleverbot.lua b/miku/plugins/cleverbot.lua index 6b052eb..0785f84 100644 --- a/miku/plugins/cleverbot.lua +++ b/miku/plugins/cleverbot.lua @@ -6,7 +6,7 @@ function cleverbot:init(config) "^[Mm][Ii][Kk][Uu][Bb][Oo][Tt], (.+)$", "^[Mm][Ii][Kk][Uu], (.+)$" } - cleverbot.url = config.chatter.cleverbot_api + cleverbot.url = config.cleverbot.cleverbot_api end cleverbot.command = 'cbot ' @@ -16,13 +16,13 @@ function cleverbot:action(msg, config, matches) local text = matches[1] local query, code = https.request(cleverbot.url..URL.escape(text)) if code ~= 200 then - utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...') + utilities.send_reply(msg, config.cleverbot.connection) return end local data = json.decode(query) if not data.clever then - utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...') + utilities.send_reply(msg, config.cleverbot.response) return end diff --git a/miku/plugins/gImages.lua b/miku/plugins/gImages.lua index e326c1a..5ecbe2a 100644 --- a/miku/plugins/gImages.lua +++ b/miku/plugins/gImages.lua @@ -75,7 +75,7 @@ function gImages:cache_result(results, text) cache_data('gImages', string.lower(text), cache, 1209600, 'set') end -function gImages:send_image(msg, input) +function gImages:send_image(msg, input, config) utilities.send_typing(msg.chat.id, 'upload_photo') local hash = 'telegram:cache:gImages' @@ -147,7 +147,7 @@ function gImages:callback(callback, msg, self, config, input) else utilities.answer_callback_query(callback, 'Suche nochmal nach "'..input..'"') end - gImages:send_image(msg, input) + gImages:send_image(msg, input, config) end function gImages:action(msg, config, matches) @@ -167,7 +167,7 @@ function gImages:action(msg, config, matches) return end - gImages:send_image(msg, input) + gImages:send_image(msg, input, config) end return gImages \ No newline at end of file diff --git a/miku/plugins/gImages_nsfw.lua b/miku/plugins/gImages_nsfw.lua index c722404..4e1834f 100644 --- a/miku/plugins/gImages_nsfw.lua +++ b/miku/plugins/gImages_nsfw.lua @@ -75,7 +75,7 @@ function gImages_nsfw:cache_result(results, text) cache_data('gImages_nsfw', string.lower(text), cache, 1209600, 'set') end -function gImages_nsfw:send_image(msg, input) +function gImages_nsfw:send_image(msg, input, config) utilities.send_typing(msg.chat.id, 'upload_photo') local hash = 'telegram:cache:gImages_nsfw' @@ -147,7 +147,7 @@ function gImages_nsfw:callback(callback, msg, self, config, input) else utilities.answer_callback_query(callback, 'Suche nochmal nach "'..input..'"') end - gImages_nsfw:send_image(msg, input) + gImages_nsfw:send_image(msg, input, config) end function gImages_nsfw:action(msg, config, matches) @@ -167,7 +167,7 @@ function gImages_nsfw:action(msg, config, matches) return end - gImages_nsfw:send_image(msg, input) + gImages_nsfw:send_image(msg, input, config) end return gImages_nsfw \ No newline at end of file diff --git a/miku/plugins/remind.lua b/miku/plugins/remind.lua index 2661657..b76c79e 100644 --- a/miku/plugins/remind.lua +++ b/miku/plugins/remind.lua @@ -3,14 +3,19 @@ local remind = {} remind.command = 'remind ' function remind:init(config) - self.database.reminders = self.database.reminders or {} + self.database.remind = self.database.remind or {} remind.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('remind', true).table remind.doc = [[* ]]..config.cmd_pat..[[remind* __ __ Erinnert dich in der angegeben Länge in Minuten an eine Nachricht. Die maximale Länge einer Erinnerung beträgt %s Buchstaben, die maximale Zeit beträgt %s Minuten, die maximale Anzahl an Erinnerung für eine Gruppe ist %s und für private Chats %s.]] - remind.doc = remind.doc:format(config.remind.max_length, config.remind.max_duration, config.remind.max_reminders_group, config.remind.max_reminders_private) + remind.doc = remind.doc:format( + config.remind.max_length, + config.remind.max_duration, + config.remind.max_reminders_group, + config.remind.max_reminders_private + ) end function remind:action(msg, config) @@ -49,10 +54,10 @@ function remind:action(msg, config) local chat_id_str = tostring(msg.chat.id) local output - self.database.reminders[chat_id_str] = self.database.reminders[chat_id_str] or {} - if msg.chat.type == 'private' and utilities.table_size(self.database.reminders[chat_id_str]) >= config.remind.max_reminders_private then + self.database.remind[chat_id_str] = self.database.remind[chat_id_str] or {} + if msg.chat.type == 'private' and utilities.table_size(self.database.remind[chat_id_str]) >= config.remind.max_reminders_private then output = 'Sorry, du kannst keine Erinnerungen mehr hinzufügen.' - elseif msg.chat.type ~= 'private' and utilities.table_size(self.database.reminders[chat_id_str]) >= config.remind.max_reminders_group then + elseif msg.chat.type ~= 'private' and utilities.table_size(self.database.remind[chat_id_str]) >= config.remind.max_reminders_group then output = 'Sorry, diese Gruppe kann keine Erinnerungen mehr hinzufügen.' else -- Put together the reminder with the expiration, message, and message to reply to. @@ -61,7 +66,7 @@ function remind:action(msg, config) time = timestamp, message = message } - table.insert(self.database.reminders[chat_id_str], reminder) + table.insert(self.database.remind[chat_id_str], reminder) local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S') output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.' end @@ -71,14 +76,14 @@ end function remind:cron(config) local time = os.time() -- Iterate over the group entries in the reminders database. - for chat_id, group in pairs(self.database.reminders) do + for chat_id, group in pairs(self.database.remind) do -- Iterate over each reminder. for k, reminder in pairs(group) do -- If the reminder is past-due, send it and nullify it. -- Otherwise, add it to the replacement table. if time > reminder.time then - local output = '*ERINNERUNG:*\n"' .. utilities.md_escape(reminder.message) .. '"' - local res = utilities.send_message(chat_id, output, true, nil, true) + local output = 'ERINNERUNG:\n"'..utilities.html_escape(reminder.message)..'"' + local res = utilities.send_message(chat_id, output, true, nil, 'HTML') -- If the message fails to send, save it for later (if enabled in config). if res or not config.remind.persist then group[k] = nil diff --git a/miku/plugins/youtube_dl.lua b/miku/plugins/youtube_dl.lua index 8664c25..03275ff 100644 --- a/miku/plugins/youtube_dl.lua +++ b/miku/plugins/youtube_dl.lua @@ -164,7 +164,7 @@ function youtube_dl:action(msg, config, matches) else pretty_format = video.pretty_format..' ('..pretty_size..')' end - local button = '{"text":"'..pretty_format..'","callback_data":"@'..self.info.username..' youtube_dl:'..id..'@'..format..'"}' + local button = '{"text":"'..pretty_format..'","callback_data":"youtube_dl:'..id..'@'..format..'"}' callback_buttons[#callback_buttons+1] = button end diff --git a/miku/utilities.lua b/miku/utilities.lua index 21c934d..e776554 100644 --- a/miku/utilities.lua +++ b/miku/utilities.lua @@ -4,22 +4,9 @@ Copyright 2016 topkecleon - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU Affero General Public License version 3 as - published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License - for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + This code is licensed under the GNU AGPLv3. See /LICENSE for details. ]]-- -local utilities = {} - utf8 = require('lua-utf8') ltn12 = require('ltn12') http = require('socket.http') @@ -37,6 +24,8 @@ require('/miku/encoding') http.TIMEOUT = 10 https.TIMEOUT = 10 +local utilities = {} + -- For the sake of ease to new contributors and familiarity to old contributors, -- we'll provide a couple of aliases to real bindings here. function utilities.send_message(chat_id, text, disable_web_page_preview, reply_to_message_id, use_markdown, reply_markup) @@ -462,7 +451,7 @@ end -- Get the number of values in a key/value table. function utilities.table_size(tab) local i = 0 - for _,_ in pairs(tab) do + for _ in pairs(tab) do i = i + 1 end return i