aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/urbanDictionary/index.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/urbanDictionary/index.ts')
-rw-r--r--src/plugins/urbanDictionary/index.ts91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/plugins/urbanDictionary/index.ts b/src/plugins/urbanDictionary/index.ts
new file mode 100644
index 0000000..840fe5c
--- /dev/null
+++ b/src/plugins/urbanDictionary/index.ts
@@ -0,0 +1,91 @@
+/*
+ * Vencord, a modification for Discord's desktop app
+ * Copyright (c) 2022 Vendicated and contributors
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+*/
+
+import { ApplicationCommandOptionType, sendBotMessage } from "@api/Commands";
+import { ApplicationCommandInputType } from "@api/Commands/types";
+import { Devs } from "@utils/constants";
+import definePlugin from "@utils/types";
+
+export default definePlugin({
+ name: "UrbanDictionary",
+ description: "Search for a word on Urban Dictionary via /urban slash command",
+ authors: [Devs.jewdev],
+ dependencies: ["CommandsAPI"],
+ commands: [
+ {
+ name: "urban",
+ description: "Returns the definition of a word from Urban Dictionary",
+ inputType: ApplicationCommandInputType.BUILT_IN,
+ options: [
+ {
+ type: ApplicationCommandOptionType.STRING,
+ name: "word",
+ description: "The word to search for on Urban Dictionary",
+ required: true
+ }
+ ],
+ execute: async (args, ctx) => {
+ try {
+ const query = encodeURIComponent(args[0].value);
+ const { list: [definition] } = await (await fetch(`https://api.urbandictionary.com/v0/define?term=${query}`)).json();
+
+ if (!definition)
+ return void sendBotMessage(ctx.channel.id, { content: "No results found." });
+
+ const linkify = (text: string) => text
+ .replaceAll("\r\n", "\n")
+ .replace(/([*>_`~\\])/gsi, "\\$1")
+ .replace(/\[(.+?)\]/g, (_, word) => `[${word}](https://www.urbandictionary.com/define.php?term=${encodeURIComponent(word)} "Define '${word}' on Urban Dictionary")`)
+ .trim();
+
+ return void sendBotMessage(ctx.channel.id, {
+ embeds: [
+ {
+ type: "rich",
+ author: {
+ name: `Uploaded by "${definition.author}"`,
+ url: `https://www.urbandictionary.com/author.php?author=${encodeURIComponent(definition.author)}`,
+ },
+ title: definition.word,
+ url: `https://www.urbandictionary.com/define.php?term=${encodeURIComponent(definition.word)}`,
+ description: linkify(definition.definition),
+ fields: [
+ {
+ name: "Example",
+ value: linkify(definition.example),
+ },
+ {
+ name: "Want more definitions?",
+ value: `Check out [more definitions](https://www.urbandictionary.com/define.php?term=${query} "Define "${args[0].value}" on Urban Dictionary") on Urban Dictionary.`,
+ },
+ ],
+ color: 0xFF9900,
+ footer: { text: `👍 ${definition.thumbs_up.toString()} | 👎 ${definition.thumbs_down.toString()}`, icon_url: "https://www.urbandictionary.com/favicon.ico" },
+ timestamp: new Date(definition.written_on).toISOString(),
+ },
+ ] as any,
+ });
+ } catch (error) {
+ sendBotMessage(ctx.channel.id, {
+ content: `Something went wrong: \`${error}\``,
+ });
+ }
+ }
+ }
+ ]
+});