aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjd <28711824+jewdev@users.noreply.github.com>2022-11-23 15:30:59 +0200
committerGitHub <noreply@github.com>2022-11-23 14:30:59 +0100
commit2788d264d4ef65b2725d6bd3ce9202285498519b (patch)
tree9e32899c22accda8aebae9c5ed2b152c26e4e2a4
parent91f1d68e29d61820b778d59f33645e59abb24247 (diff)
downloadVencord-2788d264d4ef65b2725d6bd3ce9202285498519b.tar.gz
Vencord-2788d264d4ef65b2725d6bd3ce9202285498519b.tar.bz2
Vencord-2788d264d4ef65b2725d6bd3ce9202285498519b.zip
feat(plugin): Urban Dictionary (#222)
-rw-r--r--src/plugins/dictionary.ts80
-rw-r--r--src/utils/constants.ts4
2 files changed, 84 insertions, 0 deletions
diff --git a/src/plugins/dictionary.ts b/src/plugins/dictionary.ts
new file mode 100644
index 0000000..547636d
--- /dev/null
+++ b/src/plugins/dictionary.ts
@@ -0,0 +1,80 @@
+/*
+ * 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: "Searches for a word on Urban Dictionary",
+ 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 { list: [definition] } = await (await fetch(`https://api.urbandictionary.com/v0/define?term=${args[0].value}`)).json();
+
+ if (!definition)
+ return void sendBotMessage(ctx.channel.id, { content: "No results found." });
+
+ const linkify = text => text.replace(/\[(.+?)\]/g, (_, word) => `[${word}](https://www.urbandictionary.com/define.php?term=${encodeURIComponent(word)})`);
+
+ return void sendBotMessage(ctx.channel.id, {
+ embeds: [
+ {
+ type: "rich",
+ author: {
+ name: `Definition of ${definition.word}`,
+ url: definition.permalink
+ },
+ description: linkify(definition.definition),
+ fields: [
+ {
+ name: "Example",
+ value: linkify(definition.example)
+ }
+ ],
+ color: 0xFF9900,
+ footer: { text: `👍 ${definition.thumbs_up.toString()} | 👎 ${definition.thumbs_down.toString()} | Uploaded by ${definition.author}`, icon_url: "https://www.urbandictionary.com/favicon.ico" },
+ timestamp: new Date(definition.written_on).toISOString()
+ }
+ ] as any
+ });
+ } catch (error) {
+ return void sendBotMessage(ctx.channel.id, {
+ content: `Something went wrong: \`${error}\``
+ });
+ }
+ }
+ }
+ ]
+});
diff --git a/src/utils/constants.ts b/src/utils/constants.ts
index 7563200..dc0a80d 100644
--- a/src/utils/constants.ts
+++ b/src/utils/constants.ts
@@ -148,5 +148,9 @@ export const Devs = Object.freeze({
Ducko: {
name: "Ducko",
id: 506482395269169153n
+ },
+ jewdev: {
+ name: "jewdev",
+ id: 222369866529636353n
}
});