63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Lua
		
	
	
		
			Executable File
		
	
	
	
	
local command = 'hackernews'
 | 
						|
local doc = [[```
 | 
						|
Returns four (if group) or eight (if private message) top stories from Hacker News.
 | 
						|
Alias: /hn
 | 
						|
```]]
 | 
						|
 | 
						|
local triggers = {
 | 
						|
	'^/hackernews[@'..bot.username..']*',
 | 
						|
	'^/hn[@'..bot.username..']*'
 | 
						|
}
 | 
						|
 | 
						|
local action = function(msg)
 | 
						|
 | 
						|
	local jstr, res = HTTPS.request('https://hacker-news.firebaseio.com/v0/topstories.json')
 | 
						|
	if res ~= 200 then
 | 
						|
		sendReply(msg, config.errors.connection)
 | 
						|
		return
 | 
						|
	end
 | 
						|
 | 
						|
	local jdat = JSON.decode(jstr)
 | 
						|
 | 
						|
	local res_count = 4
 | 
						|
	if msg.chat.id == msg.from.id then
 | 
						|
		res_count = 8
 | 
						|
	end
 | 
						|
 | 
						|
	local output = '*Hacker News:*\n'
 | 
						|
	for i = 1, res_count do
 | 
						|
		local res_url = 'https://hacker-news.firebaseio.com/v0/item/' .. jdat[i] .. '.json'
 | 
						|
		jstr, res = HTTPS.request(res_url)
 | 
						|
		if res ~= 200 then
 | 
						|
			sendReply(msg, config.errors.connection)
 | 
						|
			return
 | 
						|
		end
 | 
						|
		local res_jdat = JSON.decode(jstr)
 | 
						|
		local title = res_jdat.title:gsub('%[.+%]', ''):gsub('%(.+%)', ''):gsub('&', '&')
 | 
						|
		if title:len() > 48 then
 | 
						|
			title = title:sub(1, 45) .. '...'
 | 
						|
		end
 | 
						|
		local url = res_jdat.url
 | 
						|
		if not url then
 | 
						|
			sendReply(msg, config.errors.connection)
 | 
						|
			return
 | 
						|
		end
 | 
						|
		if url:find('%(') then
 | 
						|
			output = output .. '• ' .. title .. '\n' .. url:gsub('_', '\\_') .. '\n'
 | 
						|
		else
 | 
						|
			output = output .. '• [' .. title .. '](' .. url .. ')\n'
 | 
						|
		end
 | 
						|
 | 
						|
	end
 | 
						|
 | 
						|
	sendMessage(msg.chat.id, output, true, nil, true)
 | 
						|
 | 
						|
end
 | 
						|
 | 
						|
return {
 | 
						|
	action = action,
 | 
						|
	triggers = triggers,
 | 
						|
	doc = doc,
 | 
						|
	command = command
 | 
						|
}
 |