![Oracle Drags Its Feet in the JavaScript Trademark Dispute](https://cdn.sanity.io/images/cgdhsj6q/production/919c3b22c24f93884c548d60cbb338e819ff2435-1024x1024.webp?w=400&fit=max&auto=format)
Security News
Oracle Drags Its Feet in the JavaScript Trademark Dispute
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
nestjs-telegraf
Advanced tools
$ 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.
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 {
Start,
Help,
On,
Hears,
Context,
} from 'nestjs-telegraf';
@Injectable()
export class AppService {
@Start()
start(ctx: Context) {
ctx.reply('Welcome');
}
@Help()
help(ctx: Context) {
ctx.reply('Send me a sticker');
}
@On('sticker')
on(ctx: Context) {
ctx.reply('👍');
}
@Hears('hi')
hears(ctx: Context) {
ctx.reply('Hey there');
}
}
At times you may need to access the native Telegraf
instance. For example, you may want to connect stage middleware. You can inject the Telegraf by using the @InjectBot()
decorator as follows:
import { Injectable } from '@nestjs/common';
import { InjectBot, TelegrafProvider } from 'nestjs-telegraf';
@Injectable()
export class BotSettingsService {
constructor(@InjectBot() private bot: TelegrafProvider) {}
}
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.forFeature(telegrafModuleConfig)],
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 {
createTelegrafOptions(): 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.forFeature(telegrafModuleConfig)],
useExisting: ConfigService,
});
If you want to configure a telegram bot webhook, you need to get a middleware from TelegrafProvider
for connect it in your main.ts
file.
To access it, you must use the app.get()
method, followed by the provider reference:
const telegrafProvider = app.get('TelegrafProvider');
Now you can connect middleware:
app.use(telegrafProvider.webhookCallback('/secret-path'));
The last step is to specify launchOptions in forRoot
method:
TelegrafModule.forRootAsync({
imports: [ConfigModule.forFeature(telegrafModuleConfig)],
useFactory: async (configService: ConfigService) => ({
token: configService.get<string>('TELEGRAM_BOT_TOKEN'),
launchOptions: {
webhook: {
domain: 'domain.tld',
hookPath: '/secret-path',
}
}
}),
inject: [ConfigService],
});
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.
Nest is MIT licensed.
Thanks goes to these wonderful people (emoji key):
Eldar Salimzebarov 🐛 | Vito Macchia 💻 🐛 | KITAHARA SETSUNA 💻 🐛 | Aleksandr Bukhalo 💻 📖 👀 | Vyacheslav Saloid 🐛 |
This project follows the all-contributors specification. Contributions of any kind welcome!
FAQs
Telegraf module for NestJS
The npm package nestjs-telegraf receives a total of 3,276 weekly downloads. As such, nestjs-telegraf popularity was classified as popular.
We found that nestjs-telegraf demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Oracle seeks to dismiss fraud claims in the JavaScript trademark dispute, delaying the case and avoiding questions about its right to the name.
Security News
The Linux Foundation is warning open source developers that compliance with global sanctions is mandatory, highlighting legal risks and restrictions on contributions.
Security News
Maven Central now validates Sigstore signatures, making it easier for developers to verify the provenance of Java packages.