From 3f17f7c5168ee95c0bf01093d7768e724a3db46e Mon Sep 17 00:00:00 2001 From: topkecleon Date: Fri, 13 May 2016 16:09:40 -0400 Subject: [PATCH] administration.lua: /list -> /glist wikipedia.lua: Working again, using Wikipedia's search API. reactions.lua: Bugfix, and added /facepalm. --- plugins/administration.lua | 2 +- plugins/reactions.lua | 5 +-- plugins/wikipedia.lua | 63 ++++++++++++++++++++++++++------------ 3 files changed, 48 insertions(+), 22 deletions(-) diff --git a/plugins/administration.lua b/plugins/administration.lua index ed744fe..1347edd 100644 --- a/plugins/administration.lua +++ b/plugins/administration.lua @@ -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, diff --git a/plugins/reactions.lua b/plugins/reactions.lua index 5a08052..a6bcb27 100755 --- a/plugins/reactions.lua +++ b/plugins/reactions.lua @@ -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 diff --git a/plugins/wikipedia.lua b/plugins/wikipedia.lua index 6b506c1..774b02f 100755 --- a/plugins/wikipedia.lua +++ b/plugins/wikipedia.lua @@ -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)