2.2.1 • Published 3 years ago

nestjs-discord-framework v2.2.1

Weekly downloads
15
License
MIT
Repository
github
Last release
3 years ago

NestJS Bot Platform

Installation

$ npm i --save nestjs-discord-framework

Usage

Version 1.0.0 is not supported and should be upgraded to v2.x immediately.

To use the Framework just import the BotModule in the root AppModule and supply the options. The forRoot() method supports all the Discord.JS ClientOptions. In addition there are some extra configuration properties described below:

KeyDescription
tokenThe Discord Bot accesstoken
prefixThe command prefix (optional)
BotModule.forRoot(options:BotOptions),

Asynchronous loading of the options is also possible. One approach is to use a factory function:

BotModule.forRootAsync({
  useFactory: (): BotOptions => ({
    token: 'your-token',
    prefix: '!',
  }),
});

The factory behaves like any other asynchronous provider (e.g., it can be async and it's able to inject dependencies through inject):

BotModule.forRootAsync({
  imports: [ConfigModule],
  useFactory: (configService: ConfigService): BotOptions => ({
    token: configService.get('bot-token'),
    prefix: configService.get('bot-prefix'),
  }),
  inject: [ConfigService],
});

Alternatively, you can use the useClass or useExisting syntax:

BotModule.forRootAsync({
  useClass: BotConfigService,
});

Registering Events

Make sure that all classes using the @BotEvent() decorator are registered as providers

You can subscribe to Discord events by annotating a public method of a provider with the @BotEvent(event:string) Decorator. The Parameter is the name of the event you want to listen to. You can find a full list of Events here

@Injectable()
export class EventHandler {
  @BotEvent('guildMemberAdd')
  onGuildMemberAdd(...args: any[]): void {}
}

Registering Commands

Make sure that all classes using the @BotCommand() decorator are registered as providers

To register a command annotate a public provider method with the @BotCommand(name:string) Decorator. The Parameter is the first index of the message content split by " " without the prefix.

export class HelpCommand {
  @BotCommand('help')
  help(...args: any[]): void {}
}

Client-/Instance-Injection

You can inject the Client and the instance (BotInstance) into your providers and controllers. Simply use the @InjectBotClient() and @InjectBotInstance() Decorators in the constructor:

export class InjectClient {
  constructor(@InjectBotClient() private client) {}
}

export class InjectInstance {
  constructor(@InjectBotInstance() private instance) {}
}