mirror of
https://github.com/Maks1mS/nestjs-telegraf.git
synced 2025-09-23 17:59:06 +03:00
!feat(): add scene support & many refactor
This commit is contained in:
1
sample/app.constants.ts
Normal file
1
sample/app.constants.ts
Normal file
@@ -0,0 +1 @@
|
||||
export const HELLO_SCENE_ID = 'HELLO_SCENE_ID';
|
@@ -2,13 +2,14 @@ import { Module } from '@nestjs/common';
|
||||
import { TelegrafModule } from '../lib';
|
||||
import { EchoService } from './echo.service';
|
||||
import { AppUpdate } from './app.update';
|
||||
import { HelloScene } from './scenes/hello.scene';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TelegrafModule.forRoot({
|
||||
token: '1467731595:AAHCvH65H9VQYKF9jE-E8c2rXsQBVAYseg8',
|
||||
token: '1467731595:AAHCvH65H9VQYKF9jE-E8c2rXsQBVAYseg8', // Don't steal >:(
|
||||
}),
|
||||
],
|
||||
providers: [EchoService, AppUpdate],
|
||||
providers: [EchoService, AppUpdate, HelloScene],
|
||||
})
|
||||
export class AppModule {}
|
||||
|
@@ -1,13 +1,14 @@
|
||||
import { Telegraf } from 'telegraf';
|
||||
import { Help, InjectBot, On, Start, Update } from '../lib/decorators';
|
||||
import { Context } from '../lib/interfaces';
|
||||
import { SceneContext, Telegraf } from 'telegraf';
|
||||
import { Command, Help, InjectBot, On, Start, Update } from '../lib';
|
||||
import { EchoService } from './echo.service';
|
||||
import { HELLO_SCENE_ID } from './app.constants';
|
||||
import { Context } from './interfaces/context.interface';
|
||||
|
||||
@Update()
|
||||
export class AppUpdate {
|
||||
constructor(
|
||||
@InjectBot()
|
||||
private readonly bot: Telegraf<Context>,
|
||||
private readonly bot: Telegraf<SceneContext>,
|
||||
private readonly echoService: EchoService,
|
||||
) {}
|
||||
|
||||
@@ -22,6 +23,11 @@ export class AppUpdate {
|
||||
await ctx.reply('Send me any text');
|
||||
}
|
||||
|
||||
@Command('scene')
|
||||
async onSceneCommand(ctx: Context): Promise<void> {
|
||||
await ctx.scene.enter(HELLO_SCENE_ID);
|
||||
}
|
||||
|
||||
@On('message')
|
||||
async onMessage(ctx: Context): Promise<void> {
|
||||
console.log('New message received');
|
||||
|
4
sample/interfaces/context.interface.ts
Normal file
4
sample/interfaces/context.interface.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import { SceneContext } from 'telegraf';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface Context extends SceneContext {}
|
29
sample/scenes/hello.scene.ts
Normal file
29
sample/scenes/hello.scene.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { HELLO_SCENE_ID } from '../app.constants';
|
||||
import { Context } from '../interfaces/context.interface';
|
||||
import { Scene, SceneEnter, SceneLeave, Command } from '../../lib';
|
||||
|
||||
@Scene(HELLO_SCENE_ID)
|
||||
export class HelloScene {
|
||||
@SceneEnter()
|
||||
async onSceneEnter(ctx: Context): Promise<void> {
|
||||
console.log('Enter to scene');
|
||||
await ctx.reply('Welcome on scene ✋');
|
||||
}
|
||||
|
||||
@SceneLeave()
|
||||
async onSceneLeave(): Promise<void> {
|
||||
console.log('Leave from scene');
|
||||
await ctx.reply('Bye Bye 👋');
|
||||
}
|
||||
|
||||
@Command('hello')
|
||||
async onHelloCommand(ctx: Context): Promise<void> {
|
||||
console.log('Use say hello');
|
||||
await ctx.reply('Hi');
|
||||
}
|
||||
|
||||
@Command('leave')
|
||||
async onLeaveCommand(ctx: Context): Promise<void> {
|
||||
await ctx.scene.leave();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user