UNPKG

hubot-scripts

Version:

Allows you to opt in to a variety of scripts

105 lines (85 loc) 3.35 kB
# Description: # Dictionary definitions with the Wordnik API. # # Dependencies: # None # # Configuration: # WORDNIK_API_KEY # # Commands: # hubot define me <word> - Grabs a dictionary definition of a word. # hubot pronounce me <word> - Links to a pronunciation of a word. # hubot spell me <word> - Suggests correct spellings of a possible word. # hubot bigram me <word> - Grabs the most frequently used bigram phrases containing this word # # Notes: # You'll need an API key from http://developer.wordnik.com/ # FIXME This should be merged with word-of-the-day.coffee # # Author: # Aupajo # markpasc module.exports = (robot) -> # Word definition robot.respond /define( me)? (.*)/i, (msg) -> word = msg.match[2] fetch_wordnik_resource(msg, word, 'definitions', {}) (err, res, body) -> definitions = JSON.parse(body) if definitions.length == 0 msg.send "No definitions for \"#{word}\" found." else reply = "Definitions for \"#{word}\":\n" lastSpeechType = null definitions = definitions.forEach (def) -> # Show the part of speech (noun, verb, etc.) when it changes if def.partOfSpeech != lastSpeechType reply += " (#{def.partOfSpeech})\n" if def.partOfSpeech != undefined # Track the part of speech lastSpeechType = def.partOfSpeech # Add the definition reply += " - #{def.text}\n" msg.send reply # Pronunciation robot.respond /(pronounce|enunciate)( me)? (.*)/i, (msg) -> word = msg.match[3] fetch_wordnik_resource(msg, word, 'audio', {}) (err, res, body) -> pronunciations = JSON.parse(body) if pronunciations.length == 0 msg.send "No pronounciation for \"#{word}\" found." else pronunciation = pronunciations[0] msg.send pronunciation.fileUrl robot.respond /spell(?: me)? (.*)/i, (msg) -> word = msg.match[1] fetch_wordnik_resource(msg, word, '', {includeSuggestions: 'true'}) (err, res, body) -> wordinfo = JSON.parse(body) if wordinfo.canonicalForm msg.send "\"#{word}\" is a word." else if not wordinfo.suggestions msg.send "No suggestions for \"#{word}\" found." else list = wordinfo.suggestions.join(', ') msg.send "Suggestions for \"#{word}\": #{list}" # Bigrams robot.respond /bigram( me)? (.*)/i, (msg) -> word = msg.match[2] fetch_wordnik_resource(msg, word, 'phrases', {}) (err, res, body) -> phrases = JSON.parse(body) if phrases.length == 0 msg.send "No bigrams for \"#{word}\" found." else reply = "Bigrams for \"#{word}\":\n" phrases = phrases.forEach (phrase) -> if phrase.gram1 != undefined and phrase.gram2 != undefined reply += "#{phrase.gram1} #{phrase.gram2}\n" msg.send reply fetch_wordnik_resource = (msg, word, resource, query, callback) -> # FIXME prefix with HUBOT_ for if process.env.WORDNIK_API_KEY == undefined msg.send "Missing WORDNIK_API_KEY env variable." return msg.http("http://api.wordnik.com/v4/word.json/#{escape(word)}/#{escape(resource)}") .query(query) .header('api_key', process.env.WORDNIK_API_KEY) .get(callback)