This repository has been archived on 2021-04-24. You can view files and clone it, but cannot push or open issues or pull requests.
Mikubot-2/miku/plugins/tweet.lua

97 lines
2.9 KiB
Lua

local tweet = {}
require('miku/plugins/twitter')
tweet.command = 'tweet <Name>'
function tweet:init(config)
if not cred_data.tw_consumer_key then
print('Fehlender Key: tw_consumer_key.')
print('tweet.lua wird nicht aktiviert.')
return
elseif not cred_data.tw_consumer_secret then
print('Fehlender Key: tw_consumer_secret.')
print('tweet.lua wird nicht aktiviert.')
return
elseif not cred_data.tw_access_token then
print('Fehlender Key: tw_access_token.')
print('tweet.lua wird nicht aktiviert.')
return
elseif not cred_data.tw_access_token_secret then
print('Fehlender Key: tw_access_token_secret.')
print('tweet.lua wird nicht aktiviert.')
return
end
tweet.triggers = {
"^/[Tt][Ww][Ee][Ee][Tt] ([%w_%.%-]+)$",
"^/[Tt][Ww][Ee][Ee][Tt] ([%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."
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