From 07bb620cd16f695fc8bc49e5a5c9effbeee4e9bc Mon Sep 17 00:00:00 2001 From: derpystuff <3515180-derpystuff@users.noreply.gitlab.com> Date: Sun, 29 May 2022 00:44:14 +0200 Subject: [PATCH] [cmd] urbandictionary --- commands/message/search/urbandictionary.js | 67 ++++++++++++++++++++++ labscore/api/endpoints.js | 1 + labscore/api/index.js | 6 ++ labscore/constants.js | 51 +++++++++++++++- 4 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 commands/message/search/urbandictionary.js diff --git a/commands/message/search/urbandictionary.js b/commands/message/search/urbandictionary.js new file mode 100644 index 0000000..087de1f --- /dev/null +++ b/commands/message/search/urbandictionary.js @@ -0,0 +1,67 @@ +const { createEmbed, formatPaginationEmbeds } = require('../../../labscore/utils/embed') +const { link, icon, highlight } = require('../../../labscore/utils/markdown') +const { editOrReply } = require('../../../labscore/utils/message') +const { STATICS } = require('../../../labscore/utils/statics') + +const { paginator } = require('../../../labscore/client'); +const { urbandictionary } = require('../../../labscore/api'); + +function createUrbanPage(context, result){ + let e = createEmbed("default", context, { + description: `**${link(result.link, result.title)}**`, + fields: [] + }) + if(result.description) e.fields.push({ + name: "Description", + value: result.description.substr(0, 1023), + inline: true + }) + e.fields.push({ + name: "Stats", + value: `${icon("upvote")}${highlight(result.score.likes)} ${icon("downvote")}${highlight(result.score.dislikes)}\n**Author:** ${link(`https://www.urbandictionary.com/author.php?author=${result.author}`, result.author)}`, + inline: true + }) + if(result.example) e.fields.push({ + name: "Example", + value: result.example.substr(0, 1023), + inline: false + }) + console.log(JSON.stringify(e)) + let res = {"embeds": [e]} + return res; +} + +module.exports = { + name: 'urbandictionary', + label: 'query', + aliases: ['urban', 'ud'], + metadata: { + description: 'urban dictionary definitions (might be nsfw)', + examples: ['ud Flask'], + category: 'search', + usage: 'urbandictionary ' + }, + run: async (context, args) => { + context.triggerTyping(); + if(!args.query) return editOrReply(context, {embeds:[createEmbed("warning", context, `Missing Parameter (query).`)]}) + try{ + let search = await urbandictionary(context, args.query) + search = search.response + + let pages = [] + for(const res of search.body.results){ + pages.push(createUrbanPage(context, res)) + } + + pages = formatPaginationEmbeds(pages) + const paging = await paginator.createPaginator({ + context, + pages + }); + }catch(e){ + console.log(e) + console.log(JSON.stringify(e.errors, null, 2)) + return editOrReply(context, {embeds:[createEmbed("error", context, `Unable to perform google search.`)]}) + } + }, +}; \ No newline at end of file diff --git a/labscore/api/endpoints.js b/labscore/api/endpoints.js index 75b6a55..3645280 100644 --- a/labscore/api/endpoints.js +++ b/labscore/api/endpoints.js @@ -32,6 +32,7 @@ const Api = Object.freeze({ SEARCH_GOOGLE_IMAGES: '/search/google-images', SEARCH_LYRICS: '/search/lyrics', SEARCH_RULE34: '/search/booru', + SEARCH_URBANDICTIONARY: '/search/urbandictionary', SEARCH_WOLFRAM_ALPHA: '/search/wolfram-alpha', SEARCH_YOUTUBE: '/search/youtube', diff --git a/labscore/api/index.js b/labscore/api/index.js index a0480b6..50eb2f7 100644 --- a/labscore/api/index.js +++ b/labscore/api/index.js @@ -134,6 +134,12 @@ module.exports.bingImages = async function(context, query){ }) } +module.exports.urbandictionary = async function(context, query){ + return await request(Api.SEARCH_URBANDICTIONARY, "GET", {}, { + q: query + }) +} + module.exports.wolframAlpha = async function(context, query){ return await request(Api.SEARCH_WOLFRAM_ALPHA, "GET", {}, { q: query diff --git a/labscore/constants.js b/labscore/constants.js index 6948059..d68916d 100644 --- a/labscore/constants.js +++ b/labscore/constants.js @@ -50,7 +50,9 @@ module.exports.ICONS = Object.freeze({ "timer": "<:ico_timer:915271575274680350>", "util": "<:ico_util:903259395381690379>", "locale": "<:ico_locale:925891616986791936>", - "question": "<:ico_question:949420315677691934>" + "question": "<:ico_question:949420315677691934>", + "upvote": "<:ico_upvote:980238682353205259>", + "downvote": "<:ico_downvote:980238681971494963>" }) module.exports.WEB_ASSETS = Object.freeze({ @@ -210,4 +212,51 @@ module.exports.TIKTOK_VOICES = [ "name": "Korean - Female", "value": "kr_003" } +] + +module.exports.IMTRANSLATOR_VOICES = [ + { + "name": "English (Male)", + "value": "en" + }, + { + "name": "English (Female)", + "value": "enf" + }, + { + "name": "Chinese (Female)", + "value": "zh" + }, + { + "name": "Spanish (Carlos)", + "value": "es" + }, + { + "name": "Russian (Female)", + "value": "ru" + }, + { + "name": "French (Female)", + "value": "fr" + }, + { + "name": "German (Male)", + "value": "de" + }, + { + "name": "Italian (Male)", + "value": "it" + }, + { + "name": "Portugese (Female)", + "value": "pt" + }, + { + "name": "Japanese (Female)", + "value": "ja" + }, + { + "name": "Korean (Female)", + "value": "ko" + } ] \ No newline at end of file