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/otouto/plugins/xkcd.lua
2016-08-13 22:46:18 -04:00

53 lines
1.6 KiB
Lua

local xkcd = {}
local HTTP = require('socket.http')
local JSON = require('dkjson')
local utilities = require('otouto.utilities')
xkcd.command = 'xkcd [i]'
xkcd.base_url = 'https://xkcd.com/info.0.json'
xkcd.strip_url = 'http://xkcd.com/%s/info.0.json'
function xkcd:init(config)
xkcd.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('xkcd', true).table
xkcd.doc = config.cmd_pat .. [[xkcd [i]
Returns the latest xkcd strip and its alt text. If a number is given, returns that number strip. If "r" is passed in place of a number, returns a random strip.]]
local jstr = HTTP.request(xkcd.base_url)
if jstr then
local data = JSON.decode(jstr)
if data then
xkcd.latest = data.num
end
end
xkcd.latest = xkcd.latest or 1700
end
function xkcd:action(msg, config)
local input = utilities.get_word(msg.text, 2)
if input == 'r' then
input = math.random(xkcd.latest)
elseif tonumber(input) then
input = tonumber(input)
else
input = xkcd.latest
end
local url = xkcd.strip_url:format(input)
local jstr, code = HTTP.request(url)
if code == 404 then
utilities.send_reply(self, msg, config.errors.results)
elseif code ~= 200 then
utilities.send_reply(self, msg, config.errors.connection)
else
local data = JSON.decode(jstr)
local output = string.format('*%s (*[%s](%s)*)*\n_%s_',
data.safe_title:gsub('*', '*\\**'),
data.num,
data.img,
data.alt:gsub('_', '_\\__')
)
utilities.send_message(self, msg.chat.id, output, false, nil, true)
end
end
return xkcd