administration.lua: /list -> /glist
wikipedia.lua: Working again, using Wikipedia's search API. reactions.lua: Bugfix, and added /facepalm.
This commit is contained in:
		| @@ -1086,7 +1086,7 @@ function administration.init_command(self_) | ||||
| 		}, | ||||
|  | ||||
| 		{ -- glist | ||||
| 			triggers = utilities.triggers(self_.info.username):t('list', false).table, | ||||
| 			triggers = utilities.triggers(self_.info.username):t('glist', false).table, | ||||
|  | ||||
| 			command = 'glist', | ||||
| 			privilege = 5, | ||||
|   | ||||
| @@ -17,7 +17,8 @@ local mapping = { | ||||
| 	['flip'] = '(╯°□°)╯︵ ┻━┻', | ||||
| 	['homo'] = '┌(┌ ^o^)┐', | ||||
| 	['look'] = 'ಠ_ಠ', | ||||
| 	['shots?'] = 'SHOTS FIRED' | ||||
| 	['shots?'] = 'SHOTS FIRED', | ||||
| 	['facepalm'] = '(-‸ლ)' | ||||
| } | ||||
|  | ||||
| local help | ||||
| @@ -27,7 +28,7 @@ function reactions:init() | ||||
| 	help = 'Reactions:\n' | ||||
| 	reactions.triggers = utilities.triggers(self.info.username):t('reactions').table | ||||
| 	for trigger,reaction in pairs(mapping) do | ||||
| 		help = help .. '• ' .. utilities.INVOCATION_PATTERN..trigger .. trigger:gsub('.%?', '') .. ': ' .. reaction .. '\n' | ||||
| 		help = help .. '• ' .. utilities.INVOCATION_PATTERN .. trigger:gsub('.%?', '') .. ': ' .. reaction .. '\n' | ||||
| 		table.insert(reactions.triggers, utilities.INVOCATION_PATTERN..trigger) | ||||
| 		table.insert(reactions.triggers, utilities.INVOCATION_PATTERN..trigger..'@'..self.info.username:lower()) | ||||
| 	end | ||||
|   | ||||
| @@ -17,8 +17,19 @@ function wikipedia:init() | ||||
| 	wikipedia.triggers = utilities.triggers(self.info.username):t('wikipedia', true):t('wiki', true):t('w', true).table | ||||
| end | ||||
|  | ||||
| local get_title = function(search) | ||||
| 	for i,v in ipairs(search) do | ||||
| 		if not v.snippet:match('may refer to:') then | ||||
| 			return v.title | ||||
| 		end | ||||
| 	end | ||||
| 	return false | ||||
| end | ||||
|  | ||||
| function wikipedia:action(msg) | ||||
|  | ||||
| 	-- Get the query. If it's not in the message, check the replied-to message. | ||||
| 	-- If those don't exist, send the help text. | ||||
| 	local input = utilities.input(msg.text) | ||||
| 	if not input then | ||||
| 		if msg.reply_to_message and msg.reply_to_message.text then | ||||
| @@ -29,32 +40,38 @@ function wikipedia:action(msg) | ||||
| 		end | ||||
| 	end | ||||
|  | ||||
| 	local gurl = 'https://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=1&q=site:wikipedia.org%20' | ||||
| 	local wurl = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exchars=4000&exsectionformat=plain&titles=' | ||||
| 	-- This kinda sucks, but whatever. | ||||
| 	input = input:gsub('#', ' sharp') | ||||
|  | ||||
| 	local jstr, res = HTTPS.request(gurl .. URL.escape(input)) | ||||
| 	-- Disclaimer: These variables will be reused. | ||||
| 	local jstr, res, jdat | ||||
|  | ||||
| 	-- All pretty standard from here. | ||||
| 	local search_url = 'https://en.wikipedia.org/w/api.php?action=query&list=search&format=json&srsearch=' | ||||
|  | ||||
| 	jstr, res = HTTPS.request(search_url .. URL.escape(input)) | ||||
| 	if res ~= 200 then | ||||
| 		bindings.sendReply(self, msg, self.config.errors.connection) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local jdat = JSON.decode(jstr) | ||||
| 	if not jdat.responseData then | ||||
| 		bindings.sendReply(self, msg, self.config.errors.connection) | ||||
| 		return | ||||
| 	end | ||||
| 	if not jdat.responseData.results[1] then | ||||
| 	jdat = JSON.decode(jstr) | ||||
| 	if jdat.query.searchinfo.totalhits == 0 then | ||||
| 		bindings.sendReply(self, msg, self.config.errors.results) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	local url = jdat.responseData.results[1].unescapedUrl | ||||
| 	local title = jdat.responseData.results[1].titleNoFormatting:gsub(' %- Wikipedia, the free encyclopedia', '') | ||||
| 	local title = get_title(jdat.query.search) | ||||
| 	if not title then | ||||
| 		bindings.sendReply(self, msg, self.config.errors.results) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| 	-- 'https://en.wikipedia.org/wiki/':len() == 30 | ||||
| 	jstr, res = HTTPS.request(wurl .. url:sub(31)) | ||||
| 	local res_url = 'https://en.wikipedia.org/w/api.php?action=query&prop=extracts&format=json&exchars=4000&exsectionformat=plain&titles=' | ||||
|  | ||||
| 	jstr, res = HTTPS.request(res_url .. URL.escape(title)) | ||||
| 	if res ~= 200 then | ||||
| 		bindings.sendReply(self, msg, self.config.error.connection) | ||||
| 		bindings.sendReply(self, msg, self.config.errors.connection) | ||||
| 		return | ||||
| 	end | ||||
|  | ||||
| @@ -68,20 +85,28 @@ function wikipedia:action(msg) | ||||
| 		text = text.extract | ||||
| 	end | ||||
|  | ||||
| 	-- Remove needless bits from the article, take only the first paragraph. | ||||
| 	text = text:gsub('</?.->', '') | ||||
| 	local l = text:find('\n') | ||||
| 	if l then | ||||
| 		text = text:sub(1, l-1) | ||||
| 	end | ||||
|  | ||||
| 	-- This block can be annoying to read. | ||||
| 	-- We use the initial title to make the url for later use. Then we remove | ||||
| 	-- the extra bits that won't be in the article. We determine whether the | ||||
| 	-- first part of the text is the title, and if so, we embolden that. | ||||
| 	-- Otherwise, we prepend the text with a bold title. Then we append a "Read | ||||
| 	-- More" link. | ||||
| 	local url = 'https://en.wikipedia.org/wiki/' .. URL.escape(title) | ||||
| 	title = title:gsub('%(.+%)', '') | ||||
| 	local esctitle = title:gsub("[%^$()%%.%[%]*+%-?]","%%%1") | ||||
| 	local output = text:gsub('%[.+%]',''):gsub(esctitle, '*%1*') .. '\n' | ||||
| 	if url:find('%(') then | ||||
| 		output = output .. url:gsub('_', '\\_') | ||||
| 	local output | ||||
| 	if string.match(text:sub(1, title:len()), title) then | ||||
| 		output = '*' .. title .. '*' .. text:sub(title:len()+1) | ||||
| 	else | ||||
| 		output = output .. '[Read more.](' .. url .. ')' | ||||
| 		output = '*' .. title:gsub('%(.+%)', '') .. '*\n' .. text:gsub('%[.+%]','') | ||||
| 	end | ||||
| 	output = output .. '\n[Read more.](' .. url:gsub('%)', '\\)') .. ')' | ||||
|  | ||||
| 	bindings.sendMessage(self, msg.chat.id, output, true, nil, true) | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 topkecleon
					topkecleon