Upstream:

- self muss nicht mehr überall übergeben werden
- alle Plugins wurden angepasst

Eigene Updates:
- abort_inline_query() hinzugefügt
- Mehr Plugins zum Standard-Set hinzugefügt
- Eventuell noch etwas, was ich vergessen hab
This commit is contained in:
Andreas Bielawski 2016-08-24 15:38:29 +02:00
commit fb9d3652f3
130 changed files with 918 additions and 991 deletions

View File

@ -106,7 +106,8 @@ Einige Funktionen, die oft benötigt werden, sind in `utilites.lua` verfügbar.
## Bindings
**Diese Sektion wurde noch nicht lokalisiert.**
Calls to the Telegram bot API are performed with the `bindings.lua` file through the multipart-post library. otouto's bindings file supports all standard API methods and all arguments. Its main function, `bindings.request`, accepts four arguments: `self`, `method`, `parameters`, `file`. (At the very least, `self` should be a table containing `BASE_URL`, which is bot's API endpoint, ending with a slash, eg `https://api.telegram.org/bot123456789:ABCDEFGHIJKLMNOPQRSTUVWXYZ987654321/`.)
Calls to the Telegram bot API are performed with the `bindings.lua` file through the multipart-post library. otouto's bindings file supports all standard API methods and all arguments. Its main function, `bindings.request`, accepts three arguments: `method`, `parameters`, `file`. Before using it, initialize the bindings module with its `init` function, passing your bot token as the argument.
`method` is the name of the API method. `parameters` (optional) is a table of key/value pairs of the method's parameters to be sent with the method. `file` (super-optional) is a table of a single key/value pair, where the key is the name of the parameter and the value is the filename (if these are included in `parameters` instead, otouto will attempt to send the filename as a file ID).
@ -114,45 +115,41 @@ Additionally, any method can be called as a key in the `bindings` table (for exa
```
bindings.request(
self,
'sendMessage',
{
chat_id = 987654321,
text = 'Quick brown fox.',
reply_to_message_id = 54321,
disable_web_page_preview = false,
parse_method = 'Markdown'
}
'sendMessage',
{
chat_id = 987654321,
text = 'Quick brown fox.',
reply_to_message_id = 54321,
disable_web_page_preview = false,
parse_method = 'Markdown'
}
)
bindings.sendMessage(
self,
{
chat_id = 987654321,
text = 'Quick brown fox.',
reply_to_message_id = 54321,
disable_web_page_preview = false,
parse_method = 'Markdown'
}
)
bindings.sendMessage{
chat_id = 987654321,
text = 'Quick brown fox.',
reply_to_message_id = 54321,
disable_web_page_preview = false,
parse_method = 'Markdown'
}
```
Furthermore, `utilities.lua` provides two "shortcut" functions to mimic the behavior of otouto's old bindings: `send_message` and `send_reply`. `send_message` accepts these arguments: `self`, `chat_id`, `text`, `disable_web_page_preview`, `reply_to_message_id`, `use_markdown`. The following function call is equivalent to the two above:
```
utilities.send_message(self, 987654321, 'Quick brown fox.', false, 54321, true)
utilities.send_message(987654321, 'Quick brown fox.', false, 54321, true)
```
Uploading a file for the `sendPhoto` method would look like this:
```
bindings.sendPhoto(self, { chat_id = 987654321 }, { photo = 'rarepepe.jpg' } )
bindings.sendPhoto({ chat_id = 987654321 }, { photo = 'dankmeme.jpg' } )
```
and using `sendPhoto` with a file ID would look like this:
```
bindings.sendPhoto(self, { chat_id = 987654321, photo = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789' } )
bindings.sendPhoto{ chat_id = 987654321, photo = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789' }
```
Upon success, bindings will return the deserialized result from the API. Upon failure, it will return false and the result. In the case of a connection error, it will return two false values. If an invalid method name is given, bindings will throw an exception. This is to mimic the behavior of more conventional bindings as well as to prevent "silent errors".

View File

@ -1,10 +1,23 @@
--[[
bindings.lua (rev. 2016/05/28)
otouto's bindings for the Telegram bot API.
https://core.telegram.org/bots/api
Copyright 2016 topkecleon. Published under the AGPLv3.
bindings.lua (rev. 2016/08/20)
otouto's bindings for the Telegram bot API.
https://core.telegram.org/bots/api
See the "Bindings" section of README.md for usage information.
See the "Bindings" section of README.md for usage information.
Copyright 2016 topkecleon <drew@otou.to>
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.
]]--
local bindings = {}
@ -15,6 +28,11 @@ local JSON = require('dkjson')
local ltn12 = require('ltn12')
local MP_ENCODE = require('multipart-post').encode
function bindings.init(token)
bindings.BASE_URL = 'https://api.telegram.org/bot' .. token .. '/'
return bindings
end
-- Build and send a request to the API.
-- Expecting self, method, and parameters, where method is a string indicating
-- the API method and parameters is a key/value table of parameters with their
@ -22,7 +40,7 @@ local MP_ENCODE = require('multipart-post').encode
-- Returns the table response with success. Returns false and the table
-- response with failure. Returns false and false with a connection error.
-- To mimic old/normal behavior, it errs if used with an invalid method.
function bindings:request(method, parameters, file)
function bindings.request(method, parameters, file)
parameters = parameters or {}
for k,v in pairs(parameters) do
parameters[k] = tostring(v)
@ -49,7 +67,7 @@ function bindings:request(method, parameters, file)
local response = {}
local body, boundary = MP_ENCODE(parameters)
local success, code = HTTPS.request{
url = self.BASE_URL .. method,
url = bindings.BASE_URL .. method,
method = 'POST',
headers = {
["Content-Type"] = "multipart/form-data; boundary=" .. boundary,
@ -76,8 +94,8 @@ function bindings:request(method, parameters, file)
end
function bindings.gen(_, key)
return function(self, params, file)
return bindings.request(self, key, params, file)
return function(params, file)
return bindings.request(key, params, file)
end
end
setmetatable(bindings, { __index = bindings.gen })

View File

@ -1,23 +1,36 @@
--[[
bot.lua
The heart and sole of otouto, ie the init and main loop.
Copyright 2016 topkecleon <drew@otou.to>
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.
]]--
local bot = {}
bindings = require('otouto.bindings')
utilities = require('otouto.utilities')
bot.version = '2.2.6.3'
bot.version = '2.2.7'
function bot:init(config) -- The function run when the bot is started or reloaded.
bindings = require('otouto.bindings').init(config.bot_api_key)
utilities = require('otouto.utilities')
cred_data = load_cred()
assert(
config.bot_api_key,
'You did not set your bot token in the config!'
)
self.BASE_URL = 'https://api.telegram.org/bot' .. config.bot_api_key .. '/'
-- Fetch bot information. Try until it succeeds.
repeat
print('Fetching bot information...')
self.info = bindings.getMe(self)
self.info = bindings.getMe()
until self.info
self.info = self.info.result
@ -87,7 +100,7 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba
-- vardump(callback)
if msg.date < os.time() - 1800 then -- Do not process old messages.
utilities.answer_callback_query(self, callback, 'Nachricht älter als eine halbe Stunde, bitte sende den Befehl selbst noch einmal.', true)
utilities.answer_callback_query(callback, 'Nachricht älter als eine halbe Stunde, bitte sende den Befehl selbst noch einmal.', true)
return
end
@ -99,14 +112,14 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba
local user_id = callback.from.id
local chat_id = msg.chat.id
if redis:get('blocked:'..user_id) then
utilities.answer_callback_query(self, callback, 'Du darfst den Bot nicht nutzen!', true)
utilities.answer_callback_query(callback, 'Du darfst den Bot nicht nutzen!', true)
return
end
-- Check if user is banned
local banned = redis:get('banned:'..chat_id..':'..user_id)
if banned then
utilities.answer_callback_query(self, callback, 'Du darfst den Bot nicht nutzen!', true)
utilities.answer_callback_query(callback, 'Du darfst den Bot nicht nutzen!', true)
return
end
@ -119,11 +132,11 @@ function bot:on_callback_receive(callback, msg, config) -- whenever a new callba
if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
local allowed = redis:get('whitelist:chat#id'.. chat_id)
if not allowed then
utilities.answer_callback_query(self, callback, 'Du darfst den Bot nicht nutzen!', true)
utilities.answer_callback_query(callback, 'Du darfst den Bot nicht nutzen!', true)
return
end
else
utilities.answer_callback_query(self, callback, 'Du darfst den Bot nicht nutzen!', true)
utilities.answer_callback_query(callback, 'Du darfst den Bot nicht nutzen!', true)
return
end
end
@ -156,13 +169,13 @@ function bot:process_inline_query(inline_query, config) -- When an inline query
-- but he WON'T be able to make new requests.
local user_id = inline_query.from.id
if redis:get('blocked:'..user_id) then
utilities.answer_inline_query(self, inline_query, nil, 0, true)
abort_inline_query(inline_query)
return
end
if not config.enable_inline_for_everyone then
local is_whitelisted = redis:get('whitelist:user#id'..inline_query.from.id)
if not is_whitelisted then utilities.answer_inline_query(self, inline_query, nil, 0, true) return end
if not is_whitelisted then abort_inline_query(inline_query) return end
end
if inline_query.query:match('"') then
@ -175,7 +188,7 @@ function bot:process_inline_query(inline_query, config) -- When an inline query
end
-- Stop the spinning circle
utilities.answer_inline_query(self, inline_query, nil, 0, true)
abort_inline_query(inline_query)
end
function bot:run(config)
@ -183,7 +196,7 @@ function bot:run(config)
while self.is_started do
-- Update loop
local res = bindings.getUpdates(self, { timeout = 20, offset = self.last_update+1 } )
local res = bindings.getUpdates{ timeout = 20, offset = self.last_update+1 }
if res then
-- Iterate over every new message.
for n=1, #res.result do
@ -208,9 +221,9 @@ function bot:run(config)
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.
local result, err = pcall(function() v.cron(self, config) end)
local result, err = pcall(function() v.cron(config) end)
if not result then
utilities.handle_exception(self, err, 'CRON: ' .. n, config)
utilities.handle_exception(err, 'CRON: ' .. n, config.log_chat)
end
end
end
@ -232,7 +245,8 @@ function pre_process_msg(self, msg, config)
local plugin = self.plugins[n]
if plugin.pre_process and msg then
-- print('Preprocess '..plugin.name) -- remove comment to restore old behaviour
new_msg = plugin:pre_process(msg, self, config)
new_msg = plugin:pre_process(msg, config)
if not new_msg then return end -- Message was deleted
end
end
return new_msg
@ -274,7 +288,7 @@ function match_plugins(self, msg, config, plugin)
end
end)
if not success then
utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config)
utilities.handle_exception(self, result, msg.from.id .. ': ' .. msg.text, config.log_chat)
return
end
-- if one pattern matches, end
@ -310,12 +324,17 @@ function create_plugin_set()
'control',
'about',
'id',
'post_photo',
'images',
'media',
'service_migrate_to_supergroup',
'creds',
'echo',
'currency',
'banhammer',
'channels',
'plugins',
'settings',
'help'
}
print ('enabling a few plugins - saving to redis set telegram:enabled_plugins')

View File

@ -28,7 +28,7 @@ end
function ninegag:inline_callback(inline_query, config)
local res, code = http.request(url)
if code ~= 200 then utilities.answer_inline_query(self, inline_query) return end
if code ~= 200 then abort_inline_query(inline_query) return end
local gag = json.decode(res)
local results = '['
@ -42,19 +42,19 @@ function ninegag:inline_callback(inline_query, config)
end
end
local results = results..']'
utilities.answer_inline_query(self, inline_query, results, 300)
utilities.answer_inline_query(inline_query, results, 300)
end
function ninegag:action(msg, config)
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local url, title, post_url = ninegag:get_9GAG()
if not url then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply(msg, config.errors.connection)
return
end
local file = download_to_file(url)
utilities.send_photo(self, msg.chat.id, file, title, msg.message_id, '{"inline_keyboard":[[{"text":"Post aufrufen","url":"'..post_url..'"}]]}')
utilities.send_photo(msg.chat.id, file, title, msg.message_id, '{"inline_keyboard":[[{"text":"Post aufrufen","url":"'..post_url..'"}]]}')
end
return ninegag

View File

@ -14,7 +14,7 @@ function about:init(config)
end
function about:action(msg, config)
utilities.send_message(self, msg.chat.id, about.text, true, nil, true)
utilities.send_message(msg.chat.id, about.text, true, nil, true)
end
return about

View File

@ -27,11 +27,11 @@ function adfly:inline_callback(inline_query, config, matches)
url = redis:get(hash)
end
if not url then utilities.answer_inline_query(self, inline_query) return end
if url == 'NOTFOUND' then utilities.answer_inline_query(self, inline_query) return end
if not url then abort_inline_query(inline_query) return end
if url == 'NOTFOUND' then abort_inline_query(inline_query) return end
local results = '[{"type":"article","id":"1","title":"Verlängerte URL","description":"'..url..'","url":"'..url..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/generic/internet.jpg","thumb_width":165,"thumb_height":150,"hide_url":true,"input_message_content":{"message_text":"'..url..'"}}]'
utilities.answer_inline_query(self, inline_query, results, 3600, true)
utilities.answer_inline_query(inline_query, results, 3600, true)
end
function adfly:action(msg, config, matches)
@ -40,17 +40,17 @@ function adfly:action(msg, config, matches)
if redis:exists(hash) == false then
local expanded_url = adfly:expand_adfly_link(adfly_code)
if not expanded_url then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply(msg, config.errors.connection)
return
end
if expanded_url == 'NOTFOUND' then
utilities.send_reply(self, msg, 'Fehler: Keine Adf.ly-URL gefunden!')
utilities.send_reply(msg, 'Fehler: Keine Adf.ly-URL gefunden!')
return
end
utilities.send_reply(self, msg, expanded_url)
utilities.send_reply(msg, expanded_url)
else
local data = redis:get(hash)
utilities.send_reply(self, msg, data)
utilities.send_reply(msg, data)
end
end

View File

@ -58,10 +58,10 @@ function afk:switch_afk(user_name, user_id, chat_id, timestamp, text)
end
end
function afk:pre_process(msg, self)
function afk:pre_process(msg)
if msg.chat.type == "private" then
-- Ignore
return
return msg
end
local user_name = get_name(msg)
@ -84,15 +84,15 @@ function afk:pre_process(msg, self)
if afk_text then
redis:hset(hash, 'afk_text', false)
if show_afk_keyboard == 'true' then
utilities.send_reply(self, msg, user_name..' ist wieder da (war: <b>'..afk_text..'</b> für '..duration..')!', 'HTML', '{"hide_keyboard":true,"selective":true}')
utilities.send_reply(msg, user_name..' ist wieder da (war: <b>'..afk_text..'</b> für '..duration..')!', 'HTML', '{"hide_keyboard":true,"selective":true}')
else
utilities.send_message(self, chat_id, user_name..' ist wieder da (war: <b>'..afk_text..'</b> für '..duration..')!', true, nil, 'HTML')
utilities.send_message(chat_id, user_name..' ist wieder da (war: <b>'..afk_text..'</b> für '..duration..')!', true, nil, 'HTML')
end
else
if show_afk_keyboard == 'true' then
utilities.send_reply(self, msg, user_name..' ist wieder da (war '..duration..' weg)!', nil, '{"hide_keyboard":true,"selective":true}')
utilities.send_reply(msg, user_name..' ist wieder da (war '..duration..' weg)!', nil, '{"hide_keyboard":true,"selective":true}')
else
utilities.send_message(self, chat_id, user_name..' ist wieder da (war '..duration..' weg)!')
utilities.send_message(chat_id, user_name..' ist wieder da (war '..duration..' weg)!')
end
end
end
@ -102,7 +102,7 @@ end
function afk:action(msg, config, matches)
if msg.chat.type == "private" then
utilities.send_reply(self, msg, "Mir ist's egal, ob du AFK bist ._.")
utilities.send_reply(msg, "Mir ist's egal, ob du AFK bist ._.")
return
end
@ -118,7 +118,7 @@ function afk:action(msg, config, matches)
keyboard = nil
end
utilities.send_reply(self, msg, afk:switch_afk(user_name, user_id, chat_id, timestamp, matches[2]), false, keyboard)
utilities.send_reply(msg, afk:switch_afk(user_name, user_id, chat_id, timestamp, matches[2]), false, keyboard)
end
return afk

