diff --git a/bot/bot.lua b/bot/bot.lua index 0f22156..8a21063 100644 --- a/bot/bot.lua +++ b/bot/bot.lua @@ -4,8 +4,6 @@ -- lrexlib = require("rex_pcre") VERSION = 'v0.6' - - plugins = {} -- taken from http://stackoverflow.com/a/11130774/3163199 function scandir(directory) @@ -16,16 +14,7 @@ end return t end - - -- load all plugins in the plugins/ directory - for k, v in pairs(scandir("plugins")) do - if not (v:sub(0, 1) == ".") then - print("Loading plugin", v) - t = loadfile("plugins/" .. v)() - table.insert(plugins, t) - end - end - + function on_msg_receive (msg) if msg_valid(msg) == false then return @@ -273,11 +262,6 @@ end end - -- Start and load values - config = load_config() - our_id = 0 - now = os.time() - function get_receiver(msg) if msg.to.type == 'user' then return 'user#id'..msg.from.id @@ -287,7 +271,6 @@ end end - function on_our_id (id) our_id = id end @@ -310,3 +293,23 @@ function on_binlog_replay_end () started = 1 end + + + + -- Start and load values + config = load_config() + our_id = 0 + now = os.time() + + -- load plugins + plugins = {} + + -- load all plugins in the plugins/ directory + for k, v in pairs(scandir("plugins")) do + if not (v:sub(0, 1) == ".") then + print("Loading plugin", v) + t = loadfile("plugins/" .. v)() + table.insert(plugins, t) + end + end + diff --git a/bot/config.json b/bot/config.json index 8bdb0a2..6dcdc89 100644 --- a/bot/config.json +++ b/bot/config.json @@ -2,5 +2,11 @@ "log_file": "/var/www/html/log.txt", "sh_enabled": false, "sudo_users": [ 0, 1 ], - "values": { } -} \ No newline at end of file + "values": { }, + "twitter": { + "consumer_key" : "", + "consumer_secret" : "", + "access_token" : "", + "access_token_secret" : "" + } +} diff --git a/plugins/twitter.lua b/plugins/twitter.lua new file mode 100644 index 0000000..b40899c --- /dev/null +++ b/plugins/twitter.lua @@ -0,0 +1,70 @@ +local OAuth = require "OAuth" + +local consumer_key = config.twitter.consumer_key +local consumer_secret = config.twitter.consumer_secret +local access_token = config.twitter.access_token +local access_token_secret = config.twitter.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 run(msg, matches) + + local twitter_url = "https://api.twitter.com/1.1/statuses/show/" .. matches[1] .. ".json" + + print(twitter_url) + + local response_code, response_headers, response_status_line, response_body = client:PerformRequest("GET", twitter_url) + print(response_body) + local response = json:decode(response_body) + + print("response = ", response) + + local header = "Tweet from " .. response.user.name .. " (@" .. response.user.screen_name .. ")\n" + local text = response.text + + -- replace short URLs + if response.entities.url then + for k, v in pairs(response.entities.urls) do + local short = v.url + local long = v.expanded_url + text = text:gsub(short, long) + end + end + + -- remove images + local images = {} + if response.entities.media then + for k, v in pairs(response.entities.media) do + local url = v.url + local pic = v.media_url + text = text:gsub(url, "") + table.insert(images, pic) + end + end + + -- send the parts + local receiver = get_receiver(msg) + send_msg(receiver, header .. "\n" .. text, ok_cb, false) + for k, v in pairs(images) do + local file = download_to_file(v) + send_photo(receiver, file, ok_cb, false) + end + + return nil +end + +return { + description = "Shows a tweet", + usage = "", + patterns = {"https://twitter.com/[^/]+/status/([0-9]+)"}, + run = run +} + + diff --git a/plugins/twitter_send.lua b/plugins/twitter_send.lua new file mode 100644 index 0000000..67454af --- /dev/null +++ b/plugins/twitter_send.lua @@ -0,0 +1,34 @@ +local OAuth = require "OAuth" + +local consumer_key = config.twitter.consumer_key +local consumer_secret = config.twitter.consumer_secret +local access_token = config.twitter.access_token +local access_token_secret = config.twitter.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 run(msg, matches) + + local response_code, response_headers, response_status_line, response_body = + client:PerformRequest("POST", "https://api.twitter.com/1.1/statuses/update.json", { + status = matches[1] + }) + if response_code ~= 200 then + return "Error: "..response_code + end + return "Tweet enviado" +end + +return { + description = "Sends a tweet", + usage = "!tw [text]", + patterns = {"!tw (.+)"}, + run = run +} \ No newline at end of file