From 9c6551c1bd7d635e8e64e7c0b3f9322a14d0fed7 Mon Sep 17 00:00:00 2001 From: socram03 Date: Wed, 13 Jul 2022 19:12:48 -0400 Subject: [PATCH] feat(examples): SlashCommand & Builders --- examples/.env.example | 1 + examples/builderComponent.ts | 58 ++++++++++++++++++++++++++++++++++++ examples/slashCommand.ts | 43 ++++++++++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 examples/.env.example create mode 100644 examples/builderComponent.ts create mode 100644 examples/slashCommand.ts diff --git a/examples/.env.example b/examples/.env.example new file mode 100644 index 0000000..23e679f --- /dev/null +++ b/examples/.env.example @@ -0,0 +1 @@ +TOKEN=YOUR_BOT_TOKEN \ No newline at end of file diff --git a/examples/builderComponent.ts b/examples/builderComponent.ts new file mode 100644 index 0000000..6fa1923 --- /dev/null +++ b/examples/builderComponent.ts @@ -0,0 +1,58 @@ +import "https://deno.land/std@0.146.0/dotenv/load.ts"; +import { + ActionRowBuilder, + ButtonBuilder, + ButtonStyles, + ComponentInteraction, + GatewayIntents, + InteractionResponseTypes, + Session, +} from "./deps.ts"; + +const token = Deno.env.get("TOKEN") ?? Deno.args[0]; + +if (!token) { + throw new Error("Please provide a token"); +} + +const intents = GatewayIntents.MessageContent | GatewayIntents.Guilds | GatewayIntents.GuildMessages; +const session = new Session({ token, intents }); + +const PREFIX = ">"; +const components = new ButtonBuilder().setCustomId("ping").setLabel("Hello!").setStyle(ButtonStyles.Success); +const row = new ActionRowBuilder().addComponents(components).toJSON(); + +session.on("ready", (payload) => { + console.log("Logged in as:", payload.user.username); +}); + +session.on("messageCreate", (message) => { + if (message.author?.bot || !message.content.startsWith(PREFIX)) { + return; + } + + const args = message.content.substring(PREFIX.length).trim().split(/\s+/gm); + const name = args.shift()?.toLowerCase(); + console.log(args, name); + + if (name === "ping") { + console.log(row) + message.reply({ components: [row] }) + .then(() => {}) + .catch(e => console.error(e)) + } +}); + +// Follow interaction event +session.on("interactionCreate", (interaction) => { + if (!interaction.isComponent()) return; + const component = interaction as ComponentInteraction; + if (component.customId == "ping") { + component.respond({ + type: InteractionResponseTypes.ChannelMessageWithSource, + data: { content: "pong!" }, + }); + } +}); + +await session.start(); \ No newline at end of file diff --git a/examples/slashCommand.ts b/examples/slashCommand.ts new file mode 100644 index 0000000..0515302 --- /dev/null +++ b/examples/slashCommand.ts @@ -0,0 +1,43 @@ +import "https://deno.land/std@0.146.0/dotenv/load.ts"; +import { CreateApplicationCommand, GatewayIntents, InteractionResponseTypes, Session } from "./deps.ts"; + +const token = Deno.env.get("TOKEN") ?? Deno.args[0]; + +if (!token) { + throw new Error("Please provide a token"); +} + +const intents = GatewayIntents.MessageContent | GatewayIntents.Guilds | GatewayIntents.GuildMessages; +const session = new Session({ token, intents }); + +const command: CreateApplicationCommand = { + name: "ping", + description: "Replies with pong!", +}; + +const guildId = ''; + +session.on("ready", async (payload) => { + console.log("Logged in as:", payload.user.username); + console.log("Creating the application commands..."); + // create command + try { + await session.createApplicationCommand(command, guildId); + console.log("Done!"); + } catch (err) { + console.error(err); + } +}); + +// Follow interaction event +session.on("interactionCreate", (interaction) => { + if (!interaction.isCommand()) return; + if (interaction.commandName === "ping") { + interaction.respond({ + type: InteractionResponseTypes.ChannelMessageWithSource, + data: { content: "pong!" }, + }); + } +}); + +await session.start() \ No newline at end of file