add autocomplete to dictionary and urbandictionary

This commit is contained in:
bignutty 2024-11-12 15:10:36 +01:00
parent c3ac88ea3f
commit 74408053dc
5 changed files with 67 additions and 3 deletions

View file

@ -7,6 +7,8 @@ const { link, iconPill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message') const { editOrReply } = require('#utils/message')
const { STATICS } = require('#utils/statics') const { STATICS } = require('#utils/statics')
const { urbanDictionary } = require('#parameters').autocomplete;
// TODO: Turn this into a general purpose permissions constant // TODO: Turn this into a general purpose permissions constant
const { Permissions, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants"); const { Permissions, ApplicationCommandOptionTypes } = require("detritus-client/lib/constants");
@ -52,7 +54,7 @@ module.exports = {
{ {
name: 'term', name: 'term',
description: 'Term to look up.', description: 'Term to look up.',
type: ApplicationCommandOptionTypes.TEXT, onAutoComplete: urbanDictionary,
required: true required: true
}, },
{ {

View file

@ -7,6 +7,8 @@ const { acknowledge } = require('#utils/interactions');
const { link, iconPill, smallPill, icon, iconLinkPill, pill } = require('#utils/markdown') const { link, iconPill, smallPill, icon, iconLinkPill, pill } = require('#utils/markdown')
const { editOrReply } = require('#utils/message') const { editOrReply } = require('#utils/message')
const { googleDictionary } = require('#parameters').autocomplete;
const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants'); const { ApplicationCommandOptionTypes } = require('detritus-client/lib/constants');
const LABELS = { const LABELS = {
@ -64,7 +66,7 @@ module.exports = {
{ {
name: 'term', name: 'term',
description: 'Term to look up.', description: 'Term to look up.',
type: ApplicationCommandOptionTypes.TEXT, onAutoComplete: googleDictionary,
required: true required: true
}, },
{ {

View file

@ -0,0 +1,34 @@
const { stringwrap } = require("#utils/markdown");
const superagent = require("superagent");
module.exports = async (context)=>{
let choices = [];
if(context.value){
try {
let suggestions = await superagent.get("https://www.google.com/complete/search")
.query({
client: "dictionary-widget",
hl: "en",
requiredfields: "corpus:en-us",
q: context.value
})
suggestions = JSON.parse(suggestions.text.substring(19,suggestions.text.length - 1))
choices = suggestions[1].map((m)=>m[0])
// Additional checks
if(choices.includes(context.value.toLowerCase())) {
choices = choices.filter((m)=>m!==context.value.toLowerCase())
choices.unshift(context.value.toLowerCase())
}
}catch(e){
// idk sucks ig?
}
}
return context.respond({ choices: choices.splice(0, 20).map((l)=>({
name: l,
value: l
}))});
}

View file

@ -0,0 +1,24 @@
const { stringwrap } = require("#utils/markdown");
const superagent = require("superagent");
module.exports = async (context)=>{
let choices = [];
if(context.value){
try {
let suggestions = await superagent.get("https://api.urbandictionary.com/v0/autocomplete-extra")
.query({
term: context.value
})
choices = suggestions.body.results
}catch(e){
// idk sucks ig?
}
}
return context.respond({ choices: choices.splice(0, 20).map((l)=>({
name: `${l.term} - ${stringwrap(l.preview, 20, false)}`,
value: l.term
}))});
}

View file

@ -1,5 +1,7 @@
module.exports = { module.exports = {
autocomplete: { autocomplete: {
translateLanguage: require('./autocomplete/translateLanguage') googleDictionary: require('./autocomplete/googleDictionary'),
translateLanguage: require('./autocomplete/translateLanguage'),
urbanDictionary: require('./autocomplete/urbanDictionary')
} }
} }