6ad9ea4314
Co-authored-by: Renovate Bot <bot@renovateapp.com> |
||
---|---|---|
.github/workflows | ||
lib | ||
.eslintrc.js | ||
.gitignore | ||
.npmignore | ||
.prettierignore | ||
.prettierrc | ||
index.d.ts | ||
index.js | ||
index.ts | ||
LICENSE.md | ||
package-lock.json | ||
package.json | ||
README.md | ||
renovate.json | ||
tsconfig.json |
A progressive Node.js framework for building efficient and scalable server-side applications.
Description
Installation
$ npm i nestjs-telegraf
Once the installation process is complete, we can import the TelegrafModule into the root AppModule.
/* app.module.ts */
import { Module } from '@nestjs/common';
import { TelegrafModule } from 'nestjs-telegraf';
@Module({
imports: [
TelegrafModule.forRoot({
token: 'TELEGRAM_BOT_TOKEN',
})
],
})
export class AppModule {}
The forRoot()
method accepts the same configuration object as Telegraf class constructor from the Telegraf package, as described here.
Telegraf methods
Each Telegraf instance method described here has own decorator in nestjs-telegraf
package. The name of the decorator corresponds to the name of the Telegraf method and starts with Telegraf
. For example @TelegrafHears
, @TelegrafOn
, @TelegrafAction
and so on.
Now let's try to repeat the example from the Telegraf documentation page.
/* app.service.ts */
import { Injectable } from '@nestjs/common';
import {
TelegrafStart,
TelegrafHelp,
TelegrafOn,
TelegrafHears,
ContextMessageUpdate,
} from 'nestjs-telegraf';
@Injectable()
export class AppService {
@TelegrafStart()
start(ctx: ContextMessageUpdate) {
ctx.reply('Welcome');
}
@TelegrafHelp()
help(ctx: ContextMessageUpdate) {
ctx.reply('Send me a sticker');
}
@TelegrafOn('sticker')
on(ctx: ContextMessageUpdate) {
ctx.reply('👍');
}
@TelegrafHears('hi')
hears(ctx: ContextMessageUpdate) {
ctx.reply('Hey there');
}
}
Async configuration
When you need to pass module options asynchronously instead of statically, use the forRootAsync() method. As with most dynamic modules, Nest provides several techniques to deal with async configuration.
One technique is to use a factory function:
TelegrafModule.forRootAsync({
useFactory: () => ({
token: 'TELEGRAM_BOT_TOKEN',
}),
});
Like other factory providers, our factory function can be async and can inject dependencies through inject.
TelegrafModule.forRootAsync({
imports: [ConfigModule],
useFactory: async (configService: ConfigService) => ({
token: configService.get<string>('TELEGRAM_BOT_TOKEN'),
}),
inject: [ConfigService],
});
Alternatively, you can configure the TelegrafModule using a class instead of a factory, as shown below:
TelegrafModule.forRootAsync({
useClass: TelegrafConfigService,
});
The construction above instantiates TelegrafConfigService
inside TelegrafModule
, using it to create the required options object. Note that in this example, the TelegrafConfigService
has to implement the TelegrafOptionsFactory
interface, as shown below. The TelegrafModule
will call the createTelegrafOptions()
method on the instantiated object of the supplied class.
@Injectable()
class TelegrafConfigService implements TelegrafOptionsFactory {
createMongooseOptions(): TelegrafModuleOptions {
return {
token: 'TELEGRAM_BOT_TOKEN',
};
}
}
If you want to reuse an existing options provider instead of creating a private copy inside the TelegrafModule
, use the useExisting
syntax.
TelegrafModule.forRootAsync({
imports: [ConfigModule],
useExisting: ConfigService,
});
Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please read more here.
People
- Authors - robotmafia Inc. & Aleksandr Bukhalo & Igor Kamyshev
- Maintainers - robotmafia Inc.
- Website - https://nestjs.com
License
Nest is MIT licensed.