Übernehme Änderungen von Brawl345/Brawlbot-v2
This commit is contained in:
parent
b7ed1dbc80
commit
cd61c7bafd
@ -29,7 +29,7 @@ function bindings:request(method, parameters, file)
|
|||||||
if file and next(file) ~= nil then
|
if file and next(file) ~= nil then
|
||||||
local file_type, file_name = next(file)
|
local file_type, file_name = next(file)
|
||||||
if not file_name then return false end
|
if not file_name then return false end
|
||||||
if string.match(file_name, '/home/pi/Mikubot-V2/tmp/') then
|
if string.match(file_name, '/tmp/') then
|
||||||
local file_file = io.open(file_name, 'r')
|
local file_file = io.open(file_name, 'r')
|
||||||
local file_data = {
|
local file_data = {
|
||||||
filename = file_name,
|
filename = file_name,
|
||||||
|
14
miku/bot.lua
14
miku/bot.lua
@ -5,7 +5,7 @@ local bindings -- Load Telegram bindings.
|
|||||||
local utilities -- Load miscellaneous and cross-plugin functions.
|
local utilities -- Load miscellaneous and cross-plugin functions.
|
||||||
local redis = (loadfile "./miku/redis.lua")()
|
local redis = (loadfile "./miku/redis.lua")()
|
||||||
|
|
||||||
bot.version = '2.1'
|
bot.version = '160717
|
||||||
|
|
||||||
function bot:init(config) -- The function run when the bot is started or reloaded.
|
function bot:init(config) -- The function run when the bot is started or reloaded.
|
||||||
|
|
||||||
@ -97,6 +97,10 @@ function bot:on_msg_receive(msg, config) -- The fn run whenever a message is rec
|
|||||||
|
|
||||||
msg = utilities.enrich_message(msg)
|
msg = utilities.enrich_message(msg)
|
||||||
|
|
||||||
|
if msg.reply_to_message then
|
||||||
|
msg.reply_to_message.text = msg.reply_to_message.text or msg.reply_to_message.caption or ''
|
||||||
|
end
|
||||||
|
|
||||||
-- Support deep linking.
|
-- Support deep linking.
|
||||||
if msg.text:match('^'..config.cmd_pat..'start .+') then
|
if msg.text:match('^'..config.cmd_pat..'start .+') then
|
||||||
msg.text = config.cmd_pat .. utilities.input(msg.text)
|
msg.text = config.cmd_pat .. utilities.input(msg.text)
|
||||||
@ -108,7 +112,6 @@ function bot:on_msg_receive(msg, config) -- The fn run whenever a message is rec
|
|||||||
msg.text = string.gsub(msg.text, config.cmd_pat..'([A-Za-z0-9-_-]+)@'..self.info.username, "/%1")
|
msg.text = string.gsub(msg.text, config.cmd_pat..'([A-Za-z0-9-_-]+)@'..self.info.username, "/%1")
|
||||||
msg.text_lower = msg.text:lower()
|
msg.text_lower = msg.text:lower()
|
||||||
end
|
end
|
||||||
|
|
||||||
msg = pre_process_msg(self, msg, config)
|
msg = pre_process_msg(self, msg, config)
|
||||||
|
|
||||||
for _, plugin in ipairs(self.plugins) do
|
for _, plugin in ipairs(self.plugins) do
|
||||||
@ -155,11 +158,9 @@ function bot:process_inline_query(inline_query, config) -- When an inline query
|
|||||||
if not is_whitelisted then return end
|
if not is_whitelisted then return end
|
||||||
end
|
end
|
||||||
|
|
||||||
if inline_query.query == '' then return end
|
|
||||||
if inline_query.query:match('"') then
|
if inline_query.query:match('"') then
|
||||||
inline_query.query = inline_query.query:gsub('"', '\\"')
|
inline_query.query = inline_query.query:gsub('"', '\\"')
|
||||||
end
|
end
|
||||||
|
|
||||||
for _, plugin in ipairs(self.plugins) do
|
for _, plugin in ipairs(self.plugins) do
|
||||||
match_inline_plugins(self, inline_query, config, plugin)
|
match_inline_plugins(self, inline_query, config, plugin)
|
||||||
end
|
end
|
||||||
@ -169,7 +170,6 @@ function bot:run(config)
|
|||||||
bot.init(self, config) -- Actually start the script.
|
bot.init(self, config) -- Actually start the script.
|
||||||
|
|
||||||
while self.is_started do -- Start a loop while the bot should be running.
|
while self.is_started do -- Start a loop while the bot should be running.
|
||||||
|
|
||||||
local res = bindings.getUpdates(self, { timeout=20, offset = self.last_update+1 } )
|
local res = bindings.getUpdates(self, { timeout=20, offset = self.last_update+1 } )
|
||||||
if res then
|
if res then
|
||||||
for _,v in ipairs(res.result) do -- Go through every new message.
|
for _,v in ipairs(res.result) do -- Go through every new message.
|
||||||
@ -221,7 +221,7 @@ function pre_process_msg(self, msg, config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function match_inline_plugins(self, inline_query, config, plugin)
|
function match_inline_plugins(self, inline_query, config, plugin)
|
||||||
for _, trigger in pairs(plugin.inline_triggers or {}) do
|
for _, trigger in ipairs(plugin.inline_triggers or {}) do
|
||||||
if string.match(string.lower(inline_query.query), trigger) then
|
if string.match(string.lower(inline_query.query), trigger) then
|
||||||
local success, result = pcall(function()
|
local success, result = pcall(function()
|
||||||
for k, pattern in pairs(plugin.inline_triggers) do
|
for k, pattern in pairs(plugin.inline_triggers) do
|
||||||
@ -241,7 +241,7 @@ function match_inline_plugins(self, inline_query, config, plugin)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function match_plugins(self, msg, config, plugin)
|
function match_plugins(self, msg, config, plugin)
|
||||||
for _, trigger in pairs(plugin.triggers or {}) do
|
for _, trigger in ipairs(plugin.triggers or {}) do
|
||||||
if string.match(msg.text_lower, trigger) then
|
if string.match(msg.text_lower, trigger) then
|
||||||
-- Check if Plugin is disabled
|
-- Check if Plugin is disabled
|
||||||
if is_plugin_disabled_on_chat(plugin.name, msg) then return end
|
if is_plugin_disabled_on_chat(plugin.name, msg) then return end
|
||||||
|
@ -10,22 +10,45 @@ ninegag.command = '9gag'
|
|||||||
|
|
||||||
function ninegag:init(config)
|
function ninegag:init(config)
|
||||||
ninegag.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('9gag', true):t('9fag', true).table
|
ninegag.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('9gag', true):t('9fag', true).table
|
||||||
|
ninegag.inline_triggers = {
|
||||||
|
"^9gag"
|
||||||
|
}
|
||||||
ninegag.doc = [[*
|
ninegag.doc = [[*
|
||||||
]]..config.cmd_pat..[[9gag*: Gibt ein zufälliges Bild von den momentan populärsten 9GAG-Posts aus]]
|
]]..config.cmd_pat..[[9gag*: Gibt ein zufälliges Bild von den momentan populärsten 9GAG-Posts aus]]
|
||||||
end
|
end
|
||||||
|
|
||||||
function ninegag:get_9GAG()
|
|
||||||
local url = "http://api-9gag.herokuapp.com/"
|
local url = "http://api-9gag.herokuapp.com/"
|
||||||
|
|
||||||
|
function ninegag:get_9GAG()
|
||||||
local b,c = HTTP.request(url)
|
local b,c = HTTP.request(url)
|
||||||
if c ~= 200 then return nil end
|
if c ~= 200 then return nil end
|
||||||
local gag = JSON.decode(b)
|
local gag = JSON.decode(b)
|
||||||
-- random max json table size
|
-- random max json table size
|
||||||
local i = math.random(#gag) local link_image = gag[i].src
|
local i = math.random(#gag)
|
||||||
|
|
||||||
|
local link_image = gag[i].src
|
||||||
local title = gag[i].title
|
local title = gag[i].title
|
||||||
local post_url = gag[i].url
|
local post_url = gag[i].url
|
||||||
return link_image, title, post_url
|
return link_image, title, post_url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function ninegag:inline_callback(inline_query, config)
|
||||||
|
local res, code = HTTP.request(url)
|
||||||
|
if code ~= 200 then return end
|
||||||
|
local gag = JSON.decode(res)
|
||||||
|
|
||||||
|
local results = '['
|
||||||
|
for n in pairs(gag) do
|
||||||
|
local title = gag[n].title:gsub('"', '\\"')
|
||||||
|
results = results..'{"type":"photo","id":"'..math.random(100000000000000000)..'","photo_url":"'..gag[n].src..'","thumb_url":"'..gag[n].src..'","caption":"'..title..'","reply_markup":{"inline_keyboard":[[{"text":"9GAG aufrufen","url":"'..gag[n].url..'"}]]}}'
|
||||||
|
if n < #gag then
|
||||||
|
results = results..','
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local results = results..']'
|
||||||
|
utilities.answer_inline_query(self, inline_query, results, 300)
|
||||||
|
end
|
||||||
|
|
||||||
function ninegag:action(msg, config)
|
function ninegag:action(msg, config)
|
||||||
utilities.send_typing(self, msg.chat.id, 'upload_photo')
|
utilities.send_typing(self, msg.chat.id, 'upload_photo')
|
||||||
local url, title, post_url = ninegag:get_9GAG()
|
local url, title, post_url = ninegag:get_9GAG()
|
||||||
|
@ -8,6 +8,7 @@ function adfly:init(config)
|
|||||||
adfly.triggers = {
|
adfly.triggers = {
|
||||||
'adf.ly/([A-Za-z0-9-_-]+)'
|
'adf.ly/([A-Za-z0-9-_-]+)'
|
||||||
}
|
}
|
||||||
|
adfly.inline_triggers = adfly.triggers
|
||||||
adfly.doc = [[*adf.ly-Link*: Postet vollen Link]]
|
adfly.doc = [[*adf.ly-Link*: Postet vollen Link]]
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -21,13 +22,24 @@ function adfly:expand_adfly_link(adfly_code)
|
|||||||
return res
|
return res
|
||||||
end
|
end
|
||||||
|
|
||||||
function adfly:action(msg)
|
function adfly:inline_callback(inline_query, config, matches)
|
||||||
local input = msg.text
|
local adfly_code = matches[1]
|
||||||
if not input:match('adf.ly/([A-Za-z0-9-_-]+)') then
|
local hash = 'telegram:cache:adfly:'..adfly_code
|
||||||
return
|
if redis:exists(hash) == false then
|
||||||
|
url = adfly:expand_adfly_link(adfly_code)
|
||||||
|
else
|
||||||
|
url = redis:get(hash)
|
||||||
end
|
end
|
||||||
|
|
||||||
local adfly_code = input:match('adf.ly/([A-Za-z0-9-_-]+)')
|
if not url then return end
|
||||||
|
if url == 'NOTFOUND' then return end
|
||||||
|
|
||||||
|
local results = '[{"type":"article","id":"'..math.random(100000000000000000)..'","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)
|
||||||
|
end
|
||||||
|
|
||||||
|
function adfly:action(msg, config, matches)
|
||||||
|
local adfly_code = matches[1]
|
||||||
local hash = 'telegram:cache:adfly:'..adfly_code
|
local hash = 'telegram:cache:adfly:'..adfly_code
|
||||||
if redis:exists(hash) == false then
|
if redis:exists(hash) == false then
|
||||||
local expanded_url = adfly:expand_adfly_link(adfly_code)
|
local expanded_url = adfly:expand_adfly_link(adfly_code)
|
||||||
|
@ -48,7 +48,7 @@ function bImages:getImages(query)
|
|||||||
if images[n].encodingFormat == 'jpeg' then -- Inline-Querys MUST use JPEG photos!
|
if images[n].encodingFormat == 'jpeg' then -- Inline-Querys MUST use JPEG photos!
|
||||||
local photo_url = images[n].contentUrl
|
local photo_url = images[n].contentUrl
|
||||||
local thumb_url = images[n].thumbnailUrl
|
local thumb_url = images[n].thumbnailUrl
|
||||||
results = results..'{"type":"photo","id":"'..math.random(100000000000000000)..'","photo_url":"'..photo_url..'","thumb_url":"'..thumb_url..'","photo_width":'..images[n].width..',"photo_height":'..images[n].height..',"reply_markup":{"inline_keyboard":[[{"text":"Bing aufrufen","url":"'..images[n].webSearchUrl..'"},{"text":"Bild aufrufen","url":"'..photo_url..'"}]]}},'
|
results = results..'{"type":"photo","id":"'..math.random(100000000000000000)..'","photo_url":"'..photo_url..'","thumb_url":"'..thumb_url..'","photo_width":'..images[n].width..',"photo_height":'..images[n].height..',"reply_markup":{"inline_keyboard":[[{"text":"Bing aufrufen","url":"'..images[n].webSearchUrl..'"},{"text":"Bild öffnen","url":"'..photo_url..'"}]]}},'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ function bitly:init(config)
|
|||||||
"j.mp/([A-Za-z0-9-_-]+)",
|
"j.mp/([A-Za-z0-9-_-]+)",
|
||||||
"andib.tk/([A-Za-z0-9-_-]+)"
|
"andib.tk/([A-Za-z0-9-_-]+)"
|
||||||
}
|
}
|
||||||
|
bitly.inline_triggers = bitly.triggers
|
||||||
end
|
end
|
||||||
|
|
||||||
local BASE_URL = 'https://api-ssl.bitly.com/v3/expand'
|
local BASE_URL = 'https://api-ssl.bitly.com/v3/expand'
|
||||||
@ -26,17 +27,38 @@ function bitly:expand_bitly_link (shorturl)
|
|||||||
local access_token = cred_data.bitly_access_token
|
local access_token = cred_data.bitly_access_token
|
||||||
local url = BASE_URL..'?access_token='..access_token..'&shortUrl=https://bit.ly/'..shorturl
|
local url = BASE_URL..'?access_token='..access_token..'&shortUrl=https://bit.ly/'..shorturl
|
||||||
local res, code = https.request(url)
|
local res, code = https.request(url)
|
||||||
if code ~= 200 then return "HTTP-FEHLER" end
|
if code ~= 200 then return nil end
|
||||||
local data = json.decode(res).data.expand[1]
|
local data = json.decode(res).data.expand[1]
|
||||||
cache_data('bitly', shorturl, data)
|
cache_data('bitly', shorturl, data)
|
||||||
return data.long_url
|
return data.long_url
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function bitly:inline_callback(inline_query, config, matches)
|
||||||
|
local shorturl = matches[1]
|
||||||
|
local hash = 'telegram:cache:bitly:'..shorturl
|
||||||
|
if redis:exists(hash) == false then
|
||||||
|
url = bitly:expand_bitly_link(shorturl)
|
||||||
|
else
|
||||||
|
local data = redis:hgetall(hash)
|
||||||
|
url = data.long_url
|
||||||
|
end
|
||||||
|
|
||||||
|
if not url then return end
|
||||||
|
|
||||||
|
local results = '[{"type":"article","id":"'..math.random(100000000000000000)..'","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)
|
||||||
|
end
|
||||||
|
|
||||||
function bitly:action(msg, config, matches)
|
function bitly:action(msg, config, matches)
|
||||||
local shorturl = matches[1]
|
local shorturl = matches[1]
|
||||||
local hash = 'telegram:cache:bitly:'..shorturl
|
local hash = 'telegram:cache:bitly:'..shorturl
|
||||||
if redis:exists(hash) == false then
|
if redis:exists(hash) == false then
|
||||||
utilities.send_reply(self, msg, bitly:expand_bitly_link(shorturl))
|
local longurl = bitly:expand_bitly_link(shorturl)
|
||||||
|
if not longurl then
|
||||||
|
utilities.send_reply(self, msg, config.errors.connection)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
utilities.send_reply(self, msg, longurl)
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
local data = redis:hgetall(hash)
|
local data = redis:hgetall(hash)
|
||||||
|
@ -28,9 +28,11 @@ function control:action(msg, config)
|
|||||||
package.loaded['miku.bindings'] = nil
|
package.loaded['miku.bindings'] = nil
|
||||||
package.loaded['miku.utilities'] = nil
|
package.loaded['miku.utilities'] = nil
|
||||||
package.loaded['config'] = nil
|
package.loaded['config'] = nil
|
||||||
if msg.text_lower:match('%+config') then for k, v in pairs(require('config')) do
|
if not msg.text_lower:match('%-config') then
|
||||||
|
for k, v in pairs(require('config')) do
|
||||||
config[k] = v
|
config[k] = v
|
||||||
end end
|
end
|
||||||
|
end
|
||||||
bot.init(self, config)
|
bot.init(self, config)
|
||||||
utilities.send_reply(self, msg, 'Bot neu gestartet!')
|
utilities.send_reply(self, msg, 'Bot neu gestartet!')
|
||||||
elseif msg.text_lower:match('^'..cmd_pat..'halt') then
|
elseif msg.text_lower:match('^'..cmd_pat..'halt') then
|
||||||
|
@ -7,6 +7,9 @@ function expand:init(config)
|
|||||||
expand.triggers = {
|
expand.triggers = {
|
||||||
"^/expand (https?://[%w-_%.%?%.:/%+=&]+)$"
|
"^/expand (https?://[%w-_%.%?%.:/%+=&]+)$"
|
||||||
}
|
}
|
||||||
|
expand.inline_triggers = {
|
||||||
|
"^ex (https?://[%w-_%.%?%.:/%+=&]+)$"
|
||||||
|
}
|
||||||
|
|
||||||
expand.doc = [[*
|
expand.doc = [[*
|
||||||
]]..config.cmd_pat..[[expand* _<Kurz-URL>_: Verlängert Kurz-URL (301er/302er)]]
|
]]..config.cmd_pat..[[expand* _<Kurz-URL>_: Verlängert Kurz-URL (301er/302er)]]
|
||||||
@ -14,10 +17,26 @@ end
|
|||||||
|
|
||||||
expand.command = 'expand <Kurz-URL>'
|
expand.command = 'expand <Kurz-URL>'
|
||||||
|
|
||||||
function expand:action(msg, config, matches)
|
function expand:inline_callback(inline_query, config, matches)
|
||||||
|
local ok, response_headers = expand:url(matches[1])
|
||||||
|
if not response_headers.location then
|
||||||
|
title = 'Konnte nicht erweitern'
|
||||||
|
url = matches[1]
|
||||||
|
description = 'Sende stattdessen die kurze URL'
|
||||||
|
else
|
||||||
|
title = 'Verlängerte URL'
|
||||||
|
url = response_headers.location
|
||||||
|
description = url
|
||||||
|
end
|
||||||
|
|
||||||
|
local results = '[{"type":"article","id":"'..math.random(100000000000000000)..'","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)
|
||||||
|
end
|
||||||
|
|
||||||
|
function expand:url(long_url)
|
||||||
local response_body = {}
|
local response_body = {}
|
||||||
local request_constructor = {
|
local request_constructor = {
|
||||||
url = matches[1],
|
url = long_url,
|
||||||
method = "HEAD",
|
method = "HEAD",
|
||||||
sink = ltn12.sink.table(response_body),
|
sink = ltn12.sink.table(response_body),
|
||||||
headers = {},
|
headers = {},
|
||||||
@ -25,6 +44,11 @@ function expand:action(msg, config, matches)
|
|||||||
}
|
}
|
||||||
|
|
||||||
local ok, response_code, response_headers, response_status_line = http.request(request_constructor)
|
local ok, response_code, response_headers, response_status_line = http.request(request_constructor)
|
||||||
|
return ok, response_headers
|
||||||
|
end
|
||||||
|
|
||||||
|
function expand:action(msg, config, matches)
|
||||||
|
local ok, response_headers = expand:url(matches[1])
|
||||||
if ok and response_headers.location then
|
if ok and response_headers.location then
|
||||||
utilities.send_reply(self, msg, response_headers.location)
|
utilities.send_reply(self, msg, response_headers.location)
|
||||||
return
|
return
|
||||||
|
55
miku/plugins/giphy.lua
Normal file
55
miku/plugins/giphy.lua
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
local giphy = {}
|
||||||
|
|
||||||
|
local http = require('socket.http')
|
||||||
|
local URL = require('socket.url')
|
||||||
|
local JSON = require('dkjson')
|
||||||
|
local utilities = require('miku.utilities')
|
||||||
|
|
||||||
|
function giphy:init(config)
|
||||||
|
giphy.triggers = {
|
||||||
|
"/nil"
|
||||||
|
}
|
||||||
|
giphy.inline_triggers = {
|
||||||
|
"^(gif) (.+)",
|
||||||
|
"^(gif)$"
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
local BASE_URL = 'http://api.giphy.com/v1/gifs'
|
||||||
|
local apikey = 'dc6zaTOxFJmzC' -- public beta key
|
||||||
|
|
||||||
|
function giphy:get_gifs(query)
|
||||||
|
if not query then
|
||||||
|
url = BASE_URL..'/trending?api_key='..apikey
|
||||||
|
else
|
||||||
|
url = BASE_URL..'/search?q='..URL.escape(query)..'&api_key='..apikey
|
||||||
|
end
|
||||||
|
local res, code = http.request(url)
|
||||||
|
if code ~= 200 then return nil end
|
||||||
|
return JSON.decode(res).data
|
||||||
|
end
|
||||||
|
|
||||||
|
function giphy:inline_callback(inline_query, config, matches)
|
||||||
|
if not matches[2] then
|
||||||
|
data = giphy:get_gifs()
|
||||||
|
else
|
||||||
|
data = giphy:get_gifs(matches[2])
|
||||||
|
end
|
||||||
|
if not data then return end
|
||||||
|
if not data[1] then return end
|
||||||
|
local results = '['
|
||||||
|
|
||||||
|
for n in pairs(data) do
|
||||||
|
results = results..'{"type":"mpeg4_gif","id":"'..math.random(100000000000000000)..'","mpeg4_url":"'..data[n].images.original.mp4..'","thumb_url":"'..data[n].images.fixed_height.url..'","mpeg4_width":'..data[n].images.original.width..',"mp4_height":'..data[n].images.original.height..'}'
|
||||||
|
if n < #data then
|
||||||
|
results = results..','
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local results = results..']'
|
||||||
|
utilities.answer_inline_query(self, inline_query, results, 3600)
|
||||||
|
end
|
||||||
|
|
||||||
|
function giphy:action()
|
||||||
|
end
|
||||||
|
|
||||||
|
return giphy
|
@ -9,6 +9,9 @@ function qr:init(config)
|
|||||||
'^/qr "(%w+)" "(%w+)" (.+)$',
|
'^/qr "(%w+)" "(%w+)" (.+)$',
|
||||||
"^/qr (.+)$"
|
"^/qr (.+)$"
|
||||||
}
|
}
|
||||||
|
qr.inline_triggers = {
|
||||||
|
"^qr (https?://[%w-_%.%?%.:/%+=&]+)"
|
||||||
|
}
|
||||||
qr.doc = [[*
|
qr.doc = [[*
|
||||||
]]..config.cmd_pat..[[qr* _<Text>_: Sendet QR-Code mit diesem Text
|
]]..config.cmd_pat..[[qr* _<Text>_: Sendet QR-Code mit diesem Text
|
||||||
*]]..config.cmd_pat..[[qr* _"[Hintergrundfarbe]"_ _"[Datenfarbe]"_ _[Text]_
|
*]]..config.cmd_pat..[[qr* _"[Hintergrundfarbe]"_ _"[Datenfarbe]"_ _[Text]_
|
||||||
@ -40,12 +43,16 @@ function qr:get_hex(str)
|
|||||||
return str
|
return str
|
||||||
end
|
end
|
||||||
|
|
||||||
function qr:qr(text, color, bgcolor)
|
function qr:qr(text, color, bgcolor, img_format)
|
||||||
|
|
||||||
local url = "http://api.qrserver.com/v1/create-qr-code/?"
|
local url = "http://api.qrserver.com/v1/create-qr-code/?"
|
||||||
.."size=600x600" --fixed size otherways it's low detailed
|
.."size=600x600" --fixed size otherways it's low detailed
|
||||||
.."&data="..URL.escape(utilities.trim(text))
|
.."&data="..URL.escape(utilities.trim(text))
|
||||||
|
|
||||||
|
if img_format then
|
||||||
|
url = url..'&format='..img_format
|
||||||
|
end
|
||||||
|
|
||||||
if color then
|
if color then
|
||||||
url = url.."&color="..qr:get_hex(color)
|
url = url.."&color="..qr:get_hex(color)
|
||||||
end
|
end
|
||||||
@ -66,6 +73,30 @@ function qr:qr(text, color, bgcolor)
|
|||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function qr:inline_callback(inline_query, config, matches)
|
||||||
|
local text = matches[1]
|
||||||
|
if string.len(text) > 200 then return end
|
||||||
|
local image_url = qr:qr(text, nil, nil, 'jpg')
|
||||||
|
if not image_url then return end
|
||||||
|
|
||||||
|
local results = '[{"type":"photo","id":"'..math.random(100000000000000000)..'","photo_url":"'..image_url..'","thumb_url":"'..image_url..'","photo_width":600,"photo_height":600,"caption":"'..text..'"},'
|
||||||
|
|
||||||
|
local i = 0
|
||||||
|
while i < 29 do
|
||||||
|
i = i+1
|
||||||
|
local color = math.random(255)
|
||||||
|
local bgcolor = math.random(255)
|
||||||
|
local image_url = qr:qr(text, color, bgcolor, 'jpg')
|
||||||
|
results = results..'{"type":"photo","id":"'..math.random(100000000000000000)..'","photo_url":"'..image_url..'","thumb_url":"'..image_url..'","photo_width":600,"photo_height":600,"caption":"'..text..'"}'
|
||||||
|
if i < 29 then
|
||||||
|
results = results..','
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local results = results..']'
|
||||||
|
utilities.answer_inline_query(self, inline_query, results, 10000)
|
||||||
|
end
|
||||||
|
|
||||||
function qr:action(msg, config, matches)
|
function qr:action(msg, config, matches)
|
||||||
local text = matches[1]
|
local text = matches[1]
|
||||||
local color
|
local color
|
||||||
|
@ -66,7 +66,7 @@ function reddit:action(msg, config)
|
|||||||
end
|
end
|
||||||
local jstr, res = https.request(url)
|
local jstr, res = https.request(url)
|
||||||
if res ~= 200 then
|
if res ~= 200 then
|
||||||
utilities.send_reply(self, msg, config.errors.connection)
|
utilities.send_reply(self, msg, config.errors.results)
|
||||||
else
|
else
|
||||||
local jdat = JSON.decode(jstr)
|
local jdat = JSON.decode(jstr)
|
||||||
if #jdat.data.children == 0 then
|
if #jdat.data.children == 0 then
|
||||||
|
@ -344,7 +344,7 @@ function rss:cron(self_plz)
|
|||||||
else
|
else
|
||||||
content = ''
|
content = ''
|
||||||
end
|
end
|
||||||
text = text..'\n[[#RSS]] *'..title..'*\n'..utilities.trim(utilities.markdown_escape_simple(content))..' [Weiterlesen]('..link..')\n'
|
text = text..'\n*[*#RSS*] '..title..'*\n'..utilities.trim(utilities.markdown_escape_simple(content))..' [Weiterlesen]('..link..')\n'
|
||||||
end
|
end
|
||||||
if text ~= '' then
|
if text ~= '' then
|
||||||
local newlast = newentr[1].id
|
local newlast = newentr[1].id
|
||||||
|
@ -27,7 +27,8 @@ function twitter:init(config)
|
|||||||
end
|
end
|
||||||
|
|
||||||
twitter.triggers = {
|
twitter.triggers = {
|
||||||
'twitter.com/[^/]+/statuse?s?/([0-9]+)'
|
'twitter.com/[^/]+/statuse?s?/([0-9]+)',
|
||||||
|
'twitter.com/statuse?s?/([0-9]+)'
|
||||||
}
|
}
|
||||||
twitter.doc = [[*Twitter-Link*: Postet Tweet]]
|
twitter.doc = [[*Twitter-Link*: Postet Tweet]]
|
||||||
end
|
end
|
||||||
@ -46,12 +47,13 @@ local client = OAuth.new(consumer_key, consumer_secret, {
|
|||||||
OAuthTokenSecret = access_token_secret
|
OAuthTokenSecret = access_token_secret
|
||||||
})
|
})
|
||||||
|
|
||||||
function twitter:action(msg)
|
function twitter:action(msg, config, matches)
|
||||||
|
|
||||||
if not msg.text:match('twitter.com/[^/]+/statuse?s?/([0-9]+)') then
|
if not matches[2] then
|
||||||
return
|
id = matches[1]
|
||||||
|
else
|
||||||
|
id = matches[2]
|
||||||
end
|
end
|
||||||
local id = msg.text:match('twitter.com/[^/]+/statuse?s?/([0-9]+)')
|
|
||||||
|
|
||||||
local twitter_url = "https://api.twitter.com/1.1/statuses/show/" .. id.. ".json"
|
local twitter_url = "https://api.twitter.com/1.1/statuses/show/" .. id.. ".json"
|
||||||
local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url)
|
local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url)
|
||||||
|
@ -98,9 +98,7 @@ function get_yt_thumbnail(data)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function send_youtube_data(data, msg, self, link, sendpic)
|
function send_youtube_data(data, msg, self, link, sendpic)
|
||||||
local title = data.snippet.localized.title
|
local title = utilities.markdown_escape_simple(data.snippet.localized.title)
|
||||||
local title = title:gsub('%*', '\\*')
|
|
||||||
local title = title:gsub('`', '\\`')
|
|
||||||
-- local description = data.snippet.localized.description
|
-- local description = data.snippet.localized.description
|
||||||
local uploader = data.snippet.channelTitle
|
local uploader = data.snippet.channelTitle
|
||||||
local upload_date = makeOurDate(data.snippet.publishedAt)
|
local upload_date = makeOurDate(data.snippet.publishedAt)
|
||||||
|
@ -56,7 +56,7 @@ end
|
|||||||
-- https://core.telegram.org/bots/api#sendphoto
|
-- https://core.telegram.org/bots/api#sendphoto
|
||||||
function utilities:send_photo(chat_id, file, text, reply_to_message_id, reply_markup)
|
function utilities:send_photo(chat_id, file, text, reply_to_message_id, reply_markup)
|
||||||
if not file then return false end
|
if not file then return false end
|
||||||
local output, error = bindings.request(self, 'sendPhoto', {
|
local output = bindings.request(self, 'sendPhoto', {
|
||||||
chat_id = chat_id,
|
chat_id = chat_id,
|
||||||
caption = text or nil,
|
caption = text or nil,
|
||||||
reply_to_message_id = reply_to_message_id,
|
reply_to_message_id = reply_to_message_id,
|
||||||
@ -66,7 +66,6 @@ function utilities:send_photo(chat_id, file, text, reply_to_message_id, reply_ma
|
|||||||
os.remove(file)
|
os.remove(file)
|
||||||
print("Deleted: "..file)
|
print("Deleted: "..file)
|
||||||
end
|
end
|
||||||
vardump(error)
|
|
||||||
return output
|
return output
|
||||||
end
|
end
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user