diff --git a/README.md b/README.md index c39f812..de1027e 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Der multifunktionale Telegram-Bot. [Offizielle Webseite](https://ponywave.de/projekte/mikubot-v2/) | [Entwickler auf Telegram](http://telegram.me/Akamaru) **KEIN SUPPORT!** | [Offizieller Telegram-Kanal](https://telegram.me/Mikubot_Updates) Mikubot ist ein auf Plugins basierender Bot, der die [offizielle Telegram Bot API](http://core.telegram.org/bots/api) benutzt. Geforkt wurde er von [Brawlbot](https://github.com/Brawl345/Brawlbot-v2) Ursprünglich wurde er 2015 auf Basis von Yagops [Telegram Bot](https://github.com/yagop/telegram-bot/) entwickelt, da aber die Entwicklung von tg-cli [zum Stillstand](https://brawlbot.tk/posts/ein-neuanfang) gekommen ist, wurden alle Plugins des bisher proprietären Brawlbots im Juni 2016 auf die Bot-API portiert und open-sourced. Im Juli und August 2016 wurden die zusätzlichen Plugins von Mikubot ebenfalls auf die Bot-API migriert. -**Mikubot V2 basiert auf [otouto](https://github.com/topkecleon/otouto) von Topkecleon.** +**Mikubot V2 basiert auf [otouto](https://github.com/topkecleon/otouto) von topkecleon.** Mikubot V2 ist freie Software; du darfst ihn modifizieren und weiterverbreiten, allerdings musst du dich an die GNU Affero General Public License v3 halten, siehe **LICENSE** für Details. diff --git a/miku/bot.lua b/miku/bot.lua index 92a7c8c..8aaf949 100644 --- a/miku/bot.lua +++ b/miku/bot.lua @@ -135,7 +135,7 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba -- Check if whitelist is enabled and user/chat is whitelisted local whitelist = redis:get('whitelist:enabled') - if whitelist and not is_sudo(msg, config) then + if whitelist and not is_sudo(callback, config) then local hash = 'whitelist:user#id'..user_id local allowed = redis:get(hash) or false if not allowed then @@ -163,10 +163,12 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba for n=1, #self.plugins do local plugin = self.plugins[n] if plugin.name == called_plugin then - if is_plugin_disabled_on_chat(plugin.name, msg) then return end + if is_plugin_disabled_on_chat(plugin.name, msg) then utilities.answer_callback_query(callback, 'Plugin wurde in diesem Chat deaktiviert.') return end plugin:callback(callback, msg, self, config, param) end end + + utilities.answer_callback_query(callback, 'Ungültiger CallbackQuery: Kein Plugin gefunden.') end -- NOTE: To enable InlineQuerys, send /setinline to @BotFather @@ -192,6 +194,11 @@ function bot:process_inline_query(inline_query, config) -- When an inline query inline_query.query = inline_query.query:gsub('"', '\\"') end + if string.len(inline_query.query) > 200 then + abort_inline_query(inline_query) + return + end + for n=1, #self.plugins do local plugin = self.plugins[n] match_inline_plugins(self, inline_query, config, plugin) @@ -227,7 +234,6 @@ function bot:run(config) -- Run cron jobs every minute. if self.last_cron ~= os.date('%M') then self.last_cron = os.date('%M') - utilities.save_data(self.info.username..'.db', self.database) -- Save the database. for n=1, #self.plugins do local v = self.plugins[n] if v.cron then -- Call each plugin's cron function, if it has one. diff --git a/miku/plugins/app_store.lua b/miku/plugins/app_store.lua index 41ea4c5..6d313ec 100644 --- a/miku/plugins/app_store.lua +++ b/miku/plugins/app_store.lua @@ -43,7 +43,7 @@ function app_store:send_appstore_data(data) else game_center = '' end - local category_count = tablelength(data.genres) + local category_count = #data.genres if category_count == 1 then category = '\nKategorie: '..data.genres[1] else diff --git a/miku/plugins/bitly_create.lua b/miku/plugins/bitly_create.lua index 70d1f4c..12366cf 100644 --- a/miku/plugins/bitly_create.lua +++ b/miku/plugins/bitly_create.lua @@ -124,10 +124,10 @@ function bitly_create:action(msg, config, matches) end if matches[2] == nil then - long_url = url_encode(matches[1]) + long_url = URL.encode(matches[1]) domain = 'bit.ly' else - long_url = url_encode(matches[2]) + long_url = URL.encode(matches[2]) domain = matches[1] end utilities.send_reply(msg, bitly_create:create_bitlink(long_url, domain, bitly_access_token)) diff --git a/miku/plugins/channels.lua b/miku/plugins/channels.lua index a0b88f8..c6415f6 100644 --- a/miku/plugins/channels.lua +++ b/miku/plugins/channels.lua @@ -47,7 +47,7 @@ function channels:pre_process(msg, config) end function channels:action(msg, config, matches) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/control.lua b/miku/plugins/control.lua index 69309a0..1cb5cd2 100644 --- a/miku/plugins/control.lua +++ b/miku/plugins/control.lua @@ -12,7 +12,7 @@ end function control:action(msg, config) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then return end diff --git a/miku/plugins/creds.lua b/miku/plugins/creds.lua index f8a703e..e9a0790 100644 --- a/miku/plugins/creds.lua +++ b/miku/plugins/creds.lua @@ -89,7 +89,7 @@ end function creds_manager:action(msg, config, matches) local receiver = msg.from.id - if receiver ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/dhl.lua b/miku/plugins/dhl.lua index 0a15ca5..e6b1fd2 100644 --- a/miku/plugins/dhl.lua +++ b/miku/plugins/dhl.lua @@ -14,11 +14,11 @@ local BASE_URL = 'https://mobil.dhl.de' function dhl:sendungsstatus(id) local url = BASE_URL..'/shipmentdetails.html?shipmentId='..id local res,code = https.request(url) - if code ~= 200 then return 'Fehler beim Abrufen von mobil.dhl.de' end - local status = string.match(res, '
(.-)
') - local status = all_trim(status) - local zeit = string.match(res, '
(.-)
') - local zeit = all_trim(zeit) + if code ~= 200 then return "Fehler beim Abrufen von mobil.dhl.de" end + local status = string.match(res, "
(.-)
") + local status = utilities.trim(status) + local zeit = string.match(res, "
(.-)
") + local zeit = utilities.trim(zeit) if not zeit or zeit == '
' then return status end diff --git a/miku/plugins/gImages.lua b/miku/plugins/gImages.lua index ae444fd..b2bffdb 100644 --- a/miku/plugins/gImages.lua +++ b/miku/plugins/gImages.lua @@ -26,6 +26,19 @@ end gImages.command = 'img ' +function gImages:is_blacklisted(msg) + _blacklist = redis:smembers("telegram:img_blacklist") + local var = false + for v,word in pairs(_blacklist) do + if string.find(string.lower(msg), string.lower(word)) then + print("Wort steht auf der Blacklist!") + var = true + break + end + end + return var +end + -- Yes, the callback is copied from below, but I can't think of another method :\ function gImages:callback(callback, msg, self, config, input) if not msg then return end @@ -153,7 +166,7 @@ function gImages:action(msg, config, matches) end print ('Überprüfe, ob das Wort auf der Blackliste steht: '..input) - if is_blacklisted(input) then + if gImages:is_blacklisted(input) then utilities.send_reply(msg, 'Vergiss es!') return end diff --git a/miku/plugins/gImages_nsfw.lua b/miku/plugins/gImages_nsfw.lua index 8e9fc79..5c38959 100644 --- a/miku/plugins/gImages_nsfw.lua +++ b/miku/plugins/gImages_nsfw.lua @@ -26,6 +26,19 @@ end gImages_nsfw.command = 'img2 ' +function gImages_nsfw:is_blacklisted(msg) + _blacklist = redis:smembers("telegram:img_blacklist") + local var = false + for v,word in pairs(_blacklist) do + if string.find(string.lower(msg), string.lower(word)) then + print("Wort steht auf der Blacklist!") + var = true + break + end + end + return var +end + -- Yes, the callback is copied from below, but I can't think of another method :\ function gImages_nsfw:callback(callback, msg, self, config, input) if not msg then return end @@ -153,7 +166,7 @@ function gImages_nsfw:action(msg, config, matches) end print ('Überprüfe, ob das Wort auf der Blackliste steht: '..input) - if is_blacklisted(input) then + if gImages_nsfw:is_blacklisted(input) then utilities.send_reply(msg, 'Vergiss es!') return end diff --git a/miku/plugins/games.lua b/miku/plugins/games.lua index 987250a..4f27564 100644 --- a/miku/plugins/games.lua +++ b/miku/plugins/games.lua @@ -75,7 +75,7 @@ function games:send_game_data(game_id, self, msg) if xml.find(result, 'Genres') then local genres = xml.find(result, 'Genres') - local genre_count = tablelength(genres)-1 + local genre_count = #genres-1 if genre_count == 1 then genre = '\nGenre: '..genres[1][1] else diff --git a/miku/plugins/github_feed.lua b/miku/plugins/github_feed.lua index 0adbef2..485943e 100644 --- a/miku/plugins/github_feed.lua +++ b/miku/plugins/github_feed.lua @@ -180,7 +180,7 @@ function gh_feed:action(msg, config, matches) -- For channels if matches[1] == 'sub' and matches[2] and matches[3] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -194,7 +194,7 @@ function gh_feed:action(msg, config, matches) utilities.send_reply(msg, output, true) return elseif matches[1] == 'del' and matches[2] and matches[3] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -227,7 +227,7 @@ function gh_feed:action(msg, config, matches) end if matches[1] == 'sub' and matches[2] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -235,7 +235,7 @@ function gh_feed:action(msg, config, matches) utilities.send_reply(msg, output, true) return elseif matches[1] == 'del' and matches[2] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -247,7 +247,7 @@ function gh_feed:action(msg, config, matches) utilities.send_reply(msg, list_subs, true, keyboard) return elseif matches[1] == 'sync' then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/id.lua b/miku/plugins/id.lua index 2186a06..6eb6865 100644 --- a/miku/plugins/id.lua +++ b/miku/plugins/id.lua @@ -63,27 +63,27 @@ function id:action(msg, config, matches) end local chat_id = msg.chat.id - local user = 'Du bist @%s, auch bekannt als *%s* `[%s]`' + local user = 'Du bist @%s, auch bekannt als %s [%s]' if msg.from.username then - user = user:format(utilities.markdown_escape(msg.from.username), msg.from.name, msg.from.id) + user = user:format(utilities.html_escape(msg.from.username), msg.from.name, msg.from.id) else - user = 'Du bist *%s* `[%s]`,' + user = 'Du bist %s [%s],' user = user:format(msg.from.name, msg.from.id) end - local group = '@%s, auch bekannt als *%s* `[%s]`.' + local group = '@%s, auch bekannt als %s [%s].' if msg.chat.type == 'private' then - group = group:format(utilities.markdown_escape(self.info.username), self.info.first_name, self.info.id) + group = group:format(utilities.html_escape(self.info.username), self.info.first_name, self.info.id) elseif msg.chat.username then - group = group:format(utilities.markdown_escape(msg.chat.username), msg.chat.title, chat_id) + group = group:format(utilities.html_escape(msg.chat.username), msg.chat.title, chat_id) else - group = '*%s* `[%s]`.' + group = '%s [%s].' group = group:format(msg.chat.title, chat_id) end local output = user .. ', und du bist in der Gruppe ' .. group - utilities.send_message(msg.chat.id, output, true, msg.message_id, true) + utilities.send_message(msg.chat.id, output, true, msg.message_id, 'HTML') elseif matches[1] == "chat" then if msg.chat.type ~= 'group' and msg.chat.type ~= 'supergroup' then utilities.send_reply(msg, 'Das hier ist keine Gruppe!') @@ -115,21 +115,21 @@ function id:action(msg, config, matches) local result = id:get_member_count(msg, chat_id) local member_count = result.result if member_count == 1 then - member_count = 'ist *1 Mitglied' + member_count = 'ist 1 Mitglied' else - member_count = 'sind *'..member_count..' Mitglieder' + member_count = 'sind '..member_count..' Mitglieder' end - local text = 'IDs für *'..chat_name..'* `['..chat_id..']`\nHier '..member_count..':*\n---------\n' + local text = 'IDs für '..chat_name..' ['..chat_id..']\nHier '..member_count..':\n---------\n' for k,user in pairs(users_info) do if table.contains(admins, tostring(user.id)) then - text = text..'*'..user.name..'* `['..user.id..']` _Administrator_\n' + text = text..''..user.name..' ['..user.id..'] Administrator\n' elseif tostring(creator_id) == user.id then - text = text..'*'..user.name..'* `['..user.id..']` _Gründer_\n' + text = text..''..user.name..' ['..user.id..'] Gründer\n' else - text = text..'*'..user.name..'* `['..user.id..']`\n' + text = text..''..user.name..' ['..user.id..']\n' end end - utilities.send_reply(msg, text..'_(Bots sind nicht gelistet)_', true) + utilities.send_reply(msg, text..'(Bots sind nicht gelistet)', 'HTML') end end diff --git a/miku/plugins/imgblacklist.lua b/miku/plugins/imgblacklist.lua index 8ee6902..689bced 100644 --- a/miku/plugins/imgblacklist.lua +++ b/miku/plugins/imgblacklist.lua @@ -49,7 +49,7 @@ function imgblacklist:remove_blacklist(word) end function imgblacklist:action(msg, config, matches) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/luarun.lua b/miku/plugins/luarun.lua index fc714b7..e6dd347 100644 --- a/miku/plugins/luarun.lua +++ b/miku/plugins/luarun.lua @@ -27,7 +27,7 @@ end function luarun:action(msg, config) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then return true end diff --git a/miku/plugins/lyrics.lua b/miku/plugins/lyrics.lua index be3ccee..899febf 100644 --- a/miku/plugins/lyrics.lua +++ b/miku/plugins/lyrics.lua @@ -16,7 +16,7 @@ lyrics.command = 'lyrics ' function lyrics:getLyrics(text) local apikey = cred_data.lyricsnmusic_apikey - local q = url_encode(text) + local q = URL.encode(text) local b = http.request("http://api.lyricsnmusic.com/songs?api_key="..apikey.."&q=" .. q) response = json.decode(b) local reply = "" diff --git a/miku/plugins/media.lua b/miku/plugins/media.lua index d28a919..91d2ec9 100644 --- a/miku/plugins/media.lua +++ b/miku/plugins/media.lua @@ -1,5 +1,7 @@ local media = {} +local mime = (loadfile "./miku/mimetype.lua")() + media.triggers = { "(https?://[%w-_%.%?%.:,/%+=&%[%]]+%.(gif))$", "(https?://[%w-_%.%?%.:,/%+=&%[%]]+%.(mp4))$", diff --git a/miku/plugins/plugins.lua b/miku/plugins/plugins.lua index cd61635..1f7953a 100644 --- a/miku/plugins/plugins.lua +++ b/miku/plugins/plugins.lua @@ -24,6 +24,18 @@ end plugin_manager.command = 'plugins ' +-- Returns at table of lua files inside plugins +function plugin_manager:plugins_names() + local files = {} + for k, v in pairs(scandir("miku/plugins")) do + -- Ends with .lua + if (v:match(".lua$")) then + files[#files+1] = v + end + end + return files +end + -- Returns the key (index) in the config.enabled_plugins table function plugin_manager:plugin_enabled(name, chat) for k,v in pairs(enabled_plugins) do @@ -37,7 +49,7 @@ end -- Returns true if file exists in plugins folder function plugin_manager:plugin_exists(name) - for k,v in pairs(plugins_names()) do + for k,v in pairs(plugin_manager:plugins_names()) do if name..'.lua' == v then return true end @@ -47,7 +59,7 @@ end function plugin_manager:list_plugins() local text = '' - for k, v in pairs(plugins_names()) do + for k, v in pairs(plugin_manager:plugins_names()) do -- ✔ enabled, ❌ disabled local status = '❌' -- Check if is enabled @@ -161,7 +173,7 @@ function plugin_manager:reenable_plugin_on_chat(msg, plugin) end function plugin_manager:action(msg, config, matches) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/pocket.lua b/miku/plugins/pocket.lua index ee1ffe8..21e9190 100644 --- a/miku/plugins/pocket.lua +++ b/miku/plugins/pocket.lua @@ -74,6 +74,7 @@ function pocket:add_pocket_item(access_token, url) local code = result.item.response_code local text = title..' ('..given_url..') hinzugefügt!' + if not code then return text end if code ~= "200" and code ~= "0" then text = text..'\nAber die Seite liefert Fehler '..code..' zurück.' end return text end diff --git a/miku/plugins/quotes.lua b/miku/plugins/quotes.lua index c2c1155..1ec4cd0 100644 --- a/miku/plugins/quotes.lua +++ b/miku/plugins/quotes.lua @@ -21,10 +21,6 @@ end quotes.command = 'quote' function quotes:save_quote(msg) - if msg.text:sub(11):isempty() then - return "Benutzung: /addquote [Zitat]" - end - local quote = msg.text:sub(11) local hash = get_redis_hash(msg, 'quotes') print('Saving quote to redis set '..hash) @@ -33,10 +29,6 @@ function quotes:save_quote(msg) end function quotes:delete_quote(msg) - if msg.text:sub(11):isempty() then - return "Benutzung: /delquote [Zitat]" - end - local quote = msg.text:sub(11) local hash = get_redis_hash(msg, 'quotes') print('Deleting quote from redis set '..hash) diff --git a/miku/plugins/rss.lua b/miku/plugins/rss.lua index fe97475..6f8c635 100644 --- a/miku/plugins/rss.lua +++ b/miku/plugins/rss.lua @@ -224,7 +224,7 @@ function rss:action(msg, config, matches) -- For channels if matches[1] == 'sub' and matches[2] and matches[3] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -238,7 +238,7 @@ function rss:action(msg, config, matches) utilities.send_reply(msg, output, 'HTML') return elseif matches[1] == 'del' and matches[2] and matches[3] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -271,7 +271,7 @@ function rss:action(msg, config, matches) end if matches[1] == 'sub' and matches[2] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -279,7 +279,7 @@ function rss:action(msg, config, matches) utilities.send_reply(msg, output, 'HTML') return elseif matches[1] == 'del' and matches[2] then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -291,7 +291,7 @@ function rss:action(msg, config, matches) utilities.send_reply(msg, list_subs, 'HTML', keyboard) return elseif matches[1] == 'sync' then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/plugins/site_header.lua b/miku/plugins/site_header.lua index fbd7222..afc0d3e 100644 --- a/miku/plugins/site_header.lua +++ b/miku/plugins/site_header.lua @@ -8,7 +8,7 @@ function site_header:init(config) end function site_header:action(msg, config, matches) - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) end diff --git a/miku/plugins/stats.lua b/miku/plugins/stats.lua index 27570ee..c75202a 100644 --- a/miku/plugins/stats.lua +++ b/miku/plugins/stats.lua @@ -136,7 +136,7 @@ function stats:action(msg, config, matches) end if matches[2] == "chat" then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return else diff --git a/miku/plugins/tagesschau.lua b/miku/plugins/tagesschau.lua index 1c74e42..2eb61d6 100644 --- a/miku/plugins/tagesschau.lua +++ b/miku/plugins/tagesschau.lua @@ -16,10 +16,10 @@ end function tagesschau:get_tagesschau_article(article) local url = BASE_URL..'/'..article..'.json' - local res,code = https.request(url) - local data = json.decode(res) + local res, code = https.request(url) if code == 404 then return "Artikel nicht gefunden!" end if code ~= 200 then return "HTTP-Fehler" end + local data = json.decode(res) if not data then return "HTTP-Fehler" end if data.type ~= "story" then print('Typ "'..data.type..'" wird nicht unterstützt') diff --git a/miku/plugins/twitter_send.lua b/miku/plugins/twitter_send.lua index 18269eb..e4812f9 100644 --- a/miku/plugins/twitter_send.lua +++ b/miku/plugins/twitter_send.lua @@ -248,7 +248,7 @@ end function twitter_send:action(msg, config, matches) if matches[1] == "twwhitelist add" then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return else @@ -265,7 +265,7 @@ function twitter_send:action(msg, config, matches) end if matches[1] == "twwhitelist del" then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return else @@ -288,7 +288,7 @@ function twitter_send:action(msg, config, matches) -- Thanks to the great doc at https://github.com/ignacio/LuaOAuth#a-more-involved-example if not oauth_token and not oauth_token_secret then if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return else @@ -312,7 +312,7 @@ function twitter_send:action(msg, config, matches) if matches[1] == 'auth' and matches[2] then if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end @@ -327,7 +327,7 @@ function twitter_send:action(msg, config, matches) if matches[1] == 'unauth' then if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then - if msg.from.id ~= config.admin then + if not is_sudo(msg, config) then utilities.send_reply(msg, config.errors.sudo, true) return end diff --git a/miku/utilities.lua b/miku/utilities.lua index 51068ea..ac86c86 100644 --- a/miku/utilities.lua +++ b/miku/utilities.lua @@ -28,15 +28,13 @@ socket = require('socket') URL = require('socket.url') json = require('dkjson') pcall(json.use_lpeg) -serpent = require('serpent') -redis = (loadfile './miku/redis.lua')() -mime = (loadfile './miku/mimetype.lua')() -OAuth = require 'OAuth' -helpers = require 'OAuth.helpers' -require('/miku/encoding') +serpent = require("serpent") +redis = (loadfile "./miku/redis.lua")() +OAuth = require "OAuth" +helpers = require "OAuth.helpers" -http.TIMEOUT = 7 -https.TIMEOUT = 7 +http.TIMEOUT = 10 +https.TIMEOUT = 10 -- For the sake of ease to new contributors and familiarity to old contributors, -- we'll provide a couple of aliases to real bindings here. @@ -343,38 +341,21 @@ function utilities.input_from_msg(msg) return utilities.input(msg.text) or (msg.reply_to_message and #msg.reply_to_message.text > 0 and msg.reply_to_message.text) or false end --- Calculates the length of the given string as UTF-8 characters -function utilities.utf8_len(s) - local chars = 0 - for i = 1, string.len(s) do - local b = string.byte(s, i) - if b < 128 or b >= 192 then - chars = chars + 1 - end - end - return chars -end - -- Trims whitespace from a string. function utilities.trim(str) local s = str:gsub('^%s*(.-)%s*$', '%1') return s end --- Returns true if the string is empty +-- Returns true if the string is blank/empty function string:isempty() + self = utilities.trim(self) return self == nil or self == '' end --- Returns true if the string is blank -function string:isblank() - self = self:trim() - return self:isempty() -end - function get_name(msg) local name = msg.from.first_name - if name == nil then + if not name then name = msg.from.id end return name @@ -392,10 +373,6 @@ function convert_timestamp(timestamp, date_format) return os.date(date_format, timestamp) end -function string.starts(String, Start) - return Start == string.sub(String,1,string.len(Start)) -end - -- Saves file to $HOME/tmp/. If file_name isn't provided, -- will get the text after the last "/" for filename -- and content-type for extension @@ -498,19 +475,6 @@ function utilities.build_name(first, last) end end -function utilities:resolve_username(input) - input = input:gsub('^@', '') - for _, user in pairs(self.database.users) do - if user.username and user.username:lower() == input:lower() then - local t = {} - for key, val in pairs(user) do - t[key] = val - end - return t - end - end -end - function utilities:handle_exception(err, message, log_chat) local output = string.format( '[%s]\n%s: %s\n%s\n', @@ -528,19 +492,12 @@ function utilities:handle_exception(err, message, log_chat) end --- MOVED TO DOWNLOAD_TO_FILE -function utilities.download_file(url, filename) - return download_to_file(url, filename) -end - function utilities.md_escape(text) return text:gsub('_', '\\_') :gsub('%[', '\\['):gsub('%]', '\\]') :gsub('%*', '\\*'):gsub('`', '\\`') end -utilities.markdown_escape = utilities.md_escape - function utilities.html_escape(text) return text:gsub('&', '&'):gsub('<', '<'):gsub('>', '>') end @@ -566,13 +523,6 @@ function utilities.triggers(username, cmd_pat, trigger_table) return self end -function utilities.with_http_timeout(timeout, fun) - local original = http.TIMEOUT - http.TIMEOUT = timeout - fun() - http.TIMEOUT = original -end - function utilities.enrich_user(user) user.id_str = tostring(user.id) user.name = utilities.build_name(user.first_name, user.last_name) @@ -595,11 +545,11 @@ function utilities.enrich_message(msg) if msg.forward_from then msg.forward_from = utilities.enrich_user(msg.forward_from) end - if msg.new_chat_participant then - msg.new_chat_participant = utilities.enrich_user(msg.new_chat_participant) + if msg.new_chat_member then + msg.new_chat_member = utilities.enrich_user(msg.new_chat_member) end - if msg.left_chat_participant then - msg.left_chat_participant = utilities.enrich_user(msg.left_chat_participant) + if msg.left_chat_member then + msg.left_chat_member = utilities.enrich_user(msg.left_chat_member) end return msg end @@ -633,29 +583,6 @@ function scandir(directory) return t end --- Returns at table of lua files inside plugins -function plugins_names() - local files = {} - for k, v in pairs(scandir("miku/plugins")) do - -- Ends with .lua - if (v:match(".lua$")) then - files[#files+1] = v - end - end - return files -end - --- Function name explains what it does. -function file_exists(name) - local f = io.open(name,"r") - if f ~= nil then - io.close(f) - return true - else - return false - end -end - -- Returns a table with matches or nil function match_pattern(pattern, text) if text then @@ -794,17 +721,6 @@ function get_redis_hash(msg, var) end end --- remove whitespace -function all_trim(s) - return s:match( "^%s*(.-)%s*$" ) -end - -function tablelength(T) - local count = 0 - for _ in pairs(T) do count = count + 1 end - return count -end - function round(num, idp) if idp and idp>0 then local mult = 10^idp @@ -824,6 +740,9 @@ function comma_value(amount) return formatted end +function string.starts(String,Start) + return string.sub(String,1,string.len(Start))==Start +end function string.ends(str, fin) return fin=='' or string.sub(str,-string.len(fin)) == fin @@ -1034,19 +953,6 @@ function makeHumanTime(totalseconds) end end end - -function is_blacklisted(msg) - _blacklist = redis:smembers("telegram:img_blacklist") - local var = false - for v,word in pairs(_blacklist) do - if string.find(string.lower(msg), string.lower(word)) then - print("Wort steht auf der Blacklist!") - var = true - break - end - end - return var -end function run_bash(str) local cmd = io.popen(str) @@ -1098,16 +1004,6 @@ function convertNumbers(str) return str end -function url_encode(str) - if (str) then - str = string.gsub (str, "\n", "\r\n") - str = string.gsub (str, "([^%w %-%_%.%~])", - function (c) return string.format ("%%%02X", string.byte(c)) end) - str = string.gsub (str, " ", "+") - end - return str -end - function table.contains(table, element) for _, value in pairs(table) do if value == element then @@ -1136,4 +1032,4 @@ function utilities.fix_utf8(str) end -return utilities +return utilities \ No newline at end of file