dictionary v2

This commit is contained in:
derpystuff 2023-07-09 17:56:47 +02:00
parent c2c8241080
commit 6a3fb1dde3
4 changed files with 40 additions and 27 deletions

View file

@ -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 <query>'
},
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.`)]})
}
},