Function to unscape HTML XML entities and other bla

This commit is contained in:
Akamaru 2015-06-23 16:42:40 +02:00
parent 3a104f5c04
commit f0c4cb25bf

View File

@ -1,10 +1,10 @@
URL = require "socket.url"
http = require "socket.http" http = require "socket.http"
https = require "ssl.https" https = require "ssl.https"
ltn12 = require "ltn12" ltn12 = require "ltn12"
URL = require "socket.url" serpent = require "serpent"
feedparser = require "feedparser" feedparser = require "feedparser"
json = (loadfile "./libs/JSON.lua")() json = (loadfile "./libs/JSON.lua")()
serpent = (loadfile "./libs/serpent.lua")()
mimetype = (loadfile "./libs/mimetype.lua")() mimetype = (loadfile "./libs/mimetype.lua")()
redis = (loadfile "./libs/redis.lua")() redis = (loadfile "./libs/redis.lua")()
@ -63,8 +63,8 @@ function get_http_file_name(url, headers)
file_name = file_name or url:match("[^%w]+(%w+)[^%w]+$") file_name = file_name or url:match("[^%w]+(%w+)[^%w]+$")
-- Random name, hope content-type works -- Random name, hope content-type works
file_name = file_name or str:random(5) file_name = file_name or str:random(5)
-- Possible headers names
local content_type = headers["content-type"] local content_type = headers["content-type"]
local extension = nil local extension = nil
if content_type then if content_type then
@ -73,11 +73,18 @@ function get_http_file_name(url, headers)
if extension then if extension then
file_name = file_name.."."..extension file_name = file_name.."."..extension
end end
local disposition = headers["content-disposition"]
if disposition then
-- attachment; filename=CodeCogsEqn.png
file_name = disposition:match('filename=([^;]+)') or file_name
end
return file_name return file_name
end end
-- Saves file to /tmp/. If file_name isn't provided, -- Saves file to tmp/. If file_name isn't provided,
-- will get the text after the last "/" for filename -- will get the text after the last "/" for filename
-- and content-type for extension -- and content-type for extension
function download_to_file(url, file_name) function download_to_file(url, file_name)
print("Download URL: "..url) print("Download URL: "..url)
@ -117,7 +124,6 @@ function download_to_file(url, file_name)
return file_path return file_path
end end
function vardump(value) function vardump(value)
print(serpent.block(value, {comment=false})) print(serpent.block(value, {comment=false}))
end end
@ -143,10 +149,10 @@ end
-- User has privileges -- User has privileges
function is_sudo(msg) function is_sudo(msg)
local var = false local var = false
-- Check users id in config -- Check users id in config
for v,user in pairs(_config.sudo_users) do for v,user in pairs(_config.sudo_users) do
if user == msg.from.id then if user == msg.from.id then
var = true var = true
end end
end end
return var return var
@ -179,7 +185,7 @@ function plugins_names( )
-- Ends with .lua -- Ends with .lua
if (v:match(".lua$")) then if (v:match(".lua$")) then
table.insert(files, v) table.insert(files, v)
end end
end end
return files return files
end end
@ -187,11 +193,11 @@ end
-- Function name explains what it does. -- Function name explains what it does.
function file_exists(name) function file_exists(name)
local f = io.open(name,"r") local f = io.open(name,"r")
if f ~= nil then if f ~= nil then
io.close(f) io.close(f)
return true return true
else else
return false return false
end end
end end
@ -252,7 +258,6 @@ function send_photo_from_url(receiver, url, cb_function, cb_extra)
-- If callback not provided -- If callback not provided
cb_function = cb_function or ok_cb cb_function = cb_function or ok_cb
cb_extra = cb_extra or false cb_extra = cb_extra or false
local file_path = download_to_file(url, false) local file_path = download_to_file(url, false)
if not file_path then -- Error if not file_path then -- Error
local text = 'Fehler beim laden des Bildes' local text = 'Fehler beim laden des Bildes'
@ -267,7 +272,6 @@ end
function send_photo_from_url_callback(cb_extra, success, result) function send_photo_from_url_callback(cb_extra, success, result)
local receiver = cb_extra.receiver local receiver = cb_extra.receiver
local url = cb_extra.url local url = cb_extra.url
local file_path = download_to_file(url, false) local file_path = download_to_file(url, false)
if not file_path then -- Error if not file_path then -- Error
local text = 'Fehler beim laden des Bildes' local text = 'Fehler beim laden des Bildes'
@ -289,7 +293,7 @@ function send_photos_from_url(receiver, urls)
send_photos_from_url_callback(cb_extra) send_photos_from_url_callback(cb_extra)
end end
-- Use send_photos_from_url. -- Use send_photos_from_url.
-- This function might be difficult to understand. -- This function might be difficult to understand.
function send_photos_from_url_callback(cb_extra, success, result) function send_photos_from_url_callback(cb_extra, success, result)
-- cb_extra is a table containing receiver, urls and remove_path -- cb_extra is a table containing receiver, urls and remove_path
@ -396,6 +400,55 @@ function user_allowed(plugin, msg)
return true return true
end end
function send_order_msg(destination, msgs)
local cb_extra = {
destination = destination,
msgs = msgs
}
send_order_msg_callback(cb_extra, true)
end
function send_order_msg_callback(cb_extra, success, result)
local destination = cb_extra.destination
local msgs = cb_extra.msgs
local file_path = cb_extra.file_path
if file_path ~= nil then
os.remove(file_path)
print("Deleted: " .. file_path)
end
if type(msgs) == 'string' then
send_large_msg(destination, msgs)
elseif type(msgs) ~= 'table' then
return
end
if #msgs < 1 then
return
end
local msg = table.remove(msgs, 1)
local new_cb_extra = {
destination = destination,
msgs = msgs
}
if type(msg) == 'string' then
send_msg(destination, msg, send_order_msg_callback, new_cb_extra)
elseif type(msg) == 'table' then
local typ = msg[1]
local nmsg = msg[2]
new_cb_extra.file_path = nmsg
if typ == 'document' then
send_document(destination, nmsg, send_order_msg_callback, new_cb_extra)
elseif typ == 'image' or typ == 'photo' then
send_photo(destination, nmsg, send_order_msg_callback, new_cb_extra)
elseif typ == 'audio' then
send_audio(destination, nmsg, send_order_msg_callback, new_cb_extra)
elseif typ == 'video' then
send_video(destination, nmsg, send_order_msg_callback, new_cb_extra)
else
send_file(destination, nmsg, send_order_msg_callback, new_cb_extra)
end
end
end
-- Same as send_large_msg_callback but friendly params -- Same as send_large_msg_callback but friendly params
function send_large_msg(destination, text) function send_large_msg(destination, text)
local cb_extra = { local cb_extra = {
@ -472,4 +525,22 @@ function load_from_file(file, default_data)
local result = cmd:read('*all') local result = cmd:read('*all')
cmd:close() cmd:close()
return result return result
end
-- See http://stackoverflow.com/a/14899740
function unescape_html(str)
local map = {
["lt"] = "<",
["gt"] = ">",
["amp"] = "&",
["quot"] = '"',
["apos"] = "'"
}
new = string.gsub(str, '(&(#?x?)([%d%a]+);)', function(orig, n, s)
var = map[s] or n == "#" and string.char(s)
var = var or n == "#x" and string.char(tonumber(s,16))
var = var or orig
return var
end)
return new
end end