Primeiros passos
Neste artigo, você aprenderá sobre o básico de necord, e como ele se integra ao NestJS!
Muitos dos conceitos vistos com necord são projetados para serem usados como outros componentes em um projeto NestJS. Nós recomendamos que você esteja familiarizado com a documentação do NestJS, especialmente sua seção overview, antes de começar.
O primeiro passo é instalar o necord e sua dependência, Discord.js
- npm
- Yarn
- pnpm
- Bun
npm install necord discord.js
yarn add necord discord.js
pnpm add necord discord.js
bun add necord discord.js
Você precisa instalar Node.js v18.0.0 ou mais recente para usar o Necord e o Discord.js.
Configuração do módulo
Necord é um módulo como qualquer outro, e pode ser importado como tal dentro da sua aplicação Nest.
Não tem certeza de que são módulos? Leia sobre eles no NestJS!
import { Module } from '@nestjs/common';
import { AppService } from './app.service';
import { IntentsBitField } from 'discord.js';
import { NecordModule } from 'necord';
@Module({
imports: [
NecordModule.forRoot({
token: process.env.DISCORD_TOKEN!,
intents: [IntentsBitField.Flags.Guilds],
development: [process.env.DISCORD_DEVELOPMENT_GUILD_ID!]
})
],
providers: [AppService]
})
export class DiscordModule {}
Certifique-se de configurar os intents exigidos pela sua aplicação!
NecordModuleOptions extends discord.js ClientOptions, so every Discord client option is also available. The simplified type below shows only the additional Necord-specific fields:
import type { Message, Snowflake } from 'discord.js';
type NecordPrefix = string | ((message: Message) => string | Promise<string>);
interface NecordSpecificOptions {
token: string;
prefix?: NecordPrefix;
allowTextCommandsWithoutPrefix?: boolean;
development?: Snowflake[] | false;
skipRegistration?: boolean;
}
| Propriedade | Tipo | Descrição |
|---|---|---|
token | string | Token used to authenticate the Discord client |
prefix | string or (message: Message) => string | Promise<string> | Static or message-dependent prefix for text commands |
allowTextCommandsWithoutPrefix | boolean | Allow text commands to run without a prefix |
development | Snowflake[] ou false | Guilds where application commands are registered immediately |
skipRegistration | boolean | Disable automatic registration of application commands |
Se você tem, comandos usando a propriedade guilds, o argumento global de desenvolvimento não vai sobrepor isso.
Slash Commands
O melhor jeito de interagir com seus usuários é usando Slash Commands! Slash commands permitem criar comandos com argumentos precisos e escolhas, dando aos usuários a melhor experiência.
Para criar um comando com Necord, você pode usar o decorador SlashCommand.
import { Injectable } from '@nestjs/common';
import { Context, SlashCommand, SlashCommandContext } from 'necord';
@Injectable()
export class AppService {
@SlashCommand({
name: 'ping',
description: 'Ping command!'
})
public async onPing(@Context() [interaction]: SlashCommandContext): Promise<void> {
await interaction.reply({ content: 'Pong!' });
}
}
Quando o cliente fizer o login, ele automaticamente registrará todos os comandos.
Comandos globais são armazenados em cache por até uma hora, portanto, para evitar o cache de comandos globais, você deve usar o argumento do desenvolvimento no módulo Necord. Isto irá restringir o comando para um único servidor, impedindo-o de ser pego pelo cache.
Executando a aplicação
Você pode executar o seguinte comando no seu prompt de comando do SO para iniciar a aplicação que escuta eventos da API do Discord:
- npm
- Yarn
- pnpm
- Bun
$ npm run start
$ yarn run start
$ pnpm run start
$ bun run start
Você pode ver um exemplo funcional aqui.