mirror of
https://github.com/Maks1mS/nestjs-telegraf.git
synced 2025-09-23 17:59:06 +03:00
fix(sample): add all project files
This commit is contained in:
3
sample/01-complete-app/src/app.constants.ts
Normal file
3
sample/01-complete-app/src/app.constants.ts
Normal file
@@ -0,0 +1,3 @@
|
||||
export const HELLO_SCENE_ID = 'HELLO_SCENE_ID';
|
||||
|
||||
export const GreeterBotName = 'greeter';
|
25
sample/01-complete-app/src/app.module.ts
Normal file
25
sample/01-complete-app/src/app.module.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { TelegrafModule } from 'nestjs-telegraf';
|
||||
import { EchoModule } from './echo/echo.module';
|
||||
import { GreeterModule } from './greeter/greeter.module';
|
||||
import { sessionMiddleware } from './middleware/session.middleware';
|
||||
import { GreeterBotName } from './app.constants';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
TelegrafModule.forRoot({
|
||||
token: process.env.ECHO_BOT_TOKEN,
|
||||
middlewares: [sessionMiddleware],
|
||||
include: [EchoModule],
|
||||
}),
|
||||
TelegrafModule.forRoot({
|
||||
name: GreeterBotName,
|
||||
token: process.env.GREETER_BOT_TOKEN,
|
||||
middlewares: [sessionMiddleware],
|
||||
include: [GreeterModule],
|
||||
}),
|
||||
EchoModule,
|
||||
GreeterModule,
|
||||
],
|
||||
})
|
||||
export class AppModule {}
|
9
sample/01-complete-app/src/echo/echo.module.ts
Normal file
9
sample/01-complete-app/src/echo/echo.module.ts
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { EchoUpdate } from './echo.update';
|
||||
import { EchoService } from './echo.service';
|
||||
import { HelloScene } from './scenes/hello.scene';
|
||||
|
||||
@Module({
|
||||
providers: [EchoUpdate, EchoService, HelloScene],
|
||||
})
|
||||
export class EchoModule {}
|
8
sample/01-complete-app/src/echo/echo.service.ts
Normal file
8
sample/01-complete-app/src/echo/echo.service.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
@Injectable()
|
||||
export class EchoService {
|
||||
echo(text: string): string {
|
||||
return `Echo: ${text}`;
|
||||
}
|
||||
}
|
43
sample/01-complete-app/src/echo/echo.update.ts
Normal file
43
sample/01-complete-app/src/echo/echo.update.ts
Normal file
@@ -0,0 +1,43 @@
|
||||
import { Telegraf } from 'telegraf';
|
||||
import { Command, Help, InjectBot, On, Start, Update } from 'nestjs-telegraf';
|
||||
import { EchoService } from './echo.service';
|
||||
import { HELLO_SCENE_ID } from '../app.constants';
|
||||
import { Context } from '../interfaces/context.interface';
|
||||
|
||||
@Update()
|
||||
export class EchoUpdate {
|
||||
constructor(
|
||||
@InjectBot()
|
||||
private readonly bot: Telegraf<Context>,
|
||||
private readonly echoService: EchoService,
|
||||
) {}
|
||||
|
||||
@Start()
|
||||
async onStart(ctx: Context): Promise<void> {
|
||||
const me = await this.bot.telegram.getMe();
|
||||
await ctx.reply(`Hey, I'm ${me.first_name}`);
|
||||
}
|
||||
|
||||
@Help()
|
||||
async onHelp(ctx: Context): Promise<void> {
|
||||
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');
|
||||
|
||||
if ('text' in ctx.message) {
|
||||
const messageText = ctx.message.text;
|
||||
const echoText = this.echoService.echo(messageText);
|
||||
await ctx.reply(echoText);
|
||||
} else {
|
||||
await ctx.reply('Only text messages');
|
||||
}
|
||||
}
|
||||
}
|
29
sample/01-complete-app/src/echo/scenes/hello.scene.ts
Normal file
29
sample/01-complete-app/src/echo/scenes/hello.scene.ts
Normal file
@@ -0,0 +1,29 @@
|
||||
import { Scene, SceneEnter, SceneLeave, Command } from 'nestjs-telegraf';
|
||||
import { HELLO_SCENE_ID } from '../../app.constants';
|
||||
import { Context } from '../../interfaces/context.interface';
|
||||
|
||||
@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(ctx: Context): 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();
|
||||
}
|
||||
}
|
7
sample/01-complete-app/src/greeter/greeter.module.ts
Normal file
7
sample/01-complete-app/src/greeter/greeter.module.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { Module } from '@nestjs/common';
|
||||
import { GreeterUpdate } from './greeter.update';
|
||||
|
||||
@Module({
|
||||
providers: [GreeterUpdate],
|
||||
})
|
||||
export class GreeterModule {}
|
16
sample/01-complete-app/src/greeter/greeter.update.ts
Normal file
16
sample/01-complete-app/src/greeter/greeter.update.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { Hears, Start, Update } from '../../../../lib';
|
||||
import { Context } from '../interfaces/context.interface';
|
||||
|
||||
@Update()
|
||||
export class GreeterUpdate {
|
||||
@Start()
|
||||
async onStart(ctx: Context): Promise<void> {
|
||||
await ctx.reply('Say hello to me');
|
||||
}
|
||||
|
||||
@Hears(['hi', 'hello', 'hey', 'qq'])
|
||||
async onGreetings(ctx: Context): Promise<void> {
|
||||
const { first_name } = ctx.from;
|
||||
await ctx.reply(`Hey ${first_name}`);
|
||||
}
|
||||
}
|
@@ -0,0 +1,4 @@
|
||||
import { SceneContextMessageUpdate } from 'telegraf/typings/stage';
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-empty-interface
|
||||
export interface Context extends SceneContextMessageUpdate {}
|
8
sample/01-complete-app/src/main.ts
Normal file
8
sample/01-complete-app/src/main.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import 'dotenv/config';
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import { AppModule } from './app.module';
|
||||
|
||||
async function bootstrap() {
|
||||
await NestFactory.createApplicationContext(AppModule);
|
||||
}
|
||||
bootstrap();
|
@@ -0,0 +1,3 @@
|
||||
import { session } from 'telegraf';
|
||||
|
||||
export const sessionMiddleware = session();
|
Reference in New Issue
Block a user