Merge Upstream
This commit is contained in:
commit
1601165f7d
@ -31,16 +31,14 @@ function expand:inline_callback(inline_query, config, matches)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function expand:url(long_url)
|
function expand:url(long_url)
|
||||||
local response_body = {}
|
|
||||||
local request_constructor = {
|
local request_constructor = {
|
||||||
url = long_url,
|
url = long_url,
|
||||||
method = "HEAD",
|
method = "HEAD",
|
||||||
sink = ltn12.sink.table(response_body),
|
sink = ltn12.sink.null(),
|
||||||
headers = {},
|
|
||||||
redirect = false
|
redirect = false
|
||||||
}
|
}
|
||||||
|
|
||||||
local ok, response_code, response_headers, response_status_line = http.request(request_constructor)
|
local ok, response_code, response_headers = http.request(request_constructor)
|
||||||
return ok, response_headers
|
return ok, response_headers
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -47,11 +47,11 @@ end
|
|||||||
|
|
||||||
function gh_feed_check_modified(repo, cur_etag, last_date)
|
function gh_feed_check_modified(repo, cur_etag, last_date)
|
||||||
local url = BASE_URL..'/'..repo
|
local url = BASE_URL..'/'..repo
|
||||||
local response_body = {}
|
|
||||||
local request_constructor = {
|
local request_constructor = {
|
||||||
url = url,
|
url = url,
|
||||||
method = "HEAD",
|
method = "HEAD",
|
||||||
redirect = false,
|
redirect = false,
|
||||||
|
sink = ltn12.sink.null(),
|
||||||
headers = {
|
headers = {
|
||||||
Authorization = 'token '..token,
|
Authorization = 'token '..token,
|
||||||
["If-None-Match"] = cur_etag
|
["If-None-Match"] = cur_etag
|
||||||
|
@ -74,7 +74,7 @@ function notify:action(msg, config, matches)
|
|||||||
redis:hset(hash, 'notify', false)
|
redis:hset(hash, 'notify', false)
|
||||||
print('Lösche '..username..' von redis set notify:ls')
|
print('Lösche '..username..' von redis set notify:ls')
|
||||||
redis:srem('notify:ls', username)
|
redis:srem('notify:ls', username)
|
||||||
utilities.send_reply(msg, 'Du erhälst jetzt keine Benachrichtigungen mehr, wenn du angesprochen wirst.')
|
utilities.send_reply(msg, 'Du erhältst jetzt keine Benachrichtigungen mehr, wenn du angesprochen wirst.')
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
if redis:sismember('notify:ls', username) then
|
if redis:sismember('notify:ls', username) then
|
||||||
@ -87,11 +87,11 @@ function notify:action(msg, config, matches)
|
|||||||
redis:hset(hash, 'id', msg.from.id)
|
redis:hset(hash, 'id', msg.from.id)
|
||||||
print('Adde '..username..' zu redis set notify:ls')
|
print('Adde '..username..' zu redis set notify:ls')
|
||||||
redis:sadd('notify:ls', username)
|
redis:sadd('notify:ls', username)
|
||||||
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)
|
local res = utilities.send_message(msg.from.id, 'Du erhältst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true, nil, true)
|
||||||
if not res then
|
if not res then
|
||||||
utilities.send_reply(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
|
elseif msg.chat.type ~= 'private' then
|
||||||
utilities.send_reply(msg, 'Du erhälst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true)
|
utilities.send_reply(msg, 'Du erhältst jetzt Benachrichtigungen, wenn du angesprochen wirst, nutze `/notify del` zum Deaktivieren.', true)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -40,18 +40,7 @@ local client = OAuth.new(consumer_key, consumer_secret, {
|
|||||||
OAuthTokenSecret = access_token_secret
|
OAuthTokenSecret = access_token_secret
|
||||||
})
|
})
|
||||||
|
|
||||||
function twitter:action(msg, config, matches)
|
function get_tweet(response)
|
||||||
if not matches[2] then
|
|
||||||
id = matches[1]
|
|
||||||
else
|
|
||||||
id = matches[2]
|
|
||||||
end
|
|
||||||
|
|
||||||
local twitter_url = "https://api.twitter.com/1.1/statuses/show/" .. id.. ".json"
|
|
||||||
local get_params = {tweet_mode = 'extended'}
|
|
||||||
local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url, get_params)
|
|
||||||
local response = json.decode(response_body)
|
|
||||||
|
|
||||||
local full_name = response.user.name
|
local full_name = response.user.name
|
||||||
local user_name = response.user.screen_name
|
local user_name = response.user.screen_name
|
||||||
if response.user.verified then
|
if response.user.verified then
|
||||||
@ -149,8 +138,30 @@ function twitter:action(msg, config, matches)
|
|||||||
text = text..'\n\n'..quote..'\n'
|
text = text..'\n\n'..quote..'\n'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return header.."\n"..utilities.trim(text).."\n"..footer, images, videos
|
||||||
|
end
|
||||||
|
|
||||||
|
function twitter:action(msg, config, matches)
|
||||||
|
utilities.send_typing(msg.chat.id, 'typing')
|
||||||
|
if not matches[2] then
|
||||||
|
id = matches[1]
|
||||||
|
else
|
||||||
|
id = matches[2]
|
||||||
|
end
|
||||||
|
|
||||||
|
local twitter_url = "https://api.twitter.com/1.1/statuses/show/" .. id.. ".json"
|
||||||
|
local get_params = {tweet_mode = 'extended'}
|
||||||
|
local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url, get_params)
|
||||||
|
if response_code ~= 200 then
|
||||||
|
utilities.send_repl(msg, 'Twitter nicht erreichbar, Tweet existiert nicht oder User ist privat.')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local response = json.decode(response_body)
|
||||||
|
|
||||||
|
local text, images, videos = get_tweet(response)
|
||||||
|
|
||||||
-- send the parts
|
-- send the parts
|
||||||
utilities.send_reply(msg, header .. "\n" .. utilities.trim(text).."\n"..footer, 'HTML')
|
utilities.send_reply(msg, text, 'HTML')
|
||||||
for k, v in pairs(images) do
|
for k, v in pairs(images) do
|
||||||
local file = download_to_file(v)
|
local file = download_to_file(v)
|
||||||
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
|
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
|
||||||
|
33
otouto/plugins/amazon_cleaner.lua
Normal file
33
otouto/plugins/amazon_cleaner.lua
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
local cln_amzn = {}
|
||||||
|
|
||||||
|
cln_amzn.triggers = {
|
||||||
|
'amazon.(%w+)/gp/product/(.+)/(.+)',
|
||||||
|
'amazon.(%w+)/gp/product/(.+)%?(.+)',
|
||||||
|
'amazon.(%w+)/dp/(.+)/(.+)',
|
||||||
|
'amazon.(%w+)/dp/(.+)%?(.+)',
|
||||||
|
'amzn.to/(.+)'
|
||||||
|
}
|
||||||
|
|
||||||
|
function cln_amzn:action(msg, config, matches)
|
||||||
|
if #matches == 1 then
|
||||||
|
local request_constructor = {
|
||||||
|
url = 'http://amzn.to/'..matches[1],
|
||||||
|
method = "HEAD",
|
||||||
|
sink = ltn12.sink.null(),
|
||||||
|
redirect = false
|
||||||
|
}
|
||||||
|
|
||||||
|
local ok, response_code, response_headers = http.request(request_constructor)
|
||||||
|
local long_url = response_headers.location
|
||||||
|
local domain, product_id = long_url:match('amazon.(%w+)/gp/product/(.+)/(.+)')
|
||||||
|
utilities.send_reply(msg, 'Ohne Ref: https://amazon.'..domain..'/dp/'..product_id)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
text = msg.text:lower()
|
||||||
|
if text:match('tag%=.+') or text:match('linkid%=.+') then
|
||||||
|
utilities.send_reply(msg, 'Ohne Ref: https://amazon.'..matches[1]..'/dp/'..matches[2])
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return cln_amzn
|
97
otouto/plugins/tweet.lua
Normal file
97
otouto/plugins/tweet.lua
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
local tweet = {}
|
||||||
|
|
||||||
|
require('otouto/plugins/twitter')
|
||||||
|
|
||||||
|
tweet.command = 'tweet <Name>'
|
||||||
|
|
||||||
|
function tweet:init(config)
|
||||||
|
if not cred_data.tw_consumer_key then
|
||||||
|
print('Missing config value: tw_consumer_key.')
|
||||||
|
print('tweet.lua will not be enabled.')
|
||||||
|
return
|
||||||
|
elseif not cred_data.tw_consumer_secret then
|
||||||
|
print('Missing config value: tw_consumer_secret.')
|
||||||
|
print('tweet.lua will not be enabled.')
|
||||||
|
return
|
||||||
|
elseif not cred_data.tw_access_token then
|
||||||
|
print('Missing config value: tw_access_token.')
|
||||||
|
print('tweet.lua will not be enabled.')
|
||||||
|
return
|
||||||
|
elseif not cred_data.tw_access_token_secret then
|
||||||
|
print('Missing config value: tw_access_token_secret.')
|
||||||
|
print('tweet.lua will not be enabled.')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
tweet.triggers = {
|
||||||
|
"^/tweet ([%w_%.%-]+)$",
|
||||||
|
"^/tweet ([%w_%.%-]+) (last)$"
|
||||||
|
}
|
||||||
|
tweet.doc = [[*
|
||||||
|
]]..config.cmd_pat..[[tweet* _<Name>_: Zufälliger Tweet vom User mit diesem Namen
|
||||||
|
*]]..config.cmd_pat..[[tweet* _<Name>_ _[last]_: Aktuellster Tweet vom User mit diesem Namen]]
|
||||||
|
end
|
||||||
|
|
||||||
|
local twitter_url = "https://api.twitter.com/1.1/statuses/user_timeline.json"
|
||||||
|
|
||||||
|
local consumer_key = cred_data.tw_consumer_key
|
||||||
|
local consumer_secret = cred_data.tw_consumer_secret
|
||||||
|
local access_token = cred_data.tw_access_token
|
||||||
|
local access_token_secret = cred_data.tw_access_token_secret
|
||||||
|
|
||||||
|
local client = OAuth.new(consumer_key, consumer_secret, {
|
||||||
|
RequestToken = "https://api.twitter.com/oauth/request_token",
|
||||||
|
AuthorizeUser = {"https://api.twitter.com/oauth/authorize", method = "GET"},
|
||||||
|
AccessToken = "https://api.twitter.com/oauth/access_token"
|
||||||
|
}, {
|
||||||
|
OAuthToken = access_token,
|
||||||
|
OAuthTokenSecret = access_token_secret
|
||||||
|
})
|
||||||
|
|
||||||
|
function tweet:get_random_tweet(base)
|
||||||
|
local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url, base)
|
||||||
|
if response_code ~= 200 then
|
||||||
|
return "Konnte nicht verbinden, evtl. existiert der User nicht?"
|
||||||
|
end
|
||||||
|
|
||||||
|
local response = json.decode(response_body)
|
||||||
|
if #response == 0 then
|
||||||
|
return "Konnte keinen Tweet bekommen, sorry"
|
||||||
|
end
|
||||||
|
|
||||||
|
local i = math.random(#response)
|
||||||
|
rand_tweet = response[i]
|
||||||
|
return get_tweet(rand_tweet)
|
||||||
|
end
|
||||||
|
|
||||||
|
function tweet:action(msg, config, matches)
|
||||||
|
utilities.send_typing(msg.chat.id, 'typing')
|
||||||
|
local base = {tweet_mode = 'extended'}
|
||||||
|
base.screen_name = matches[1]
|
||||||
|
|
||||||
|
local count = 200
|
||||||
|
local all = false
|
||||||
|
if #matches > 1 and matches[2] == 'last' then
|
||||||
|
count = 1
|
||||||
|
end
|
||||||
|
base.count = count
|
||||||
|
|
||||||
|
local text, images, videos = tweet:get_random_tweet(base)
|
||||||
|
if not images or not videos then
|
||||||
|
utilities.send_reply(msg, text)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
-- send the parts
|
||||||
|
utilities.send_reply(msg, text, 'HTML')
|
||||||
|
for k, v in pairs(images) do
|
||||||
|
local file = download_to_file(v)
|
||||||
|
utilities.send_photo(msg.chat.id, file, nil, msg.message_id)
|
||||||
|
end
|
||||||
|
for k, v in pairs(videos) do
|
||||||
|
local file = download_to_file(v)
|
||||||
|
utilities.send_video(msg.chat.id, file, nil, msg.message_id)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return tweet
|
Reference in New Issue
Block a user