Merge branch 'master' of github.com:yagop/telegram-bot

This commit is contained in:
yago 2014-11-17 20:47:16 +01:00
commit f0058d81ce
4 changed files with 133 additions and 20 deletions

View File

@ -5,8 +5,6 @@
VERSION = 'v0.6' VERSION = 'v0.6'
plugins = {}
-- taken from http://stackoverflow.com/a/11130774/3163199 -- taken from http://stackoverflow.com/a/11130774/3163199
function scandir(directory) function scandir(directory)
local i, t, popen = 0, {}, io.popen local i, t, popen = 0, {}, io.popen
@ -17,15 +15,6 @@
return t return t
end 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) function on_msg_receive (msg)
if msg_valid(msg) == false then if msg_valid(msg) == false then
return return
@ -273,11 +262,6 @@
end end
end end
-- Start and load values
config = load_config()
our_id = 0
now = os.time()
function get_receiver(msg) function get_receiver(msg)
if msg.to.type == 'user' then if msg.to.type == 'user' then
return 'user#id'..msg.from.id return 'user#id'..msg.from.id
@ -287,7 +271,6 @@
end end
end end
function on_our_id (id) function on_our_id (id)
our_id = id our_id = id
end end
@ -310,3 +293,23 @@
function on_binlog_replay_end () function on_binlog_replay_end ()
started = 1 started = 1
end 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

View File

@ -2,5 +2,11 @@
"log_file": "/var/www/html/log.txt", "log_file": "/var/www/html/log.txt",
"sh_enabled": false, "sh_enabled": false,
"sudo_users": [ 0, 1 ], "sudo_users": [ 0, 1 ],
"values": { } "values": { },
"twitter": {
"consumer_key" : "",
"consumer_secret" : "",
"access_token" : "",
"access_token_secret" : ""
}
} }

70
plugins/twitter.lua Normal file
View File

@ -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
}

34
plugins/twitter_send.lua Normal file
View File

@ -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
}