View File

@ -96,15 +96,15 @@ function app_store:action(msg, config, matches)
local data = app_store:get_appstore_data()
if data == nil then print('Das Appstore-Plugin unterstützt nur Apps!') end
if data == 'HTTP-FEHLER' or data == 'NOTFOUND' then
utilities.send_reply(self, msg, '<b>App nicht gefunden!</b>', 'HTML')
utilities.send_reply(msg, '<b>App nicht gefunden!</b>', 'HTML')
return
else
local output, image_url = app_store:send_appstore_data(data)
utilities.send_reply(self, msg, output, 'HTML')
utilities.send_reply(msg, output, 'HTML')
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
end
end

View File

@ -59,8 +59,8 @@ function bImages:inline_callback(inline_query, config, matches)
results = bImages:getImages(query)
end
if not results then utilities.answer_inline_query(self, inline_query) return end
utilities.answer_inline_query(self, inline_query, results, 3600)
if not results then abort_inline_query(inline_query) return end
utilities.answer_inline_query(inline_query, results, 3600)
end
function bImages:action()

View File

@ -40,11 +40,11 @@ function banhammer:init(config)
Alternativ kann auch auf die Nachricht des Users geantwortet werden, die Befehle sind dnn die obrigen ohne `user` bzw.`delete`.]]
end
function banhammer:kick_user(user_id, chat_id, self, onlykick)
function banhammer:kick_user(user_id, chat_id, onlykick)
if user_id == tostring(our_id) then
return "Ich werde mich nicht selbst kicken!"
else
local request = bindings.request(self, 'kickChatMember', {
local request = bindings.request('kickChatMember', {
chat_id = chat_id,
user_id = user_id
} )
@ -57,7 +57,7 @@ function banhammer:kick_user(user_id, chat_id, self, onlykick)
end
end
function banhammer:ban_user(user_id, chat_id, self)
function banhammer:ban_user(user_id, chat_id)
if user_id == tostring(our_id) then
return "Ich werde mich nicht selbst kicken!"
else
@ -65,15 +65,15 @@ function banhammer:ban_user(user_id, chat_id, self)
local hash = 'banned:'..chat_id..':'..user_id
redis:set(hash, true)
-- Kick from chat
return banhammer:kick_user(user_id, chat_id, self)
return banhammer:kick_user(user_id, chat_id)
end
end
function banhammer:unban_user(user_id, chat_id, self, chat_type)
function banhammer:unban_user(user_id, chat_id, chat_type)
local hash = 'banned:'..chat_id..':'..user_id
redis:del(hash)
if chat_type == 'supergroup' then
bindings.request(self, 'unbanChatMember', {
bindings.request('unbanChatMember', {
chat_id = chat_id,
user_id = user_id
} )
@ -99,7 +99,7 @@ function banhammer:is_chat_whitelisted(id)
return white
end
function banhammer:pre_process(msg, self, config)
function banhammer:pre_process(msg, config)
-- SERVICE MESSAGE
if msg.new_chat_member then
local user_id = msg.new_chat_member.id
@ -107,7 +107,7 @@ function banhammer:pre_process(msg, self, config)
local banned = banhammer:is_banned(user_id, msg.chat.id)
if banned then
print('User is banned!')
banhammer:kick_user(user_id, msg.chat.id, self, true)
banhammer:kick_user(user_id, msg.chat.id, true)
end
-- No further checks
return msg
@ -120,7 +120,7 @@ function banhammer:pre_process(msg, self, config)
local banned = banhammer:is_banned(user_id, chat_id)
if banned then
print('Banned user talking!')
banhammer:ban_user(user_id, chat_id, self)
banhammer:ban_user(user_id, chat_id)
return
end
end
@ -156,7 +156,7 @@ function banhammer:pre_process(msg, self, config)
end
else
if not has_been_warned then
utilities.send_reply(self, msg, "Dies ist ein privater Bot, der erst nach einer Freischaltung benutzt werden kann.\nThis is a private bot, which can only be after an approval.")
utilities.send_reply(msg, "Dies ist ein privater Bot, der erst nach einer Freischaltung benutzt werden kann.\nThis is a private bot, which can only be after an approval.")
redis:hset('user:'..user_id, 'has_been_warned', true)
else
print('User has already been warned!')
@ -182,7 +182,7 @@ function banhammer:action(msg, config, matches)
if matches[1] == 'leave' then
if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
bindings.request(self, 'leaveChat', {
bindings.request('leaveChat', {
chat_id = msg.chat.id
} )
return
@ -207,17 +207,17 @@ function banhammer:action(msg, config, matches)
if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
if matches[2] == 'user' or not matches[2] then
local text = banhammer:ban_user(user_id, chat_id, self)
utilities.send_reply(self, msg, text)
local text = banhammer:ban_user(user_id, chat_id)
utilities.send_reply(msg, text)
return
end
if matches[2] == 'delete' then
local text = banhammer:unban_user(user_id, chat_id, self, msg.chat.type)
utilities.send_reply(self, msg, text)
local text = banhammer:unban_user(user_id, chat_id, msg.chat.type)
utilities.send_reply(msg, text)
return
end
else
utilities.send_reply(self, msg, 'Das ist keine Chat-Gruppe')
utilities.send_reply(msg, 'Das ist keine Chat-Gruppe')
return
end
end
@ -235,10 +235,10 @@ function banhammer:action(msg, config, matches)
user_id = msg.reply_to_message.from.id
end
end
banhammer:kick_user(user_id, msg.chat.id, self, true)
banhammer:kick_user(user_id, msg.chat.id, true)
return
else
utilities.send_reply(self, msg, 'Das ist keine Chat-Gruppe')
utilities.send_reply(msg, 'Das ist keine Chat-Gruppe')
return
end
end
@ -247,14 +247,14 @@ function banhammer:action(msg, config, matches)
if matches[2] == 'enable' then
local hash = 'whitelist:enabled'
redis:set(hash, true)
utilities.send_reply(self, msg, 'Whitelist aktiviert')
utilities.send_reply(msg, 'Whitelist aktiviert')
return
end
if matches[2] == 'disable' then
local hash = 'whitelist:enabled'
redis:del(hash)
utilities.send_reply(self, msg, 'Whitelist deaktiviert')
utilities.send_reply(msg, 'Whitelist deaktiviert')
return
end
@ -269,7 +269,7 @@ function banhammer:action(msg, config, matches)
end
local hash = 'whitelist:user#id'..user_id
redis:set(hash, true)
utilities.send_reply(self, msg, 'User '..user_id..' whitelisted')
utilities.send_reply(msg, 'User '..user_id..' whitelisted')
return
end
@ -286,14 +286,14 @@ function banhammer:action(msg, config, matches)
end
local hash = 'whitelist:user#id'..user_id
redis:del(hash)
utilities.send_reply(self, msg, 'User '..user_id..' von der Whitelist entfernt!')
utilities.send_reply(msg, 'User '..user_id..' von der Whitelist entfernt!')
return
end
if matches[2] == 'user' then
local hash = 'whitelist:user#id'..matches[3]
redis:set(hash, true)
utilities.send_reply(self, msg, 'User '..matches[3]..' whitelisted')
utilities.send_reply(msg, 'User '..matches[3]..' whitelisted')
return
end
@ -301,10 +301,10 @@ function banhammer:action(msg, config, matches)
if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
local hash = 'whitelist:chat#id'..msg.chat.id
redis:set(hash, true)
utilities.send_reply(self, msg, 'Chat '..msg.chat.id..' whitelisted')
utilities.send_reply(msg, 'Chat '..msg.chat.id..' whitelisted')
return
else
utilities.send_reply(self, msg, 'Das ist keine Chat-Gruppe!')
utilities.send_reply(msg, 'Das ist keine Chat-Gruppe!')
return
end
end
@ -312,7 +312,7 @@ function banhammer:action(msg, config, matches)
if matches[2] == 'delete' and matches[3] == 'user' then
local hash = 'whitelist:user#id'..matches[4]
redis:del(hash)
utilities.send_reply(self, msg, 'User '..matches[4]..' von der Whitelist entfernt!')
utilities.send_reply(msg, 'User '..matches[4]..' von der Whitelist entfernt!')
return
end
@ -320,10 +320,10 @@ function banhammer:action(msg, config, matches)
if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
local hash = 'whitelist:chat#id'..msg.chat.id
redis:del(hash)
utilities.send_reply(self, msg, 'Chat '..msg.chat.id..' von der Whitelist entfernt')
utilities.send_reply(msg, 'Chat '..msg.chat.id..' von der Whitelist entfernt')
return
else
utilities.send_reply(self, msg, 'Das ist keine Chat-Gruppe!')
utilities.send_reply(msg, 'Das ist keine Chat-Gruppe!')
return
end
end
@ -334,14 +334,14 @@ function banhammer:action(msg, config, matches)
if matches[2] == 'user' and matches[3] then
local hash = 'blocked:'..matches[3]
redis:set(hash, true)
utilities.send_reply(self, msg, 'User '..matches[3]..' darf den Bot nun nicht mehr nutzen.')
utilities.send_reply(msg, 'User '..matches[3]..' darf den Bot nun nicht mehr nutzen.')
return
end
if matches[2] == 'delete' and matches[3] then
local hash = 'blocked:'..matches[3]
redis:del(hash)
utilities.send_reply(self, msg, 'User '..matches[3]..' darf den Bot wieder nutzen.')
utilities.send_reply(msg, 'User '..matches[3]..' darf den Bot wieder nutzen.')
return
end
@ -358,7 +358,7 @@ function banhammer:action(msg, config, matches)
end
local hash = 'blocked:'..user_id
redis:set(hash, true)
utilities.send_reply(self, msg, 'User '..user_id..' darf den Bot nun nicht mehr nutzen.')
utilities.send_reply(msg, 'User '..user_id..' darf den Bot nun nicht mehr nutzen.')
return
end
@ -375,7 +375,7 @@ function banhammer:action(msg, config, matches)
end
local hash = 'blocked:'..user_id
redis:del(hash)
utilities.send_reply(self, msg, 'User '..user_id..' darf den Bot wieder nutzen.')
utilities.send_reply(msg, 'User '..user_id..' darf den Bot wieder nutzen.')
return
end

View File

@ -38,10 +38,10 @@ function bitly:inline_callback(inline_query, config, matches)
url = data.long_url
end
if not url then utilities.answer_inline_query(self, inline_query) return end
if not url then abort_inline_query(inline_query) return end
local results = '[{"type":"article","id":"2","title":"Verlängerte URL","description":"'..url..'","url":"'..url..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/generic/internet.jpg","thumb_width":165,"thumb_height":150,"hide_url":true,"input_message_content":{"message_text":"'..url..'"}}]'
utilities.answer_inline_query(self, inline_query, results, 3600)
utilities.answer_inline_query(inline_query, results, 3600)
end
function bitly:action(msg, config, matches)
@ -50,14 +50,14 @@ function bitly:action(msg, config, matches)
if redis:exists(hash) == false then
local longurl = bitly:expand_bitly_link(shorturl)
if not longurl then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply( msg, config.errors.connection)
return
end
utilities.send_reply(self, msg, longurl)
utilities.send_reply(msg, longurl)
return
else
local data = redis:hgetall(hash)
utilities.send_reply(self, msg, data.long_url)
utilities.send_reply(msg, data.long_url)
return
end
end

View File

@ -83,38 +83,38 @@ function bitly_create:action(msg, config, matches)
bitly_access_token = redis:hget(hash, 'bitly')
if matches[1] == 'auth' and matches[2] then
utilities.send_reply(self, msg, bitly_create:get_bitly_access_token(hash, matches[2]), true)
utilities.send_reply(msg, bitly_create:get_bitly_access_token(hash, matches[2]), true)
local message_id = redis:hget(hash, 'bitly_login_msg')
utilities.edit_message(self, msg.chat.id, message_id, '*Anmeldung abgeschlossen!*', true, true)
utilities.edit_message(msg.chat.id, message_id, '*Anmeldung abgeschlossen!*', true, true)
redis:hdel(hash, 'bitly_login_msg')
return
end
if matches[1] == 'auth' then
local result = utilities.send_reply(self, msg, '*Bitte logge dich ein und folge den Anweisungen.*', true, '{"inline_keyboard":[[{"text":"Bei Bitly anmelden","url":"https://bitly.com/oauth/authorize?client_id='..client_id..'&redirect_uri='..redirect_uri..'&state='..self.info.username..'"}]]}')
local result = utilities.send_reply(msg, '*Bitte logge dich ein und folge den Anweisungen.*', true, '{"inline_keyboard":[[{"text":"Bei Bitly anmelden","url":"https://bitly.com/oauth/authorize?client_id='..client_id..'&redirect_uri='..redirect_uri..'&state='..self.info.username..'"}]]}')
redis:hset(hash, 'bitly_login_msg', result.result.message_id)
return
end
if matches[1] == 'unauth' and bitly_access_token then
redis:hdel(hash, 'bitly')
utilities.send_reply(self, msg, '*Erfolgreich ausgeloggt!* Du kannst den Zugriff [in deinen Kontoeinstellungen](https://bitly.com/a/settings/connected) endgültig entziehen.', true)
utilities.send_reply(msg, '*Erfolgreich ausgeloggt!* Du kannst den Zugriff [in deinen Kontoeinstellungen](https://bitly.com/a/settings/connected) endgültig entziehen.', true)
return
elseif matches[1] == 'unauth' and not bitly_access_token then
utilities.send_reply(self, msg, 'Wie willst du dich ausloggen, wenn du gar nicht eingeloggt bist?', true)
utilities.send_reply(msg, 'Wie willst du dich ausloggen, wenn du gar nicht eingeloggt bist?', true)
return
end
if matches[1] == 'me' and bitly_access_token then
local text = bitly_create:get_bitly_user_info(bitly_access_token)
if text then
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
return
else
return
end
elseif matches[1] == 'me' and not bitly_access_token then
utilities.send_reply(self, msg, 'Du bist nicht eingeloggt! Logge dich ein mit\n/short auth', true)
utilities.send_reply(msg, 'Du bist nicht eingeloggt! Logge dich ein mit\n/short auth', true)
return
end
@ -130,7 +130,7 @@ function bitly_create:action(msg, config, matches)
long_url = url_encode(matches[2])
domain = matches[1]
end
utilities.send_reply(self, msg, bitly_create:create_bitlink(long_url, domain, bitly_access_token))
utilities.send_reply(msg, bitly_create:create_bitlink(long_url, domain, bitly_access_token))
return
end

View File

@ -35,11 +35,11 @@ function br:action(msg, config, matches)
local article = URL.escape(matches[1])
local text, image_url = br:get_br_article(article)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url, 'br_teaser.jpg')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
end
return br

View File

@ -28,7 +28,7 @@ end
function btc:action(msg, config, matches)
utilities.send_reply(self, msg, btc:getBTCX(cur), true)
utilities.send_reply(msg, btc:getBTCX(cur), true)
end
return btc

View File

@ -29,7 +29,7 @@ function calc:mathjs(exp)
end
function calc:action(msg, config, matches)
utilities.send_reply(self, msg, calc:mathjs(matches[1]))
utilities.send_reply(msg, calc:mathjs(matches[1]))
end
return calc

View File

@ -56,18 +56,18 @@ function cats:inline_callback(inline_query, config, matches)
end
end
local results = results..']'
utilities.answer_inline_query(self, inline_query, results, 30)
utilities.answer_inline_query(inline_query, results, 30)
end
function cats:action(msg, config)
if matches[1] == 'gif' then
local url = 'http://thecatapi.com/api/images/get?type=gif&apikey='..apikey
local file = download_to_file(url, 'miau.gif')
utilities.send_document(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_document(msg.chat.id, file, nil, msg.message_id)
else
local url = 'http://thecatapi.com/api/images/get?type=jpg,png&apikey='..apikey
local file = download_to_file(url, 'miau.png')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
end

View File

@ -22,7 +22,7 @@ function channel:action(msg, config)
local input = utilities.input(msg.text)
local output
local chat_id = '@'..matches[1]
local admin_list, gca_results = utilities.get_chat_administrators(self, chat_id)
local admin_list, gca_results = utilities.get_chat_administrators(chat_id)
if admin_list then
local is_admin = false
@ -39,17 +39,17 @@ function channel:action(msg, config)
-- this plugin will also be ready :P
-- Also, URL buttons work!? Maybe beta?
if reply_markup:match('"callback_data":"') then
utilities.send_reply(self, msg, 'callback_data ist in Buttons nicht erlaubt.')
utilities.send_reply(msg, 'callback_data ist in Buttons nicht erlaubt.')
return
elseif reply_markup:match('"switch_inline_query":"') then
utilities.send_reply(self, msg, 'switch_inline_query ist in Buttons nicht erlaubt.')
utilities.send_reply(msg, 'switch_inline_query ist in Buttons nicht erlaubt.')
return
end
else
text = matches[2]
reply_markup = nil
end
local success, result = utilities.send_message(self, chat_id, text, true, nil, true, reply_markup)
local success, result = utilities.send_message(chat_id, text, true, nil, true, reply_markup)
if success then
output = 'Deine Nachricht wurde versendet!'
else
@ -61,7 +61,7 @@ function channel:action(msg, config)
else
output = 'Sorry, ich konnte die Administratorenliste nicht abrufen!\n`'..gca_results.description..'`'
end
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
end
return channel

View File

@ -47,7 +47,7 @@ function channels:disable_channel(msg)
end
end
function channels:pre_process(msg, self, config)
function channels:pre_process(msg, config)
-- If is sudo can reeanble the channel
if is_sudo(msg, config) then
if msg.text == "/channel enable" then
@ -57,9 +57,7 @@ function channels:pre_process(msg, self, config)
if channels:is_channel_disabled(msg) then
print('Channel wurde deaktiviert')
msg.text = ''
msg.text_lower = ''
msg.entities = ''
return
end
return msg
@ -67,18 +65,18 @@ end
function channels:action(msg, config, matches)
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
-- Enable a channel
if matches[1] == 'enable' then
utilities.send_reply(self, msg, channels:enable_channel(msg))
utilities.send_reply(msg, channels:enable_channel(msg))
return
end
-- Disable a channel
if matches[1] == 'disable' then
utilities.send_reply(self, msg, channels:disable_channel(msg))
utilities.send_reply(msg, channels:disable_channel(msg))
return
end
end

View File

@ -11,17 +11,17 @@ end
cleverbot.command = 'cbot <Text>'
function cleverbot:action(msg, config, matches)
utilities.send_typing(self, msg.chat.id, 'typing')
utilities.send_typing(msg.chat.id, 'typing')
local text = matches[1]
local query, code = https.request(cleverbot.url..URL.escape(text))
if code ~= 200 then
utilities.send_reply(self, msg, 'Ich möchte jetzt nicht reden...')
utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...')
return
end
local data = json.decode(query)
if not data.clever then
utilities.send_reply(self, msg, 'Ich möchte jetzt nicht reden...')
utilities.send_reply(msg, 'Ich möchte jetzt nicht reden...')
return
end
@ -32,7 +32,7 @@ function cleverbot:action(msg, config, matches)
local answer = string.gsub(answer, "&Uuml;", "Ü")
local answer = string.gsub(answer, "&uuml;", "ü")
local answer = string.gsub(answer, "&szlig;", "ß")
utilities.send_reply(self, msg, answer)
utilities.send_reply(msg, answer)
end
return cleverbot

View File

@ -19,10 +19,10 @@ function clypit:get_clypit_details(shortcode)
end
function clypit:action(msg, config, matches)
utilities.send_typing(self, msg.chat.id, 'upload_audio')
utilities.send_typing(msg.chat.id, 'upload_audio')
local audio, title, duration = clypit:get_clypit_details(matches[1])
if not audio then return utilities.send_reply(self, msg, config.errors.connection) end
utilities.send_audio(self, msg.chat.id, audio, nil, msg.message_id, duration, nil, title)
if not audio then return utilities.send_reply(msg, config.errors.connection) end
utilities.send_audio(msg.chat.id, audio, nil, msg.message_id, duration, nil, title)
end
return clypit

View File

@ -31,22 +31,22 @@ function control:action(msg, config)
config[k] = v
end
end
bot.init(self, config)
utilities.send_reply(self, msg, 'Bot neu gestartet!')
bot.init(config)
utilities.send_reply(msg, 'Bot neu gestartet!')
elseif msg.text_lower:match('^'..cmd_pat..'halt') then
self.is_started = false
utilities.send_reply(self, msg, 'Stoppe Bot!')
utilities.send_reply(msg, 'Stoppe Bot!')
elseif msg.text_lower:match('^'..cmd_pat..'script') then
local input = msg.text_lower:match('^'..cmd_pat..'script\n(.+)')
if not input then
utilities.send_reply(self, msg, 'usage: ```\n'..cmd_pat..'script\n'..cmd_pat..'command <arg>\n...\n```', true)
utilities.send_reply(msg, 'usage: ```\n'..cmd_pat..'script\n'..cmd_pat..'command <arg>\n...\n```', true)
return
end
input = input .. '\n'
for command in input:gmatch('(.-)\n') do
command = utilities.trim(command)
msg.text = command
bot.on_msg_receive(self, msg, config)
bot.on_msg_receive(msg, config)
end
end

View File

@ -90,31 +90,31 @@ end
function creds_manager:action(msg, config, matches)
local receiver = msg.from.id
if receiver ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
if msg.chat.type ~= 'private' then
utilities.send_reply(self, msg, 'Dieses Plugin solltest du nur [privat](http://telegram.me/' .. self.info.username .. '?start=creds) verwenden!', true)
utilities.send_reply(msg, 'Dieses Plugin solltest du nur [privat](http://telegram.me/' .. self.info.username .. '?start=creds) verwenden!', true)
return
end
if matches[1] == "/creds" then
utilities.send_reply(self, msg, creds_manager:list_creds())
utilities.send_reply(msg, creds_manager:list_creds())
return
elseif matches[1] == "/creds add" then
local var = string.lower(string.sub(matches[2], 1, 50))
local key = string.sub(matches[3], 1, 1000)
utilities.send_reply(self, msg, creds_manager:add_creds(var, key))
utilities.send_reply(msg, creds_manager:add_creds(var, key))
return
elseif matches[1] == "/creds del" then
local var = string.lower(matches[2])
utilities.send_reply(self, msg, creds_manager:del_creds(var))
utilities.send_reply(msg, creds_manager:del_creds(var))
return
elseif matches[1] == "/creds rename" then
local var = string.lower(string.sub(matches[2], 1, 50))
local newvar = string.lower(string.sub(matches[3], 1, 1000))
utilities.send_reply(self, msg, creds_manager:rename_creds(var, newvar))
utilities.send_reply(msg, creds_manager:rename_creds(var, newvar))
return
end
end

View File

@ -39,7 +39,7 @@ function currency:inline_callback(inline_query, config, matches)
end
local value, iserr = currency:convert_money(base, to, amount)
if iserr then utilities.answer_inline_query(self, inline_query) return end
if iserr then abort_inline_query(inline_query) return end
local output = amount..' '..base..' = *'..value..' '..to..'*'
if tonumber(amount) == 1 then
@ -48,7 +48,7 @@ function currency:inline_callback(inline_query, config, matches)
title = amount..' '..base..' entsprechen'
end
local results = '[{"type":"article","id":"20","title":"'..title..'","description":"'..value..' '..to..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/currency/cash.jpg","thumb_width":157,"thumb_height":140,"input_message_content":{"message_text":"'..output..'","parse_mode":"Markdown"}}]'
utilities.answer_inline_query(self, inline_query, results, 3600)
utilities.answer_inline_query(inline_query, results, 3600)
end
function currency:convert_money(base, to, amount)
@ -83,7 +83,7 @@ end
function currency:action(msg, config, matches)
if matches[1] == '/cash' then
utilities.send_reply(self, msg, currency.doc, true)
utilities.send_reply(msg, currency.doc, true)
return
elseif not matches[2] then -- first pattern
base = 'EUR'
@ -100,24 +100,24 @@ function currency:action(msg, config, matches)
end
if from == to then
utilities.send_reply(self, msg, 'Jaja, sehr witzig...')
utilities.send_reply(msg, 'Jaja, sehr witzig...')
return
end
local value = currency:convert_money(base, to, amount)
if value == 'NOCONNECT' then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply(msg, config.errors.connection)
return
elseif value == 'WRONGBASE' then
utilities.send_reply(self, msg, 'Keine gültige Basiswährung.')
utilities.send_reply(msg, 'Keine gültige Basiswährung.')
return
elseif value == 'WRONGCONVERTRATE' then
utilities.send_reply(self, msg, 'Keine gültige Umwandlungswährung.')
utilities.send_reply(msg, 'Keine gültige Umwandlungswährung.')
return
end
local output = amount..' '..base..' = *'..value..' '..to..'*'
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
end
return currency

View File

@ -20,8 +20,8 @@ end
function dailymotion:action(msg, config, matches)
local text = dailymotion:send_dailymotion_info(matches[1])
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
utilities.send_reply(self, msg, text, true)
if not text then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_reply(msg, text, true)
end
return dailymotion

View File

@ -34,13 +34,13 @@ end
function deviantart:action(msg, config, matches)
local data = deviantart:get_da_data('http://'..matches[1]..'.deviantart.com/art/'..matches[2])
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
local text, file = deviantart:send_da_data(data)
if file then
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id)
utilities.send_photo(msg.chat.id, file, text, msg.message_id)
else
utilities.send_reply(self, msg, text)
utilities.send_reply(msg, text)
return
end
end

View File

@ -28,7 +28,7 @@ end
function dhl:action(msg, config, matches)
local sendungs_id = matches[1]
if string.len(sendungs_id) < 8 then return end
utilities.send_reply(self, msg, dhl:sendungsstatus(sendungs_id), true)
utilities.send_reply(msg, dhl:sendungsstatus(sendungs_id), true)
end
return dhl

View File

@ -14,17 +14,17 @@ function dropbox:action(msg, config, matches)
local v,code = https.request(link)
if code == 200 then
if string.ends(link, ".png") or string.ends(link, ".jpe?g")then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(link)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
return
elseif string.ends(link, ".webp") or string.ends(link, ".gif") then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(link)
utilities.send_document(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_document(msg.chat.id, file, nil, msg.message_id)
return
else
utilities.send_reply(self, msg, link)
utilities.send_reply(msg, link)
end
return
else

View File

@ -22,18 +22,18 @@ function echo:inline_callback(inline_query, config, matches)
end
local results = results..'{"type":"article","id":"4","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/fett.jpg","title":"Fett","description":"*'..text..'*","input_message_content":{"message_text":"<b>'..text..'</b>","parse_mode":"HTML"}},{"type":"article","id":"5","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/kursiv.jpg","title":"Kursiv","description":"_'..text..'_","input_message_content":{"message_text":"<i>'..text..'</i>","parse_mode":"HTML"}},{"type":"article","id":"6","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/echo/fixedsys.jpg","title":"Feste Breite","description":"`'..text..'`","input_message_content":{"message_text":"<code>'..text..'</code>","parse_mode":"HTML"}}]'
utilities.answer_inline_query(self, inline_query, results, 0)
utilities.answer_inline_query(inline_query, results, 0)
end
function echo:action(msg)
local input = utilities.input_from_msg(msg)
if not input then
utilities.send_message(self, msg.chat.id, echo.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, echo.doc, true, msg.message_id, true)
else
local output
if msg.chat.type == 'supergroup' then
output = '*Echo:*\n"' .. utilities.md_escape(input) .. '"'
utilities.send_message(self, msg.chat.id, output, true, nil, true)
utilities.send_message(msg.chat.id, output, true, nil, true)
return
elseif msg.chat.type == 'group' then
local b = 1
@ -42,8 +42,8 @@ function echo:action(msg)
input,b = input:gsub('^/+','')
end
end
utilities.send_message(self, msg.chat.id, input, true, nil, true)
utilities.send_message(msg.chat.id, input, true, nil, true)
end
end
return echo
return echo

View File

@ -27,7 +27,7 @@ function expand:inline_callback(inline_query, config, matches)
end
local results = '[{"type":"article","id":"7","title":"'..title..'","description":"'..description..'","url":"'..url..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/generic/internet.jpg","thumb_width":165,"thumb_height":150,"hide_url":true,"input_message_content":{"message_text":"'..url..'"}}]'
utilities.answer_inline_query(self, inline_query, results, 3600)
utilities.answer_inline_query(inline_query, results, 3600)
end
function expand:url(long_url)
@ -47,10 +47,10 @@ end
function expand:action(msg, config, matches)
local ok, response_headers = expand:url(matches[1])
if ok and response_headers.location then
utilities.send_reply(self, msg, response_headers.location)
utilities.send_reply(msg, response_headers.location)
return
else
utilities.send_reply(self, msg, "Fehler beim Erweitern der URL.")
utilities.send_reply(msg, "Fehler beim Erweitern der URL.")
return
end
end

View File

@ -136,7 +136,7 @@ function facebook:action(msg, config, matches)
else
id = matches[4]
end
utilities.send_reply(self, msg, facebook:fb_post(id, story_id), 'HTML')
utilities.send_reply(msg, facebook:fb_post(id, story_id), 'HTML')
return
elseif matches[1] == 'photo' or matches[2] == 'photos' then
if not matches[4] then
@ -146,10 +146,10 @@ function facebook:action(msg, config, matches)
end
local text, image_url = facebook:send_facebook_photo(photo_id, receiver)
if not image_url then return end
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url, 'photo.jpg')
utilities.send_reply(self, msg, text, 'HTML')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_reply(msg, text, 'HTML')
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
return
elseif matches[1] == 'video' or matches[2] == 'videos' then
if not matches[3] then
@ -164,10 +164,10 @@ function facebook:action(msg, config, matches)
title = 'VIDEO: '..title
end
if not video_url then return end
utilities.send_reply(self, msg, output, 'HTML', '{"inline_keyboard":[[{"text":"'..utilities.md_escape(title)..'","url":"'..video_url..'"}]]}')
utilities.send_reply(msg, output, 'HTML', '{"inline_keyboard":[[{"text":"'..utilities.md_escape(title)..'","url":"'..video_url..'"}]]}')
return
else
utilities.send_reply(self, msg, facebook:facebook_info(matches[1]), 'HTML')
utilities.send_reply(msg, facebook:facebook_info(matches[1]), 'HTML')
return
end
end

View File

@ -26,7 +26,7 @@ function fefe:post(id)
end
function fefe:action(msg, config, matches)
utilities.send_reply(self, msg, fefe:post(matches[1]))
utilities.send_reply(msg, fefe:post(matches[1]))
end
return fefe

View File

@ -49,21 +49,21 @@ end
function flickr:action(msg, config, matches)
local data = flickr:get_flickr_photo_data(matches[2])
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
local text, image_url, isgif = flickr:send_flickr_photo_data(data)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
if isgif then
utilities.send_document(self, msg.chat.id, file, text, msg.message_id)
utilities.send_document(msg.chat.id, file, text, msg.message_id)
return
else
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id)
utilities.send_photo(msg.chat.id, file, text, msg.message_id)
return
end
else
utilities.send_reply(self, msg, text)
utilities.send_reply(msg, text)
return
end
end

View File

@ -32,15 +32,15 @@ end
function flickr_search:action(msg, config, matches)
local url = flickr_search:get_flickr(matches[1])
if not url then utilities.send_reply(self, msg, config.errors.results) return end
if not url then utilities.send_reply(msg, config.errors.results) return end
local file = download_to_file(url)
if string.ends(url, ".gif") then
utilities.send_document(self, msg.chat.id, file, url)
utilities.send_document(msg.chat.id, file, url)
return
else
utilities.send_photo(self, msg.chat.id, file, url)
utilities.send_photo(msg.chat.id, file, url)
return
end
end

View File

@ -217,17 +217,17 @@ function forecast:inline_callback(inline_query, config, matches)
end
local lat, lng = get_city_coordinates(city, config)
if not lat and not lng then utilities.answer_inline_query(self, inline_query) return end
if not lat and not lng then abort_inline_query(inline_query) return end
if matches[1] == 'f' then
title, description, text, ttl = forecast:get_forecast(lat, lng, true)
else
title, description, text, ttl = forecast:get_forecast_hourly(lat, lng, true)
end
if not title and not description and not text and not ttl then utilities.answer_inline_query(self, inline_query) return end
if not title and not description and not text and not ttl then abort_inline_query(inline_query) return end
local text = text:gsub('\n', '\\n')
local results = '[{"type":"article","id":"28062013","title":"'..title..'","description":"'..description..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/weather/cloudy.jpg","thumb_width":80,"thumb_height":80,"input_message_content":{"message_text":"'..text..'", "parse_mode":"Markdown"}}]'
utilities.answer_inline_query(self, inline_query, results, ttl, is_personal)
utilities.answer_inline_query(inline_query, results, ttl, is_personal)
end
function forecast:action(msg, config, matches)
@ -246,7 +246,7 @@ function forecast:action(msg, config, matches)
local lat, lng = get_city_coordinates(city, config)
if not lat and not lng then
utilities.send_reply(self, msg, '*Diesen Ort gibt es nicht!*', true)
utilities.send_reply(msg, '*Diesen Ort gibt es nicht!*', true)
return
end
@ -258,7 +258,7 @@ function forecast:action(msg, config, matches)
if not text then
text = '*Konnte die Wettervorhersage für diese Stadt nicht bekommen.*'
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
end
return forecast

View File

@ -26,8 +26,8 @@ gImages.command = 'img <Suchbegriff>'
-- 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
utilities.answer_callback_query(self, callback, 'Suche nochmal nach "'..URL.unescape(input)..'"')
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.answer_callback_query(callback, 'Suche nochmal nach "'..URL.unescape(input)..'"')
utilities.send_typing(msg.chat.id, 'upload_photo')
local hash = 'telegram:cache:gImages'
local results = redis:smembers(hash..':'..string.lower(URL.unescape(input)))
@ -35,10 +35,10 @@ function gImages:callback(callback, msg, self, config, input)
print('doing web request')
results = gImages:get_image(input)
if results == 403 then
utilities.send_reply(self, msg, config.errors.quotaexceeded, true)
utilities.send_reply(msg, config.errors.quotaexceeded, true)
return
elseif not results then
utilities.send_reply(self, msg, config.errors.results, true)
utilities.send_reply(msg, config.errors.results, true)
return
end
gImages:cache_result(results, input)
@ -86,18 +86,18 @@ function gImages:callback(callback, msg, self, config, input)
end
if failed then
utilities.send_reply(self, msg, 'Fehler beim Herunterladen eines Bildes.', true)
utilities.send_reply(msg, 'Fehler beim Herunterladen eines Bildes.', true)
return
end
if mimetype == 'image/gif' then
result = utilities.send_document(self, msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
result = utilities.send_document(msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
else
result = utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
result = utilities.send_photo(msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
end
if not result then
utilities.send_reply(self, msg, config.errors.connection, true, '{"inline_keyboard":[[{"text":"Nochmal versuchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
utilities.send_reply(msg, config.errors.connection, true, '{"inline_keyboard":[[{"text":"Nochmal versuchen","callback_data":"@'..self.info.username..' gImages:'..input..'"}]]}')
return
end
end
@ -144,18 +144,18 @@ function gImages:action(msg, config, matches)
if msg.reply_to_message and msg.reply_to_message.text then
input = msg.reply_to_message.text
else
utilities.send_message(self, msg.chat.id, gImages.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, gImages.doc, true, msg.message_id, true)
return
end
end
print ('Checking if search contains blacklisted word: '..input)
if is_blacklisted(input) then
utilities.send_reply(self, msg, 'Vergiss es! ._.')
utilities.send_reply(msg, 'Vergiss es! ._.')
return
end
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local hash = 'telegram:cache:gImages'
local results = redis:smembers(hash..':'..string.lower(input))
@ -164,10 +164,10 @@ function gImages:action(msg, config, matches)
print('doing web request')
results = gImages:get_image(URL.escape(input))
if results == 403 then
utilities.send_reply(self, msg, config.errors.quotaexceeded, true)
utilities.send_reply(msg, config.errors.quotaexceeded, true)
return
elseif not results or results == 'NORESULTS' then
utilities.send_reply(self, msg, config.errors.results, true)
utilities.send_reply(msg, config.errors.results, true)
return
end
gImages:cache_result(results, input)
@ -215,18 +215,18 @@ function gImages:action(msg, config, matches)
end
if failed then
utilities.send_reply(self, msg, 'Fehler beim Herunterladen eines Bildes.', true)
utilities.send_reply(msg, 'Fehler beim Herunterladen eines Bildes.', true)
return
end
if mimetype == 'image/gif' then
result = utilities.send_document(self, msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
result = utilities.send_document(msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
else
result = utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
result = utilities.send_photo(msg.chat.id, file, nil, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..context..'"},{"text":"Bild aufrufen","url":"'..img_url..'"},{"text":"Nochmal suchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
end
if not result then
utilities.send_reply(self, msg, config.errors.connection, true, '{"inline_keyboard":[[{"text":"Nochmal versuchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
utilities.send_reply(msg, config.errors.connection, true, '{"inline_keyboard":[[{"text":"Nochmal versuchen","callback_data":"@'..self.info.username..' gImages:'..URL.escape(input)..'"}]]}')
return
end
end

View File

@ -22,29 +22,29 @@ end
function gMaps:inline_callback(inline_query, config, matches)
local place = matches[1]
local coords = utilities.get_coords(place, config)
if type(coords) == 'string' then utilities.answer_inline_query(self, inline_query) return end
if type(coords) == 'string' then abort_inline_query(inline_query) return end
local results = '[{"type":"venue","id":"10","latitude":'..coords.lat..',"longitude":'..coords.lon..',"title":"Ort","address":"'..coords.addr..'"}]'
utilities.answer_inline_query(self, inline_query, results, 10000)
utilities.answer_inline_query(inline_query, results, 10000)
end
function gMaps:action(msg, config)
local input = utilities.input_from_msg(msg)
if not input then
utilities.send_reply(self, msg, gMaps.doc, true)
utilities.send_reply(msg, gMaps.doc, true)
return
end
utilities.send_typing(self, msg.chat.id, 'find_location')
utilities.send_typing(msg.chat.id, 'find_location')
local coords = utilities.get_coords(input, config)
if type(coords) == 'string' then
utilities.send_reply(self, msg, coords)
utilities.send_reply(msg, coords)
return
end
utilities.send_location(self, msg.chat.id, coords.lat, coords.lon, msg.message_id)
utilities.send_photo(self, msg.chat.id, gMaps:get_staticmap(input, coords.lat, coords.lon), nil, msg.message_id)
utilities.send_location(msg.chat.id, coords.lat, coords.lon, msg.message_id)
utilities.send_photo(msg.chat.id, gMaps:get_staticmap(input, coords.lat, coords.lon), nil, msg.message_id)
end
return gMaps

View File

@ -23,7 +23,7 @@ function gSearch:googlethat(query, config)
return '403'
end
if code ~= 200 then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply(msg, config.errors.connection)
return
end
local data = json.decode(res)
@ -53,22 +53,22 @@ end
function gSearch:action(msg, config)
local input = utilities.input_from_msg(msg)
if not input then
utilities.send_reply(self, msg, gSearch.doc, true)
utilities.send_reply(msg, gSearch.doc, true)
return
end
local results, stats = gSearch:googlethat(input, onfig)
if results == '403' then
utilities.send_reply(self, msg, config.errors.quotaexceeded)
utilities.send_reply(msg, config.errors.quotaexceeded)
return
end
if not results then
utilities.send_reply(self, msg, config.errors.results)
utilities.send_reply(msg, config.errors.results)
return
end
utilities.send_message(self, msg.chat.id, gSearch:stringlinks(results, stats), true, nil, true, '{"inline_keyboard":[[{"text":"Alle Ergebnisse anzeigen","url":"https://www.google.com/search?q='..URL.escape(input)..'"}]]}')
utilities.send_message(msg.chat.id, gSearch:stringlinks(results, stats), true, nil, true, '{"inline_keyboard":[[{"text":"Alle Ergebnisse anzeigen","url":"https://www.google.com/search?q='..URL.escape(input)..'"}]]}')
end

View File

@ -52,7 +52,7 @@ function games:send_game_photo(result, self, msg)
for k, v in pairs(images) do
i = i+1
local file = download_to_file(v, 'game'..i..'.jpg')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
end
@ -117,10 +117,10 @@ function games:send_game_data(game_id, self, msg)
end
local text = '*'..title..'* für *'..platform..'*'..date..desc..genre..players..video..publisher
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
if xml.find(result, 'fanrt') or xml.find(result, 'boxart') then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
games:send_game_photo(result, self, msg)
end
return
@ -133,14 +133,14 @@ function games:action(msg, config)
if msg.reply_to_message and msg.reply_to_message.text then
game = msg.reply_to_message.text
else
utilities.send_message(self, msg.chat.id, fun.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, fun.doc, true, msg.message_id, true)
return
end
end
local game_id = games:get_game_id(game)
if not game_id then
utilities.send_reply(self, msg, 'Spiel nicht gefunden!')
utilities.send_reply(msg, 'Spiel nicht gefunden!')
return
else
games:send_game_data(game_id, self, msg)

View File

@ -38,15 +38,15 @@ function gdrive:send_drive_document_data(data, self, msg)
if mimetype:match('google') then -- if document is Google document (like a Spreadsheet)
if mimetype:match('drawing') then -- Drawing
local image_url = BASE_URL..'/files/'..id..'/export?key='..apikey..'&mimeType=image/png'
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url, 'export.png')
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id)
utilities.send_photo(msg.chat.id, file, text, msg.message_id)
return
else
local pdf_url = BASE_URL..'/files/'..id..'/export?key='..apikey..'&mimeType=application/pdf'
utilities.send_typing(self, msg.chat.id, 'upload_document')
utilities.send_typing(msg.chat.id, 'upload_document')
local file = download_to_file(pdf_url, 'document.pdf')
utilities.send_document(self, msg.chat.id, file, text, msg.message_id)
utilities.send_document(msg.chat.id, file, text, msg.message_id)
return
end
else
@ -65,19 +65,19 @@ function gdrive:send_drive_document_data(data, self, msg)
local headers = response[3]
local file_url = headers.location
if ext == "jpg" or ext == "jpeg" or ext == "png" then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(file_url, 'photo.'..ext)
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id, keyboard)
utilities.send_photo(msg.chat.id, file, text, msg.message_id, keyboard)
return
else
utilities.send_typing(self, msg.chat.id, 'upload_document')
utilities.send_typing(msg.chat.id, 'upload_document')
local file = download_to_file(file_url, 'document.'..ext)
utilities.send_document(self, msg.chat.id, file, text, msg.message_id, keyboard)
utilities.send_document(msg.chat.id, file, text, msg.message_id, keyboard)
return
end
else
local text = '*'..title..'*, freigegeben von _'..owner..'_'
utilities.send_reply(self, msg, text, true, keyboard)
utilities.send_reply(msg, text, true, keyboard)
return
end
end
@ -86,7 +86,7 @@ end
function gdrive:action(msg, config, matches)
local docid = matches[2]
local data = gdrive:get_drive_document_data(docid)
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
gdrive:send_drive_document_data(data, self, msg)
return
end

View File

@ -50,7 +50,7 @@ function get:action(msg)
output = get:list_variables(msg)
end
utilities.send_message(self, msg.chat.id, output, true, nil, true)
utilities.send_message(msg.chat.id, output, true, nil, true)
end
return get

View File

@ -31,7 +31,7 @@ function media_download:download_to_file_permanently(url, save_dir, file_name)
return true
end
function media_download:pre_process(msg, self, config)
function media_download:pre_process(msg, config)
if msg.photo then
local lv = #msg.photo -- find biggest photo, always the last value
file_id = msg.photo[lv].file_id
@ -57,7 +57,7 @@ function media_download:pre_process(msg, self, config)
if file_size > 19922944 then
print('File is over 20 MB - can\'t download :(')
return
return msg
end
local save_dir = config.getfile_path
@ -74,7 +74,7 @@ function media_download:pre_process(msg, self, config)
end
-- Saving file to the Telegram Cloud
local request = bindings.request(self, 'getFile', {
local request = bindings.request('getFile', {
file_id = file_id
} )

View File

@ -6,26 +6,26 @@ gfycat.triggers = {
"gfycat.com/([A-Za-z0-9-_-]+)"
}
function gfycat:send_gfycat_video(name, self, msg)
function gfycat:send_gfycat_video(name, msg)
local BASE_URL = "https://gfycat.com"
local url = BASE_URL..'/cajax/get/'..name
local res,code = https.request(url)
if code ~= 200 then return "HTTP-FEHLER" end
local data = json.decode(res).gfyItem
utilities.send_typing(self, msg.chat.id, 'upload_video')
utilities.send_typing(msg.chat.id, 'upload_video')
local file = download_to_file(data.webmUrl)
if file == nil then
send_reply(self, msg, 'Fehler beim Herunterladen von '..name)
send_reply(msg, 'Fehler beim Herunterladen von '..name)
return
else
utilities.send_video(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_video(msg.chat.id, file, nil, msg.message_id)
return
end
end
function gfycat:action(msg, config, matches)
local name = matches[1]
gfycat:send_gfycat_video(name, self, msg)
gfycat:send_gfycat_video(name, msg)
return
end

View File

@ -30,8 +30,8 @@ function giphy:inline_callback(inline_query, config, matches)
else
data = giphy:get_gifs(matches[2])
end
if not data then utilities.answer_inline_query(self, inline_query) return end
if not data[1] then utilities.answer_inline_query(self, inline_query) return end
if not data then abort_inline_query(inline_query) return end
if not data[1] then abort_inline_query(inline_query) return end
local results = '['
local id = 450
@ -43,7 +43,7 @@ function giphy:inline_callback(inline_query, config, matches)
end
end
local results = results..']'
utilities.answer_inline_query(self, inline_query, results, 3600)
utilities.answer_inline_query(inline_query, results, 3600)
end
function giphy:action()

View File

@ -63,7 +63,7 @@ function github:action(msg, config, matches)
else
output = github:send_gh_commit_data(gh_code, gh_commit_sha, data)
end
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
end
return github

View File

@ -181,42 +181,42 @@ 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
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local id = '@'..matches[3]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local output = gh_feed:subscribe(id, matches[2])
utilities.send_reply(self, msg, output, true)
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
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local id = '@'..matches[3]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local output = gh_feed:unsubscribe(id, matches[2])
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
return
elseif matches[1] == 'gh' and matches[2] then
local id = '@'..matches[2]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local chat_name = result.result.title
local output = gh_feed:print_subs(id, chat_name)
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
return
end
@ -228,42 +228,39 @@ function gh_feed:action(msg, config, matches)
if matches[1] == 'sub' and matches[2] then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local output = gh_feed:subscribe(id, matches[2])
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
return
elseif matches[1] == 'del' and matches[2] then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local output = gh_feed:unsubscribe(id, matches[2])
utilities.send_reply(self, msg, output, true, '{"hide_keyboard":true}')
utilities.send_reply(msg, output, true, '{"hide_keyboard":true}')
return
elseif matches[1] == 'del' and not matches[2] then
local list_subs, keyboard = gh_feed:print_subs(id, chat_name)
utilities.send_reply(self, msg, list_subs, true, keyboard)
utilities.send_reply(msg, list_subs, true, keyboard)
return
elseif matches[1] == 'sync' then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
gh_feed:cron(self)
gh_feed:cron()
return
end
local output = gh_feed:print_subs(id, chat_name)
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
return
end
function gh_feed:cron(self_plz)
if not self.BASE_URL then
self = self_plz
end
function gh_feed:cron()
local keys = redis:keys(gh_feed_get_base_redis("*", "subs"))
for k,v in pairs(keys) do
local repo = string.match(v, "github:(.+):subs")
@ -292,7 +289,7 @@ function gh_feed:cron(self_plz)
redis:set(gh_feed_get_base_redis(repo, "etag"), last_etag)
redis:set(gh_feed_get_base_redis(repo, "date"), last_date)
for k2, receiver in pairs(redis:smembers(v)) do
utilities.send_message(self, receiver, text, true, nil, true)
utilities.send_message(receiver, text, true, nil, true)
end
end
end

View File

@ -49,15 +49,15 @@ end
function golem:action(msg, config, matches)
local article_identifier = matches[2]
local data, image_data = golem:get_golem_data(article_identifier)
if not data and not image_data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data and not image_data then utilities.send_reply(msg, config.errors.connection) return end
local text, image_url = golem:send_golem_data(data, image_data)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
end
return golem

View File

@ -25,10 +25,10 @@ end
function googl:inline_callback(inline_query, config, matches)
local shorturl = matches[1]
local text, longUrl = googl:send_googl_info(shorturl)
if not longUrl then utilities.answer_inline_query(self, inline_query) return end
if not longUrl then abort_inline_query(inline_query) return end
local results = '[{"type":"article","id":"9","title":"Verlängerte URL","description":"'..longUrl..'","url":"'..longUrl..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/generic/internet.jpg","thumb_width":165,"thumb_height":150,"hide_url":true,"input_message_content":{"message_text":"'..text..'"}}]'
utilities.answer_inline_query(self, inline_query, results, 1)
utilities.answer_inline_query(inline_query, results, 1)
end
function googl:send_googl_info (shorturl)
@ -49,8 +49,8 @@ end
function googl:action(msg, config, matches)
local shorturl = matches[1]
local text = googl:send_googl_info(shorturl)
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
utilities.send_reply(self, msg, text)
if not text then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_reply(msg, text)
end
return googl

View File

@ -27,11 +27,11 @@ function gps:inline_callback(inline_query, config, matches)
local results = '[{"type":"location","id":"8","latitude":'..lat..',"longitude":'..lon..',"title":"Standort"}]'
utilities.answer_inline_query(self, inline_query, results, 10000)
utilities.answer_inline_query(inline_query, results, 10000)
end
function gps:action(msg, config, matches)
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local lat = matches[1]
local lon = matches[2]
@ -42,10 +42,10 @@ function gps:action(msg, config, matches)
local zoom = zooms[i]
local url = "https://maps.googleapis.com/maps/api/staticmap?zoom=" .. zoom .. "&size=600x300&maptype=hybrid&center=" .. lat .. "," .. lon .. "&markers=color:red%7Clabel:•%7C" .. lat .. "," .. lon
local file = download_to_file(url, 'zoom_'..i..'.png')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_location(self, msg.chat.id, lat, lon, msg.message_id)
utilities.send_location(msg.chat.id, lat, lon, msg.message_id)
end
return gps

View File

@ -34,7 +34,7 @@ end
function hackernews:action(msg, config, matches)
local hn_code = matches[1]
utilities.send_reply(self, msg, hackernews:send_hackernews_post(hn_code), true)
utilities.send_reply(msg, hackernews:send_hackernews_post(hn_code), true)
end
return hackernews

View File

@ -32,11 +32,11 @@ function heise:action(msg, config, matches)
local article = URL.escape(matches[1])
local text, image_url = heise:get_heise_article(article)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url, 'heise_teaser.jpg')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
end
return heise

View File

@ -5,7 +5,7 @@ hello.triggers = {
}
function hello:action(msg, config, matches)
utilities.send_message(self, msg.chat.id, 'Hallo, '..matches[1]..'!')
utilities.send_message(msg.chat.id, 'Hallo, '..matches[1]..'!')
end
return hello

View File

@ -29,10 +29,10 @@ function help:inline_callback(inline_query, config, matches)
local doc = doc:gsub('\\n', '\\\n')
local chosen_plugin = utilities.get_word(plugin.command, 1)
local results = '[{"type":"article","id":"9","title":"Hilfe für '..chosen_plugin..'","description":"Hilfe für das Plugin \\"'..chosen_plugin..'\\" wird gepostet.","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/help/hilfe.jpg","input_message_content":{"message_text":"'..doc..'","parse_mode":"Markdown"}}]'
utilities.answer_inline_query(self, inline_query, results, 600, nil, nil, 'Hilfe anzeigen', 'hilfe_'..chosen_plugin)
utilities.answer_inline_query(inline_query, results, 600, nil, nil, 'Hilfe anzeigen', 'hilfe_'..chosen_plugin)
end
end
utilities.answer_inline_query(self, inline_query)
utilities.answer_inline_query(inline_query)
end
function help:action(msg, config, matches)
@ -62,11 +62,11 @@ function help:action(msg, config, matches)
local help_text = help_text .. table.concat(commandlist, '\n'..config.cmd_pat) .. '\nParameter: <benötigt> [optional]'
local help_text = help_text:gsub('%[', '\\[')
local res = utilities.send_message(self, msg.from.id, help_text, true, nil, true)
local res = utilities.send_message(msg.from.id, help_text, true, nil, true)
if not res then
utilities.send_reply(self, msg, 'Bitte schreibe mir zuerst [privat](http://telegram.me/' .. self.info.username .. '?start=help) für eine Hilfe.', true)
utilities.send_reply(msg, 'Bitte schreibe mir zuerst [privat](http://telegram.me/' .. self.info.username .. '?start=help) für eine Hilfe.', true)
elseif msg.chat.type ~= 'private' then
utilities.send_reply(self, msg, 'Ich habe dir die Hilfe privat gesendet!.')
utilities.send_reply(msg, 'Ich habe dir die Hilfe privat gesendet!.')
end
return
end
@ -75,12 +75,12 @@ function help:action(msg, config, matches)
local plugin = self.plugins[n]
if plugin.command and utilities.get_word(plugin.command, 1) == input and plugin.doc then
local output = '*Hilfe für* _' .. utilities.get_word(plugin.command, 1) .. '_ *:*' .. plugin.doc
utilities.send_message(self, msg.chat.id, output, true, nil, true)
utilities.send_message(msg.chat.id, output, true, nil, true)
return
end
end
utilities.send_reply(self, msg, 'Für diesen Befehl gibt es keine Hilfe.')
utilities.send_reply(msg, 'Für diesen Befehl gibt es keine Hilfe.')
end
return help

View File

@ -18,8 +18,8 @@ Alias: ]]..config.cmd_pat..[[who
```]]
end
function id:get_member_count(self, msg, chat_id)
return bindings.request(self, 'getChatMembersCount', {
function id:get_member_count(msg, chat_id)
return bindings.request('getChatMembersCount', {
chat_id = chat_id
} )
end
@ -54,7 +54,7 @@ function id:inline_callback(inline_query, config, matches)
local name = utilities.build_name(inline_query.from.first_name, inline_query.from.last_name)
local results = '[{"type":"article","id":"30","title":"Deine Telegram-ID ist:","description":"'..id..'","input_message_content":{"message_text":"<b>'..name..'</b>: <code>'..id..'</code>","parse_mode":"HTML"}}]'
utilities.answer_inline_query(self, inline_query, results, 10000, true)
utilities.answer_inline_query(inline_query, results, 10000, true)
end
function id:action(msg, config, matches)
@ -86,10 +86,10 @@ function id:action(msg, config, matches)
local output = user .. ', und du bist in der Gruppe ' .. group
utilities.send_message(self, msg.chat.id, output, true, msg.message_id, true)
utilities.send_message(msg.chat.id, output, true, msg.message_id, true)
elseif matches[1] == "chat" then
if msg.chat.type ~= 'group' and msg.chat.type ~= 'supergroup' then
utilities.send_reply(self, msg, 'Das hier ist keine Gruppe!')
utilities.send_reply(msg, 'Das hier ist keine Gruppe!')
return
end
local chat_name = msg.chat.title
@ -106,7 +106,7 @@ function id:action(msg, config, matches)
end
-- get all administrators and the creator
local administrators = utilities.get_chat_administrators(self, chat_id)
local administrators = utilities.get_chat_administrators(chat_id)
local admins = {}
for num in pairs(administrators.result) do
if administrators.result[num].status ~= 'creator' then
@ -115,7 +115,7 @@ function id:action(msg, config, matches)
creator_id = administrators.result[num].user.id
end
end
local result = id:get_member_count(self, msg, chat_id)
local result = id:get_member_count(msg, chat_id)
local member_count = result.result
if member_count == 1 then
member_count = 'ist *1 Mitglied'
@ -132,7 +132,7 @@ function id:action(msg, config, matches)
text = text..'*'..user.name..'* `['..user.id..']`\n'
end
end
utilities.send_reply(self, msg, text..'_(Bots sind nicht gelistet)_', true)
utilities.send_reply(msg, text..'_(Bots sind nicht gelistet)_', true)
end
end

View File

@ -53,22 +53,22 @@ function ifttt:action(msg, config, matches)
local value3 = matches[4]
if event == '!set' then
utilities.send_reply(self, msg, ifttt:set_ifttt_key(hash, value1), true)
utilities.send_reply(msg, ifttt:set_ifttt_key(hash, value1), true)
return
end
if not key then
utilities.send_reply(self, msg, '*Bitte speichere zuerst deinen Schlüssel ein!* Aktiviere dazu den [Maker Channel](https://ifttt.com/maker) und speichere deinen Schlüssel mit `/ifttt !set KEY` ein', true)
utilities.send_reply(msg, '*Bitte speichere zuerst deinen Schlüssel ein!* Aktiviere dazu den [Maker Channel](https://ifttt.com/maker) und speichere deinen Schlüssel mit `/ifttt !set KEY` ein', true)
return
end
if event == '!unauth' then
redis:hdel(hash, 'ifttt')
utilities.send_reply(self, msg, '*Erfolgreich ausgeloggt!*', true)
utilities.send_reply(msg, '*Erfolgreich ausgeloggt!*', true)
return
end
utilities.send_reply(self, msg, ifttt:do_ifttt_request(key, event, value1, value2, value3), true)
utilities.send_reply(msg, ifttt:do_ifttt_request(key, event, value1, value2, value3), true)
end
return ifttt

View File

@ -7,8 +7,8 @@ images.triggers = {
function images:action(msg, config, matches)
local url = matches[1]
local file, last_modified, nocache = get_cached_file(url, nil, msg.chat.id, 'upload_photo', self)
local result = utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
local file, last_modified, nocache = get_cached_file(url, nil, msg.chat.id, 'upload_photo')
local result = utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
if nocache then return end
if not result then return end

View File

@ -26,9 +26,9 @@ function imdb:inline_callback(inline_query, config, matches)
local query = matches[1]
local url = BASE_URL..'/?s='..URL.escape(query)
local res, code = https.request(url)
if code ~= 200 then utilities.answer_inline_query(self, inline_query) return end
if code ~= 200 then abort_inline_query(inline_query) return end
local data = json.decode(res)
if data.Response ~= "True" then utilities.answer_inline_query(self, inline_query) return end
if data.Response ~= "True" then abort_inline_query(inline_query) return end
local results = '['
local id = 500
@ -63,26 +63,26 @@ function imdb:inline_callback(inline_query, config, matches)
local results = results:sub(0, -2)
local results = results..']'
utilities.answer_inline_query(self, inline_query, results, 10000)
utilities.answer_inline_query(inline_query, results, 10000)
end
function imdb:action(msg, config)
local input = utilities.input_from_msg(msg)
if not input then
utilities.send_reply(self, msg, imdb.doc, true)
utilities.send_reply(msg, imdb.doc, true)
return
end
local url = BASE_URL..'/?t='..URL.escape(input)
local jstr, res = https.request(url)
if res ~= 200 then
utilities.send_reply(self, msg, config.errors.connection)
utilities.send_reply(msg, config.errors.connection)
return
end
local jdat = json.decode(jstr)
if jdat.Response ~= 'True' then
utilities.send_reply(self, msg, config.errors.results)
utilities.send_reply(msg, config.errors.results)
return
end
@ -90,11 +90,11 @@ function imdb:action(msg, config)
output = output..string.gsub(jdat.imdbRating, '%.', ',')..'/10 | '..jdat.Runtime..' | '.. jdat.Genre..'\n'
output = output..'<i>' .. jdat.Plot .. '</i>'
utilities.send_reply(self, msg, output, 'HTML', '{"inline_keyboard":[[{"text":"IMDb-Seite aufrufen","url":"http://imdb.com/title/'.. jdat.imdbID..'"}]]}')
utilities.send_reply(msg, output, 'HTML', '{"inline_keyboard":[[{"text":"IMDb-Seite aufrufen","url":"http://imdb.com/title/'.. jdat.imdbID..'"}]]}')
if jdat.Poster ~= "N/A" then
local file = download_to_file(jdat.Poster)
utilities.send_photo(self, msg.chat.id, file)
utilities.send_photo(msg.chat.id, file)
end
end

View File

@ -50,7 +50,7 @@ end
function imgblacklist:action(msg, config, matches)
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
@ -60,22 +60,22 @@ function imgblacklist:action(msg, config, matches)
_blacklist = redis:smembers("telegram:img_blacklist")
if action == 'add' and not word then
utilities.send_reply(self, msg, imgblacklist.doc, true)
utilities.send_reply(msg, imgblacklist.doc, true)
return
elseif action == "add" and word then
utilities.send_reply(self, msg, imgblacklist:add_blacklist(word), true)
utilities.send_reply(msg, imgblacklist:add_blacklist(word), true)
return
end
if action == 'remove' and not word then
utilities.send_reply(self, msg, imgblacklist.doc, true)
utilities.send_reply(msg, imgblacklist.doc, true)
return
elseif action == "remove" and word then
utilities.send_reply(self, msg, imgblacklist:remove_blacklist(word), true)
utilities.send_reply(msg, imgblacklist:remove_blacklist(word), true)
return
end
utilities.send_reply(self, msg, imgblacklist:show_blacklist())
utilities.send_reply(msg, imgblacklist:show_blacklist())
end
return imgblacklist

View File

@ -41,14 +41,14 @@ end
function imgur:action(msg)
local imgur_code = matches[1]
if imgur_code == "login" then return nil end
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local link = imgur:get_imgur_data(imgur_code)
if link then
local file = download_to_file(link)
if string.ends(link, ".gif") then
utilities.send_document(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_document(msg.chat.id, file, nil, msg.message_id)
else
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
end
end

View File

@ -62,14 +62,14 @@ end
function instagram:action(msg, config, matches)
local insta_code = matches[1]
local data = instagram:get_insta_data(insta_code)
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
local text, image_url = instagram:send_instagram_data(data)
if not image_url then utilities.send_reply(self, msg, config.errors.connection) return end
if not image_url then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id)
utilities.send_photo(msg.chat.id, file, text, msg.message_id)
end
return instagram

View File

@ -73,14 +73,14 @@ end
function ip_info:action(msg, config, matches)
local host = matches[1]
local text, image_url = ip_info:get_host_data(host)
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
if not text then utilities.send_reply(msg, config.errors.connection) return end
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url, 'map.png')
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id)
utilities.send_photo(msg.chat.id, file, text, msg.message_id)
else
utilities.send_reply(self, msg, text)
utilities.send_reply(msg, text)
end
end

View File

@ -68,10 +68,10 @@ end
function isup:action(msg, config)
if isup:isup(matches[1]) then
utilities.send_reply(self, msg, matches[1]..' ist UP! ✅')
utilities.send_reply(msg, matches[1]..' ist UP! ✅')
return
else
utilities.send_reply(self, msg, matches[1]..' ist DOWN! ❌')
utilities.send_reply(msg, matches[1]..' ist DOWN! ❌')
return
end
end

View File

@ -44,20 +44,20 @@ function loc_manager:action(msg, config, matches)
local user_id = msg.from.id
if matches[1] == 'set' then
utilities.send_reply(self, msg, loc_manager:set_location(user_id, matches[2]), true)
utilities.send_reply(msg, loc_manager:set_location(user_id, matches[2]), true)
return
elseif matches[1] == 'del' then
utilities.send_reply(self, msg, loc_manager:del_location(user_id), true)
utilities.send_reply(msg, loc_manager:del_location(user_id), true)
return
else
local set_location = get_location(user_id)
if not set_location then
utilities.send_reply(self, msg, '*Du hast keinen Ort gesetzt!*', true)
utilities.send_reply(msg, '*Du hast keinen Ort gesetzt!*', true)
return
else
local coords = utilities.get_coords(set_location, config)
utilities.send_location(self, msg.chat.id, coords.lat, coords.lon, msg.message_id)
utilities.send_reply(self, msg, 'Gesetzter Wohnort: *'..set_location..'*', true)
utilities.send_location(msg.chat.id, coords.lat, coords.lon, msg.message_id)
utilities.send_reply(msg, 'Gesetzter Wohnort: *'..set_location..'*', true)
return
end
end

View File

@ -23,7 +23,7 @@ function luarun:action(msg, config)
local input = utilities.input(msg.text)
if not input then
utilities.send_reply(self, msg, 'Please enter a string to load.')
utilities.send_reply(msg, 'Please enter a string to load.')
return
end
@ -40,8 +40,8 @@ function luarun:action(msg, config)
local URL = require('socket.url')
local HTTP = require('socket.http')
local HTTPS = require('ssl.https')
return function (self, msg, config) ]] .. input .. [[ end
]] )()(self, msg, config)
return function (msg, config) ]] .. input .. [[ end
]] )()(msg, config)
if output == nil then
output = 'Done!'
else
@ -53,7 +53,7 @@ function luarun:action(msg, config)
end
output = '```\n' .. tostring(output) .. '\n```'
end
utilities.send_message(self, msg.chat.id, output, true, msg.message_id, true)
utilities.send_message(msg.chat.id, output, true, msg.message_id, true)
end

View File

@ -36,12 +36,12 @@ function lyrics:action(msg, config, matches)
if msg.reply_to_message and msg.reply_to_message.text then
input = msg.reply_to_message.text
else
utilities.send_message(self, msg.chat.id, lyrics.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, lyrics.doc, true, msg.message_id, true)
return
end
end
utilities.send_reply(self, msg, lyrics:getLyrics(input), true)
utilities.send_reply(msg, lyrics:getLyrics(input), true)
end
return lyrics

View File

@ -15,7 +15,7 @@ function muschel:frag_die_muschel()
end
function muschel:action(msg, config, matches)
utilities.send_reply(self, msg, muschel:frag_die_muschel())
utilities.send_reply(msg, muschel:frag_die_muschel())
end
return muschel

View File

@ -34,19 +34,19 @@ function media:action(msg, config, matches)
chat_action = 'upload_document'
end
local file, last_modified, nocache = get_cached_file(url, nil, msg.chat.id, chat_action, self)
local file, last_modified, nocache = get_cached_file(url, nil, msg.chat.id, chat_action)
if not file then return end
if ext == 'gif' then
result = utilities.send_document(self, receiver, file, nil, msg.message_id)
result = utilities.send_document(receiver, file, nil, msg.message_id)
elseif ext == 'ogg' then
result = utilities.send_voice(self, receiver, file, nil, msg.message_id)
result = utilities.send_voice(receiver, file, nil, msg.message_id)
elseif mime_type == 'audio' then
result = utilities.send_audio(self, receiver, file, nil, msg.message_id)
result = utilities.send_audio(receiver, file, nil, msg.message_id)
elseif mime_type == 'video' then
result = utilities.send_video(self, receiver, file, nil, msg.message_id)
result = utilities.send_video(receiver, file, nil, msg.message_id)
else
result = utilities.send_document(self, receiver, file, nil, msg.message_id)
result = utilities.send_document(receiver, file, nil, msg.message_id)
end
if nocache then return end

View File

@ -74,7 +74,7 @@ function mc_server:parseText(text, mc_server)
end
function mc_server:action(msg, config, matches)
utilities.send_reply(self, msg, mc_server:parseText(msg.text, mc_server), true)
utilities.send_reply(msg, mc_server:parseText(msg.text, mc_server), true)
end
return mc_server

View File

@ -16,14 +16,14 @@ function mc_skin:action(msg, config, matches)
if msg.reply_to_message and msg.reply_to_message.text then
input = msg.reply_to_message.text
else
utilities.send_message(self, msg.chat.id, mc_skin.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, mc_skin.doc, true, msg.message_id, true)
return
end
end
local url = 'http://www.minecraft-skin-viewer.net/3d.php?layers=true&aa=true&a=0&w=330&wt=10&abg=330&abd=40&ajg=340&ajd=20&ratio=13&format=png&login='..input..'&headOnly=false&displayHairs=true&randomness=341.png'
local file = download_to_file(url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
return mc_skin

View File

@ -191,31 +191,31 @@ function mal:action(msg, config, matches)
if matches[1] == 'anime' then
local anime_info = mal:get_mal_info(query, 'anime')
if anime_info == "HTTP-Fehler" then
utilities.send_reply(self, msg, 'Anime nicht gefunden!')
utilities.send_reply(msg, 'Anime nicht gefunden!')
return
else
local text, image_url = mal:send_anime_data(anime_info)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
return
end
elseif matches[1] == 'manga' then
local manga_info = mal:get_mal_info(query, 'manga')
if manga_info == "HTTP-Fehler" then
utilities.send_reply(self, msg, 'Manga nicht gefunden!')
utilities.send_reply(msg, 'Manga nicht gefunden!')
return
else
local text, image_url = mal:send_manga_data(manga_info)
if image_url then
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(image_url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
return
end
end

View File

@ -23,7 +23,7 @@ function isWordFoundInString(word,input)
select(2,input:gsub('%W+' .. word .. '%W+','')) > 0
end
function notify:pre_process(msg, self)
function notify:pre_process(msg)
local notify_users = redis:smembers('notify:ls')
-- I call this beautiful lady the "if soup"
@ -44,7 +44,7 @@ function notify:pre_process(msg, self)
local from = string.gsub(msg.from.name, "%_", " ")
local chat_name = string.gsub(msg.chat.title, "%_", " ")
local text = from..' am '..send_date..' in "'..chat_name..'":\n\n'..msg.text
utilities.send_message(self, id, text, true)
utilities.send_message(id, text, true)
end
end
end
@ -57,7 +57,7 @@ end
function notify:action(msg, config, matches)
if not msg.from.username then
utilities.send_reply(self, msg, 'Du hast keinen Usernamen und kannst daher dieses Feature nicht nutzen. Tut mir leid!' )
utilities.send_reply(msg, 'Du hast keinen Usernamen und kannst daher dieses Feature nicht nutzen. Tut mir leid!' )
return
end
@ -67,18 +67,18 @@ function notify:action(msg, config, matches)
if matches[1] == "del" then
if not redis:sismember('notify:ls', username) then
utilities.send_reply(self, msg, 'Du wirst noch gar nicht benachrichtigt!')
utilities.send_reply(msg, 'Du wirst noch gar nicht benachrichtigt!')
return
end
print('Setting notify in redis hash '..hash..' to false')
redis:hset(hash, 'notify', false)
print('Removing '..username..' from redis set notify:ls')
redis:srem('notify:ls', username)
utilities.send_reply(self, msg, 'Du erhälst jetzt keine Benachrichtigungen mehr, wenn du angesprochen wirst.')
utilities.send_reply(msg, 'Du erhälst jetzt keine Benachrichtigungen mehr, wenn du angesprochen wirst.')
return
else
if redis:sismember('notify:ls', username) then
utilities.send_reply(self, msg, 'Du wirst schon benachrichtigt!')
utilities.send_reply(msg, 'Du wirst schon benachrichtigt!')
return
end
print('Setting notify in redis hash '..hash..' to true')
@ -87,11 +87,11 @@ function notify:action(msg, config, matches)
redis:hset(hash, 'id', msg.from.id)
print('Adding '..username..' to redis set notify:ls')
redis:sadd('notify:ls', username)
local res = utilities.send_message(self, msg.from.id, 'Du erhälst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true, nil, true)
local res = utilities.send_message(msg.from.id, 'Du erhälst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true, nil, true)
if not res then
utilities.send_reply(self, msg, 'Bitte schreibe mir [privat](http://telegram.me/' .. self.info.username .. '?start=notify), um den Vorgang abzuschließen.', true)
utilities.send_reply(msg, 'Bitte schreibe mir [privat](http://telegram.me/' .. self.info.username .. '?start=notify), um den Vorgang abzuschließen.', true)
elseif msg.chat.type ~= 'private' then
utilities.send_reply(self, msg, 'Du erhälst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true)
utilities.send_reply(msg, 'Du erhälst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true)
end
end
end

View File

@ -26,10 +26,10 @@ function pagespeed_insights:get_pagespeed(test_url)
end
function pagespeed_insights:action(msg, config, matches)
utilities.send_typing(self, msg.chat.id, 'typing')
utilities.send_typing(msg.chat.id, 'typing')
local text = pagespeed_insights:get_pagespeed(matches[1])
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
utilities.send_reply(self, msg, text, true)
if not text then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_reply(msg, text, true)
end
return pagespeed_insights

View File

@ -33,10 +33,10 @@ function pasteee:action(msg, config, matches)
local text = matches[1]
local link, iserror = upload(text)
if iserror then
utilities.send_reply(self, msg, link)
utilities.send_reply(msg, link)
return
end
utilities.send_reply(self, msg, '[Text auf Paste.ee ansehen]('..link..')', true)
utilities.send_reply(msg, '[Text auf Paste.ee ansehen]('..link..')', true)
end
return pasteee

View File

@ -23,11 +23,11 @@ function patterns:action(msg)
end
)
if res == false then
utilities.send_reply(self, msg, 'Falsches Pattern!')
utilities.send_reply(msg, 'Falsches Pattern!')
else
output = output:sub(1, 4000)
output = '*Du meintest wohl*:\n"'..utilities.md_escape(utilities.trim(output))..'"'
utilities.send_reply(self, msg.reply_to_message, output, true)
utilities.send_reply(msg.reply_to_message, output, true)
end
end

View File

@ -101,13 +101,13 @@ function pixabay:action(msg, config, matches)
end
if url == 'NOPIX' then
utilities.send_reply(self, msg, config.errors.results)
utilities.send_reply(msg, config.errors.results)
return
else
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(url)
local text = '"'..tags..'" von '..user
utilities.send_photo(self, msg.chat.id, file, text, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..page_url..'"},{"text":"Volles Bild (Login notwendig)","url":"'..full_url..'"}]]}')
utilities.send_photo(msg.chat.id, file, text, msg.message_id, '{"inline_keyboard":[[{"text":"Seite aufrufen","url":"'..page_url..'"},{"text":"Volles Bild (Login notwendig)","url":"'..full_url..'"}]]}')
return
end
end

View File

@ -50,7 +50,7 @@ function play_store:action(msg, config, matches)
if data == nil then
return
else
utilities.send_reply(self, msg, play_store:send_playstore_data(data), true)
utilities.send_reply(msg, play_store:send_playstore_data(data), true)
return
end
end

View File

@ -162,13 +162,13 @@ end
function plugin_manager:action(msg, config, matches)
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
-- Show the available plugins
if matches[1] == '/plugins' then
utilities.send_reply(self, msg, plugin_manager:list_plugins())
utilities.send_reply(msg, plugin_manager:list_plugins())
return
end
@ -178,11 +178,11 @@ function plugin_manager:action(msg, config, matches)
if matches[4] then
local id = matches[4]
print("enable "..plugin..' on chat#id'..id)
utilities.send_reply(self, msg, plugin_manager:reenable_plugin_on_chat(id, plugin))
utilities.send_reply(msg, plugin_manager:reenable_plugin_on_chat(id, plugin))
return
else
print("enable "..plugin..' on this chat')
utilities.send_reply(self, msg, plugin_manager:reenable_plugin_on_chat(msg, plugin))
utilities.send_reply(msg, plugin_manager:reenable_plugin_on_chat(msg, plugin))
return
end
end
@ -191,7 +191,7 @@ function plugin_manager:action(msg, config, matches)
if matches[1] == 'enable' then
local plugin_name = matches[2]
print("enable: "..matches[2])
utilities.send_reply(self, msg, plugin_manager:enable_plugin(self, config, plugin_name))
utilities.send_reply(msg, plugin_manager:enable_plugin(self, config, plugin_name))
return
end
@ -201,11 +201,11 @@ function plugin_manager:action(msg, config, matches)
if matches[4] then
local id = matches[4]
print("disable "..plugin..' on chat#id'..id)
utilities.send_reply(self, msg, plugin_manager:disable_plugin_on_chat(id, plugin))
utilities.send_reply(msg, plugin_manager:disable_plugin_on_chat(id, plugin))
return
else
print("disable "..plugin..' on this chat')
utilities.send_reply(self, msg, plugin_manager:disable_plugin_on_chat(msg, plugin))
utilities.send_reply(msg, plugin_manager:disable_plugin_on_chat(msg, plugin))
return
end
end
@ -213,13 +213,13 @@ function plugin_manager:action(msg, config, matches)
-- Disable a plugin
if matches[1] == 'disable' then
print("disable: "..matches[2])
utilities.send_reply(self, msg, plugin_manager:disable_plugin(self, config, matches[2]))
utilities.send_reply(msg, plugin_manager:disable_plugin(self, config, matches[2]))
return
end
-- Reload all the plugins!
if matches[1] == 'reload' then
utilities.send_reply(self, msg, plugin_manager:reload_plugins(self, config))
utilities.send_reply(msg, plugin_manager:reload_plugins(self, config))
return
end
end

View File

@ -102,40 +102,40 @@ function pocket:action(msg, config, matches)
if matches[1] == 'set' then
local access_token = matches[2]
utilities.send_reply(self, msg, pocket:set_pocket_access_token(hash, access_token), true)
utilities.send_reply(msg, pocket:set_pocket_access_token(hash, access_token), true)
local message_id = redis:hget(hash, 'pocket_login_msg')
utilities.edit_message(self, msg.chat.id, message_id, '*Anmeldung abgeschlossen!*', true, true)
utilities.edit_message(msg.chat.id, message_id, '*Anmeldung abgeschlossen!*', true, true)
redis:hdel(hash, 'pocket_login_msg')
return
end
if not access_token then
local result = utilities.send_reply(self, msg, '*Bitte authentifiziere dich zuerst, indem du dich anmeldest.*', true, '{"inline_keyboard":[[{"text":"Bei Pocket anmelden","url":"https://brawlbot.tk/apis/callback/pocket/connect.php"}]]}')
local result = utilities.send_reply(msg, '*Bitte authentifiziere dich zuerst, indem du dich anmeldest.*', true, '{"inline_keyboard":[[{"text":"Bei Pocket anmelden","url":"https://brawlbot.tk/apis/callback/pocket/connect.php"}]]}')
redis:hset(hash, 'pocket_login_msg', result.result.message_id)
return
end
if matches[1] == 'unauth' then
redis:hdel(hash, 'pocket')
utilities.send_reply(self, msg, 'Erfolgreich ausgeloggt! Du kannst den Zugriff [in deinen Einstellungen](https://getpocket.com/connected_applications) endgültig entziehen.', true)
utilities.send_reply(msg, 'Erfolgreich ausgeloggt! Du kannst den Zugriff [in deinen Einstellungen](https://getpocket.com/connected_applications) endgültig entziehen.', true)
return
end
if matches[1] == 'add' then
utilities.send_reply(self, msg, pocket:add_pocket_item(access_token, matches[2]))
utilities.send_reply(msg, pocket:add_pocket_item(access_token, matches[2]))
return
end
if matches[1] == 'archive' or matches[1] == 'delete' or matches[1] == 'readd' or matches[1] == 'favorite' or matches[1] == 'unfavorite' then
utilities.send_reply(self, msg, pocket:modify_pocket_item(access_token, matches[1], matches[2]))
utilities.send_reply(msg, pocket:modify_pocket_item(access_token, matches[1], matches[2]))
return
end
if msg.chat.type == 'chat' or msg.chat.type == 'supergroup' then
utilities.send_reply(self, msg, 'Ausgeben deiner privaten Pocket-Liste in einem öffentlichen Chat wird feige verweigert. Bitte schreibe mich privat an!', true)
utilities.send_reply(msg, 'Ausgeben deiner privaten Pocket-Liste in einem öffentlichen Chat wird feige verweigert. Bitte schreibe mich privat an!', true)
return
else
utilities.send_reply(self, msg, pocket:list_pocket_items(access_token))
utilities.send_reply(msg, pocket:list_pocket_items(access_token))
return
end
end

View File

@ -7,7 +7,7 @@ post_photo.triggers = {
'/nil'
}
function post_photo:pre_process(msg, self, config)
function post_photo:pre_process(msg, config)
if not msg.document then return msg end -- Ignore
local mime_type = msg.document.mime_type
local valid_mimetypes = {['image/jpeg'] = true, ['image/png'] = true, ['image/bmp'] = true}
@ -20,15 +20,15 @@ function post_photo:pre_process(msg, self, config)
return
end
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
-- Saving file to the Telegram Cloud
local request = bindings.request(self, 'getFile', {
local request = bindings.request('getFile', {
file_id = file_id
} )
local download_url = 'https://api.telegram.org/file/bot'..config.bot_api_key..'/'..request.result.file_path
local file = download_to_file(download_url, msg.file_name)
utilities.send_photo(self, msg.chat.id, file, msg.caption, msg.message_id)
utilities.send_photo(msg.chat.id, file, msg.caption, msg.message_id)
return msg
end

View File

@ -15,9 +15,9 @@ end
function preview:inline_callback(inline_query, config, matches)
local preview_url = matches[1]
local res, code = https.request('https://brawlbot.tk/apis/simple_meta_api/?url='..URL.escape(preview_url))
if code ~= 200 then utilities.answer_inline_query(self, inline_query) return end
if code ~= 200 then abort_inline_query(inline_query) return end
local data = json.decode(res)
if data.remote_code >= 400 then utilities.answer_inline_query(self, inline_query) return end
if data.remote_code >= 400 then abort_inline_query(inline_query) return end
if data.title then
title = data.title
@ -42,13 +42,13 @@ function preview:inline_callback(inline_query, config, matches)
local message_text = '<b>'..title..'</b>'..description_in_text..'\n'..only_name
local results = '[{"type":"article","id":"77","title":"'..title..'","description":"'..description..'","url":"'..preview_url..'","thumb_url":"https://anditest.perseus.uberspace.de/inlineQuerys/generic/internet.jpg","thumb_width":150,"thumb_height":150,"hide_url":true,"reply_markup":{"inline_keyboard":[[{"text":"Webseite aufrufen","url":"'..preview_url..'"}]]},"input_message_content":{"message_text":"'..message_text..'","parse_mode":"HTML","disable_web_page_preview":true}}]'
utilities.answer_inline_query(self, inline_query, results, 3600, true)
utilities.answer_inline_query(inline_query, results, 3600, true)
end
function preview:action(msg)
local input = utilities.input_from_msg(msg)
if not input then
utilities.send_reply(self, msg, preview.doc, true)
utilities.send_reply(msg, preview.doc, true)
return
end
@ -59,18 +59,18 @@ function preview:action(msg)
local res = http.request(input)
if not res then
utilities.send_reply(self, msg, 'Bitte gebe einen validen Link an.')
utilities.send_reply(msg, 'Bitte gebe einen validen Link an.')
return
end
if res:len() == 0 then
utilities.send_reply(self, msg, 'Sorry, dieser Link lässt uns keine Vorschau erstellen.')
utilities.send_reply(msg, 'Sorry, dieser Link lässt uns keine Vorschau erstellen.')
return
end
-- Invisible zero-width, non-joiner.
local output = '<a href="' .. input .. '">' .. utilities.char.zwnj .. '</a>'
utilities.send_message(self, msg.chat.id, output, false, nil, 'HTML')
utilities.send_message(msg.chat.id, output, false, nil, 'HTML')
end
return preview

View File

@ -71,9 +71,9 @@ end
function qr:inline_callback(inline_query, config, matches)
local text = matches[1]
if string.len(text) > 200 then utilities.answer_inline_query(self, inline_query) return end
if string.len(text) > 200 then abort_inline_query(inline_query) return end
local image_url = qr:qr(text, nil, nil, 'jpg')
if not image_url then utilities.answer_inline_query(self, inline_query) return end
if not image_url then abort_inline_query(inline_query) return end
local id = 600
@ -93,7 +93,7 @@ function qr:inline_callback(inline_query, config, matches)
end
local results = results..']'
utilities.answer_inline_query(self, inline_query, results, 10000)
utilities.answer_inline_query(inline_query, results, 10000)
end
function qr:action(msg, config, matches)
@ -108,9 +108,9 @@ function qr:action(msg, config, matches)
end
local image_url = qr:qr(text, color, back)
if not image_url then utilities.send_reply(self, msg, config.errors.connection) return end
if not image_url then utilities.send_reply(msg, config.errors.connection) return end
local file = download_to_file(image_url, 'qr.png')
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
return qr

View File

@ -81,28 +81,28 @@ end
function quotes:action(msg, config, matches)
if matches[1] == "quote" then
utilities.send_message(self, msg.chat.id, quotes:get_quote(msg), true)
utilities.send_message(msg.chat.id, quotes:get_quote(msg), true)
return
elseif matches[1] == "addquote" and matches[2] then
utilities.send_reply(self, msg, quotes:save_quote(msg), true)
utilities.send_reply(msg, quotes:save_quote(msg), true)
return
elseif matches[1] == "delquote" and matches[2] then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
utilities.send_reply(self, msg, quotes:delete_quote(msg), true)
utilities.send_reply(msg, quotes:delete_quote(msg), true)
return
elseif matches[1] == "listquotes" then
local link, iserror = quotes:list_quotes(msg)
if iserror then
utilities.send_reply(self, msg, link, true)
utilities.send_reply(msg, link, true)
return
end
utilities.send_reply(self, msg, 'Ich habe eine Liste aller Zitate hochgeladen.', false, '{"inline_keyboard":[[{"text":"Alle Zitate abrufen","url":"'..link..'"}]]}')
utilities.send_reply(msg, 'Ich habe eine Liste aller Zitate hochgeladen.', false, '{"inline_keyboard":[[{"text":"Alle Zitate abrufen","url":"'..link..'"}]]}')
return
end
utilities.send_reply(self, msg, quotes.doc, true)
utilities.send_reply(msg, quotes.doc, true)
end
return quotes

View File

@ -52,14 +52,14 @@ function fun:action(msg, config, matches)
if msg.reply_to_message and msg.reply_to_message.text then
input = msg.reply_to_message.text
else
utilities.send_message(self, msg.chat.id, fun.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, fun.doc, true, msg.message_id, true)
return
end
end
local user_name = get_name(msg)
local result = fun:choose_random(user_name, input)
utilities.send_message(self, msg.chat.id, result)
utilities.send_message(msg.chat.id, result)
end
return fun

View File

@ -61,15 +61,15 @@ function reddit:action(msg, config)
end
local jstr, res = https.request(url)
if res ~= 200 then
utilities.send_reply(self, msg, config.errors.results)
utilities.send_reply(msg, config.errors.results)
else
local jdat = json.decode(jstr)
if #jdat.data.children == 0 then
utilities.send_reply(self, msg, config.errors.results)
utilities.send_reply(msg, config.errors.results)
else
local output = format_results(jdat.data.children)
output = source .. output
utilities.send_message(self, msg.chat.id, output, true, nil, true)
utilities.send_message(msg.chat.id, output, true, nil, true)
end
end
end

View File

@ -39,12 +39,12 @@ function reddit_post:action(msg, config, matches)
local subreddit = matches[1]
local reddit_code = matches[2]
local data = reddit_post:get_reddit_data(subreddit, reddit_code)
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
local text = reddit_post:send_reddit_data(data)
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
if not text then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
end
return reddit_post

View File

@ -16,13 +16,13 @@ end
function remind:action(msg, config)
local input = utilities.input(msg.text)
if not input then
utilities.send_reply(self, msg, remind.doc, true)
utilities.send_reply(msg, remind.doc, true)
return
end
local duration = tonumber(utilities.get_word(input, 1))
if not duration then
utilities.send_reply(self, msg, remind.doc, true)
utilities.send_reply(msg, remind.doc, true)
return
end
@ -33,12 +33,12 @@ function remind:action(msg, config)
end
local message = utilities.input(input)
if not message then
utilities.send_reply(self, msg, remind.doc, true)
utilities.send_reply(msg, remind.doc, true)
return
end
if #message > config.remind.max_length then
utilities.send_reply(self, msg, 'Die maximale Länge einer Erinnerung ist ' .. config.remind.max_length .. '.')
utilities.send_reply(msg, 'Die maximale Länge einer Erinnerung ist ' .. config.remind.max_length .. '.')
return
end
@ -60,7 +60,7 @@ function remind:action(msg, config)
local human_readable_time = convert_timestamp(timestamp, '%H:%M:%S')
output = 'Ich werde dich um *'..human_readable_time..' Uhr* erinnern.'
end
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
end
function remind:cron(config)
@ -73,7 +73,7 @@ function remind:cron(config)
-- 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(self, chat_id, output, true, nil, true)
local res = utilities.send_message(chat_id, output, true, nil, true)
-- 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

View File

@ -41,7 +41,7 @@ function respond:inline_callback(inline_query, config, matches)
face = '¯\\\\\\_(ツ)_/¯'
end
results = '[{"type":"article","id":"8","title":"'..face..'","input_message_content":{"message_text":"'..face..'"}}]'
utilities.answer_inline_query(self, inline_query, results, 9999)
utilities.answer_inline_query(inline_query, results, 9999)
end
function respond:action(msg, config, matches)
@ -51,35 +51,35 @@ function respond:action(msg, config, matches)
if user_name == "DefenderX" then user_name = "Deffu" end
if string.match(msg.text, "[Ff][Gg][Tt].? [Ss][Ww][Ii][Ff][Tt]") then
utilities.send_message(self, receiver, 'Dünnes Eis, '..user_name..'!')
utilities.send_message(receiver, 'Dünnes Eis, '..user_name..'!')
return
elseif string.match(msg.text, "([Ee][Ii][Nn][Zz][Ii][Gg][Ss][Tt][Ee][Ss])") then
utilities.send_message(self, receiver, '*einziges')
utilities.send_message(receiver, '*einziges')
return
elseif string.match(msg.text, "([Ee][Ii][Nn][Zz][Ii][Gg][Ss][Tt][Ee][Rr])") then
utilities.send_message(self, receiver, '*einziger')
utilities.send_message(receiver, '*einziger')
return
elseif string.match(msg.text, "([Ee][Ii][Nn][Zz][Ii][Gg][Ss][Tt][Ee])") then
utilities.send_message(self, receiver, '*einzige')
utilities.send_message(receiver, '*einzige')
return
elseif string.match(msg.text, "[Bb][Oo][Tt]%??") then
utilities.send_reply(self, msg, '*Ich bin da, '..user_name..'!*', true)
utilities.send_reply(msg, '*Ich bin da, '..user_name..'!*', true)
return
elseif string.match(msg.text, "[Ll][Oo][Dd]") then
utilities.send_message(self, receiver, 'ಠ_ಠ')
utilities.send_message(receiver, 'ಠ_ಠ')
return
elseif string.match(msg.text, "[Ll][Ff]") then
utilities.send_message(self, receiver, '( ͡° ͜ʖ ͡°)')
utilities.send_message(receiver, '( ͡° ͜ʖ ͡°)')
return
elseif string.match(msg.text, "[Nn][Bb][Cc]") or string.match(msg.text, "[Ii][Dd][Cc]") or string.match(msg.text, "[Kk][Aa]") or string.match(msg.text, "[Ii][Dd][Kk]") then
utilities.send_message(self, receiver, [[¯\_(ツ)_/¯]])
utilities.send_message(receiver, [[¯\_(ツ)_/¯]])
return
elseif string.match(msg.text, "[Ff][Rr][Oo][Ss][Cc][Hh]") then
utilities.send_message(self, receiver, '🐸🐸🐸')
utilities.send_message(receiver, '🐸🐸🐸')
return
elseif string.match(msg.text, "[Ii][Nn][Ll][Oo][Vv][Ee]") then
local file = download_to_file(BASE_URL..'/inlove.gif')
utilities.send_document(self, receiver, file)
utilities.send_document(receiver, file)
return
elseif string.match(msg.text, "[Ww][Aa][Tt]") then
local WAT_URL = BASE_URL..'/wat'
@ -95,7 +95,7 @@ function respond:action(msg, config, matches)
}
local random_wat = math.random(5)
local file = download_to_file(WAT_URL..wats[random_wat])
utilities.send_photo(self, receiver, file)
utilities.send_photo(receiver, file, nil, msg.message_id)
return
end

View File

@ -23,7 +23,7 @@ function roll:roll_dice()
end
function roll:action(msg)
utilities.send_reply(self, msg, 'Du hast eine *'..roll:roll_dice()..'* gewürfelt.', true)
utilities.send_reply(msg, 'Du hast eine *'..roll:roll_dice()..'* gewürfelt.', true)
end
return roll

View File

@ -212,42 +212,42 @@ 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
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local id = '@'..matches[3]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local output = rss:subscribe(id, matches[2])
utilities.send_reply(self, msg, output, 'HTML')
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
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local id = '@'..matches[3]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local output = rss:unsubscribe(id, matches[2])
utilities.send_reply(self, msg, output, 'HTML')
utilities.send_reply(msg, output, 'HTML')
return
elseif matches[1] == 'rss' and matches[2] then
local id = '@'..matches[2]
local result = utilities.get_chat_info(self, id)
local result = utilities.get_chat_info(id)
if not result then
utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
utilities.send_reply(msg, 'Diesen Kanal gibt es nicht!')
return
end
local chat_name = result.result.title
local output = rss:print_subs(id, chat_name)
utilities.send_reply(self, msg, output, 'HTML')
utilities.send_reply(msg, output, 'HTML')
return
end
@ -259,42 +259,39 @@ function rss:action(msg, config, matches)
if matches[1] == 'sub' and matches[2] then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local output = rss:subscribe(id, matches[2])
utilities.send_reply(self, msg, output, 'HTML')
utilities.send_reply(msg, output, 'HTML')
return
elseif matches[1] == 'del' and matches[2] then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local output = rss:unsubscribe(id, matches[2])
utilities.send_reply(self, msg, output, 'HTML', '{"hide_keyboard":true}')
utilities.send_reply(msg, output, 'HTML', '{"hide_keyboard":true}')
return
elseif matches[1] == 'del' and not matches[2] then
local list_subs, keyboard = rss:print_subs(id, chat_name)
utilities.send_reply(self, msg, list_subs, 'HTML', keyboard)
utilities.send_reply(msg, list_subs, 'HTML', keyboard)
return
elseif matches[1] == 'sync' then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
rss:cron(self)
rss:cron()
return
end
local output = rss:print_subs(id, chat_name)
utilities.send_reply(self, msg, output, 'HTML')
utilities.send_reply(msg, output, 'HTML')
return
end
function rss:cron(self_plz)
if not self.BASE_URL then
self = self_plz
end
function rss:cron()
local keys = redis:keys(get_base_redis("*", "subs"))
for k,v in pairs(keys) do
local base = string.match(v, "rss:(.+):subs") -- Get the URL base
@ -340,7 +337,7 @@ function rss:cron(self_plz)
for k2, receiver in pairs(redis:smembers(v)) do
local receiver = string.gsub(receiver, 'chat%#id', '')
local receiver = string.gsub(receiver, 'user%#id', '')
utilities.send_message(self, receiver, text, true, nil, 'HTML')
utilities.send_message(receiver, text, true, nil, 'HTML')
end
end
end

View File

@ -22,10 +22,10 @@ function entergroup:chat_new_user(msg, self)
return
end
local text = 'Hallo '..user_name..', willkommen bei <b>'..chat_title..'</b>!'..added_by
utilities.send_reply(self, msg, text, 'HTML')
utilities.send_reply(msg, text, 'HTML')
end
function entergroup:chat_del_user(msg, self)
function entergroup:chat_del_user(msg)
if msg.left_chat_member.id == msg.from.id then -- silent ignore, if user wasn't kicked
return
end
@ -36,7 +36,7 @@ function entergroup:chat_del_user(msg, self)
at_name = ''
end
local text = '<b>'..user_name..'</b> wurde von <b>'..msg.from.first_name..'</b>'..at_name..' aus der Gruppe gekickt.'
utilities.send_reply(self, msg, text, 'HTML')
utilities.send_reply(msg, text, 'HTML')
end
function entergroup:action(msg, config, matches)
@ -45,7 +45,7 @@ function entergroup:action(msg, config, matches)
if matches[1] == 'new_chat_member' then
entergroup:chat_new_user(msg, self)
elseif matches[1] == 'left_chat_member'then
entergroup:chat_del_user(msg, self)
entergroup:chat_del_user(msg)
end
end

View File

@ -7,8 +7,8 @@ leave_group.triggers = {
local report_to_admin = true -- set to false to not be notified, when Bot leaves groups without you
function leave_group:check_for_admin(msg, self, config)
local result = bindings.request(self, 'getChatMember', {
function leave_group:check_for_admin(msg, config)
local result = bindings.request('getChatMember', {
chat_id = msg.chat.id,
user_id = config.admin
} )
@ -25,11 +25,11 @@ end
function leave_group:action(msg, config)
if not is_service_msg(msg) then return end -- Bad attempt at trolling!
local admin_in_group = leave_group:check_for_admin(msg, self, config)
local admin_in_group = leave_group:check_for_admin(msg, config)
if not admin_in_group then
print('Admin ist nicht in der Gruppe, verlasse sie deshalb...')
utilities.send_reply(self, msg, 'Dieser Bot wurde in eine fremde Gruppe hinzugefügt. Dies wird gemeldet!\nThis bot was added to foreign group. This incident will be reported!')
local result = bindings.request(self, 'leaveChat', {
utilities.send_reply(msg, 'Dieser Bot wurde in eine fremde Gruppe hinzugefügt. Dies wird gemeldet!\nThis bot was added to foreign group. This incident will be reported!')
local result = bindings.request('leaveChat', {
chat_id = msg.chat.id
} )
local chat_name = msg.chat.title
@ -37,7 +37,7 @@ function leave_group:action(msg, config)
local from = msg.from.name
local from_id = msg.from.id
if report_to_admin then
utilities.send_message(self, config.admin, '#WARNUNG: Bot wurde in fremde Gruppe hinzugefügt:\nGruppenname: '..chat_name..' ('..chat_id..')\nHinzugefügt von: '..from..' ('..from_id..')')
utilities.send_message(config.admin, '#WARNUNG: Bot wurde in fremde Gruppe hinzugefügt:\nGruppenname: '..chat_name..' ('..chat_id..')\nHinzugefügt von: '..from..' ('..from_id..')')
end
end
end

View File

@ -60,7 +60,7 @@ function migrate:action(msg, config, matches)
end
print('--- SUPERGROUP MIGRATION ENDED ---')
utilities.send_message(self, new_id, 'Die User-ID dieser Gruppe ist nun '..new_id..'.\nAlle Daten wurden übertragen.')
utilities.send_message(new_id, 'Die User-ID dieser Gruppe ist nun '..new_id..'.\nAlle Daten wurden übertragen.')
end
return migrate

View File

@ -33,7 +33,7 @@ end
function set:action(msg)
local input = utilities.input(msg.text)
if not input or not input:match('([^%s]+) (.+)') then
utilities.send_message(self, msg.chat.id, set.doc, true, msg.message_id, true)
utilities.send_message(msg.chat.id, set.doc, true, msg.message_id, true)
return
end
@ -46,7 +46,7 @@ function set:action(msg)
output = set:save_value(msg, name, value)
end
utilities.send_message(self, msg.chat.id, output, true, nil, true)
utilities.send_message(msg.chat.id, output, true, nil, true)
end
return set

View File

@ -37,18 +37,18 @@ function settings:action(msg, config, matches)
local hash = 'user:'..msg.from.id
if matches[1] == '⚙ Einstellungen' or matches[1] == '/settings' then
utilities.send_reply(self, msg, 'Was möchtest du einstellen?', false, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
utilities.send_reply(msg, 'Was möchtest du einstellen?', false, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
return
elseif matches[1] == '💤 AFK-Keyboard einschalten' then
redis:hset(hash, 'afk_keyboard', 'true')
utilities.send_reply(self, msg, 'Das AFK-Keyboard wurde erfolgreich *eingeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
utilities.send_reply(msg, 'Das AFK-Keyboard wurde erfolgreich *eingeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
return
elseif matches[1] == '💤 AFK-Keyboard ausschalten' then
redis:hset(hash, 'afk_keyboard', 'false')
utilities.send_reply(self, msg, 'Das AFK-Keyboard wurde erfolgreich *ausgeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
utilities.send_reply(msg, 'Das AFK-Keyboard wurde erfolgreich *ausgeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}')
return
elseif matches[1] == '❌ Einstellungen verstecken' then
utilities.send_reply(self, msg, 'Um die Einstellungen wieder einzublenden, führe /settings aus.', true, '{"hide_keyboard":true}')
utilities.send_reply(msg, 'Um die Einstellungen wieder einzublenden, führe /settings aus.', true, '{"hide_keyboard":true}')
return
end
end

View File

@ -6,13 +6,13 @@ end
function shell:action(msg, config)
if not is_sudo(msg, config) then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
end
local input = utilities.input(msg.text)
if not input then
utilities.send_reply(self, msg, 'Bitte gib ein Kommando ein.')
utilities.send_reply(msg, 'Bitte gib ein Kommando ein.')
return
end
input = input:gsub('', '--')
@ -25,7 +25,7 @@ function shell:action(msg, config)
end
output = output:gsub('<pre>%\n', '<pre>')
output = output:gsub('%\n%\n</pre>', '</pre>')
utilities.send_message(self, msg.chat.id, output, true, msg.message_id, 'HTML')
utilities.send_message(msg.chat.id, output, true, msg.message_id, 'HTML')
end
return shell

View File

@ -9,7 +9,7 @@ end
function site_header:action(msg, config, matches)
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
end
local url = matches[2]
@ -20,7 +20,7 @@ function site_header:action(msg, config, matches)
end
local output = io.popen(input):read('*all')
output = '```\n' .. output .. '\n```'
utilities.send_reply(self, msg, output, true)
utilities.send_reply(msg, output, true)
end
return site_header

View File

@ -30,8 +30,8 @@ end
function soundcloud:action(msg, config, matches)
local text = soundcloud:send_soundcloud_info(matches[1])
if not text then utilities.send_reply(self, msg, config.errors.connection) return end
utilities.send_reply(self, msg, text, true)
if not text then utilities.send_reply(msg, config.errors.connection) return end
utilities.send_reply(msg, text, true)
end
return soundcloud

View File

@ -7,9 +7,9 @@ speedtest.triggers = {
function speedtest:action(msg, config, matches)
local url = 'http://www.speedtest.net/result/'..matches[1]..'.png'
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_typing(msg.chat.id, 'upload_photo')
local file = download_to_file(url)
utilities.send_photo(self, msg.chat.id, file, nil, msg.message_id)
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
end
return speedtest

View File

@ -15,7 +15,7 @@ function spotify:get_track_data(track)
return data
end
function spotify:send_track_data(data, self, msg)
function spotify:send_track_data(data, msg)
local name = data.name
local album = data.album.name
local artist = data.artists[1].name
@ -28,20 +28,20 @@ function spotify:send_track_data(data, self, msg)
local text = '*'..name..'* von *'..artist..'* aus dem Album *'..album..'* _('..duration..')_'
if preview then
utilities.send_typing(self, msg.chat.id, 'upload_audio')
utilities.send_typing(msg.chat.id, 'upload_audio')
local file = download_to_file(preview, name..'.mp3')
utilities.send_audio(self, msg.chat.id, file, msg.message_id, totalseconds, artist, name)
utilities.send_audio(msg.chat.id, file, msg.message_id, totalseconds, artist, name)
return
else
utilities.send_reply(self, msg, text, true)
utilities.send_reply(msg, text, true)
return
end
end
function spotify:action(msg, config, matches)
local data = spotify:get_track_data(matches[1])
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
spotify:send_track_data(data, self, msg)
if not data then utilities.send_reply(msg, config.errors.connection) return end
spotify:send_track_data(data, msg)
return
end

View File

@ -79,7 +79,7 @@ function stats:chat_stats(chat_id)
return text
end
function stats:pre_process(msg, self)
function stats:pre_process(msg)
if msg.left_chat_member then
-- delete user from redis set, but keep message count
local hash = 'chat:'..msg.chat.id..':users'
@ -126,21 +126,21 @@ function stats:action(msg, config, matches)
if not matches[2] then
if msg.chat.type == 'private' then
utilities.send_reply(self, msg, 'Stats funktionieren nur in Chats!')
utilities.send_reply(msg, 'Stats funktionieren nur in Chats!')
return
else
local chat_id = msg.chat.id
utilities.send_reply(self, msg, stats:chat_stats(chat_id), 'HTML')
utilities.send_reply(msg, stats:chat_stats(chat_id), 'HTML')
return
end
end
if matches[2] == "chat" then
if msg.from.id ~= config.admin then
utilities.send_reply(self, msg, config.errors.sudo)
utilities.send_reply(msg, config.errors.sudo)
return
else
utilities.send_reply(self, msg, stats:chat_stats(matches[3]), 'HTML')
utilities.send_reply(msg, stats:chat_stats(matches[3]), 'HTML')
return
end
end

View File

@ -35,7 +35,7 @@ function steam:price_info(data)
return price
end
function steam:send_steam_data(data, self, msg)
function steam:send_steam_data(data, msg)
local description = string.sub(unescape(data.about_the_game:gsub("%b<>", "")), 1, DESC_LENTH) .. '...'
local title = data.name
local price = steam:price_info(data.price_overview)
@ -47,12 +47,12 @@ end
function steam:action(msg)
local data = steam:get_steam_data(matches[1])
if not data then utilities.send_reply(self, msg, config.errors.connection) return end
if not data then utilities.send_reply(msg, config.errors.connection) return end
local text, image_url = steam:send_steam_data(data, self, msg)
utilities.send_typing(self, msg.chat.id, 'upload_photo')
utilities.send_photo(self, msg.chat.id, download_to_file(image_url, matches[1]..'.jpg'), nil, msg.message_id)
utilities.send_reply(self, msg, text, true)
local text, image_url = steam:send_steam_data(data, msg)
utilities.send_typing(msg.chat.id, 'upload_photo')
utilities.send_photo(msg.chat.id, download_to_file(image_url, matches[1]..'.jpg'), nil, msg.message_id)
utilities.send_reply(msg, text, true)
end
return steam

Some files were not shown because too many files have changed in this diff Show More