!feat(): add scene support & many refactor

This commit is contained in:
Arthur
2020-12-29 22:41:06 +03:00
parent b3dc258c70
commit 8c72790226
23 changed files with 232 additions and 80 deletions

1
sample/app.constants.ts Normal file
View File

@@ -0,0 +1 @@
export const HELLO_SCENE_ID = 'HELLO_SCENE_ID';

View File

@@ -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 {}

View File

@@ -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');

View File

@@ -0,0 +1,4 @@
import { SceneContext } from 'telegraf';
// eslint-disable-next-line @typescript-eslint/no-empty-interface
export interface Context extends SceneContext {}

View 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();
}
}