diff --git a/commands/message/utils/dictionary.js b/commands/message/utils/dictionary.js index f0f5550..85c54a0 100644 --- a/commands/message/utils/dictionary.js +++ b/commands/message/utils/dictionary.js @@ -1,5 +1,5 @@ const { createEmbed, formatPaginationEmbeds } = require('../../../labscore/utils/embed') -const { link, pill, iconPill } = require('../../../labscore/utils/markdown') +const { link, pill, iconPill, smallPill, citation, icon } = require('../../../labscore/utils/markdown') const { editOrReply } = require('../../../labscore/utils/message') const { paginator } = require('../../../labscore/client'); @@ -7,29 +7,39 @@ const { dictionary } = require('../../../labscore/api'); const { Permissions } = require("detritus-client/lib/constants"); -function createDictionaryPage(context, result){ +function createDictionaryPage(context, result, word){ let phon = '' if(result.phonetic) phon = `\n*${result.phonetic}*` let e = createEmbed("default", context, { - description: `**${link(result.source, result.word)}**${phon}`, - fields: [], - thumbnail: { - url: `https://cdn.discordapp.com/emojis/925891616986791936.png?size=4096` - } + description: `${icon("book")} **${link(`https://en.wiktionary.org/wiki/${encodeURIComponent(word.word)}`, word.word, "Definition on Wiktionary")}**`, + fields: [] }) - for(const d of result.definitions){ - let v = d.definition - if(d.example) v = v + `\n\n${iconPill("pencil", "Example")}\n> ${d.example}` - if(d.synonyms.length >= 1) v = v + `\n\n${iconPill("message", "Synonyms")}\n> *${d.synonyms.join(', ')}*` - e.fields.push({ - name: d.type, - value: v, - inline: true - }) + if(word.phonetics) e.description += smallPill(word.phonetics) + + let def = word.definitions[result] + + let ref = 1; + let defDesc = [] + + for(const d of def){ + let defItms = [`**${ref}.** `] + defItms.push(d.definition, citation(ref, d.src)) + if(d.examples) defItms.push(`\n ​ ​ ${icon("message")} *${d.examples.join(`*\n ​ ​ ${icon("message")} *`)}*`) + // Synonyms are limited to 5 to prevent overflow + if(d.synonyms) defItms.push(`\n ​ ​ ${iconPill("book", "Synonyms")} ${d.synonyms.splice(0, 5).map((s)=>smallPill(s)).join(' ')}`) + + ref++; + if([...defDesc, defItms.join(' ')].join('\n\n').length >= 1024) continue; + defDesc.push(defItms.join('')) } + e.fields.push({ + name: result, + value: defDesc.join('\n\n') + }) + let res = {"embeds": [e]} return res; } @@ -42,7 +52,7 @@ module.exports = { description: 'Returns dictionary definitions for words.', description_short: 'Dictionary word definitions.', examples: ['dictionary Walking'], - category: 'search', + category: 'utils', usage: 'define ' }, permissionsClient: [Permissions.EMBED_LINKS, Permissions.SEND_MESSAGES, Permissions.USE_EXTERNAL_EMOJIS], @@ -55,8 +65,8 @@ module.exports = { if(search.body.status == 1) return editOrReply(context, createEmbed("warning", context, search.body.message)) let pages = [] - for(const res of search.body.results){ - pages.push(createDictionaryPage(context, res)) + for(const res of Object.keys(search.body.result.definitions)){ + pages.push(createDictionaryPage(context, res, search.body.result)) } pages = formatPaginationEmbeds(pages) @@ -66,6 +76,7 @@ module.exports = { }); }catch(e){ console.log(e) + if(e.response?.body?.status && e.response.body.status == 2) return editOrReply(context, {embeds:[createEmbed("warning", context, e.response.body.message)]}) return editOrReply(context, {embeds:[createEmbed("error", context, `Unable to perform dictionary lookup.`)]}) } }, diff --git a/labscore/api/endpoints.js b/labscore/api/endpoints.js index ce5cf81..79df84f 100644 --- a/labscore/api/endpoints.js +++ b/labscore/api/endpoints.js @@ -28,7 +28,6 @@ const Api = Object.freeze({ SEARCH_BING: '/search/bing', SEARCH_BING_IMAGES: '/search/bing-images', - SEARCH_DICTIONARY: '/search/dictionary', SEARCH_GOOGLE: '/search/google', SEARCH_GOOGLE_IMAGES: '/search/google-images', SEARCH_LYRICS: '/search/lyrics', @@ -50,6 +49,7 @@ const Api = Object.freeze({ TTS_SAPI4: '/tts/sapi4', TTS_TIKTOK: '/tts/tiktok', + UTILS_DICTIONARY: '/utils/dictionary', UTILS_EMOJIPEDIA: '/utils/emojipedia', UTILS_GARFIELD: '/utils/garfield', UTILS_INFERKIT: '/utils/inferkit', diff --git a/labscore/api/index.js b/labscore/api/index.js index 0542d25..1d4db74 100644 --- a/labscore/api/index.js +++ b/labscore/api/index.js @@ -158,12 +158,6 @@ module.exports.bingImages = async function(context, query, nsfw){ }) } -module.exports.dictionary = async function(context, query){ - return await request(Api.SEARCH_DICTIONARY, "GET", {}, { - q: query - }) -} - module.exports.reverseImageSearch = async function(context, url){ return await request(Api.SEARCH_REVERSE_IMAGE, "GET", {}, { url: url @@ -290,6 +284,12 @@ module.exports.tiktok = async function(context, text, voice){ }) } +module.exports.dictionary = async function(context, query){ + return await request(Api.UTILS_DICTIONARY, "GET", {}, { + q: query + }) +} + module.exports.emojipedia = async function(context, emoji){ return await request(Api.UTILS_EMOJIPEDIA, "GET", {}, { emoji: emoji diff --git a/labscore/constants.js b/labscore/constants.js index a690bf9..4d47819 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -94,7 +94,9 @@ module.exports.ICONS = Object.freeze({ "arrow_left": "<:ico_arrowleft:1086628775644647464>", "arrow_right": "<:ico_arrowright:1086628777880191016>", "sticker": "<:ico_sticker:1096937131793985546> ", - "emoji": "<:ico_emoji:1096936794731315251>" + "emoji": "<:ico_emoji:1096936794731315251>", + "empty": "<:e:749601069298090034>", + "book": "<:ico_book:1127622851265048576>" }) const GUILD_FEATURE_ICONS = Object.freeze({