diff --git a/src/sale/sale.module.ts b/src/sale/sale.module.ts index acf8fcc..7abbfc4 100644 --- a/src/sale/sale.module.ts +++ b/src/sale/sale.module.ts @@ -7,6 +7,7 @@ import { SaleScene } from './scene/sale.scene'; import { WelcomeScene } from './scene/welcome.scene'; import { AboutScene } from './scene/about.scene'; import { TutorialScene } from './scene/tutorial.scene'; +import { ProfileScene } from './scene/profile.scene'; @Module({ providers: [ @@ -14,6 +15,7 @@ import { TutorialScene } from './scene/tutorial.scene'; SaleService, SaleScene, WelcomeScene, + ProfileScene, AboutScene, TutorialScene, ], diff --git a/src/sale/sale.service.ts b/src/sale/sale.service.ts index f1a88df..ffc64e5 100644 --- a/src/sale/sale.service.ts +++ b/src/sale/sale.service.ts @@ -1,12 +1,10 @@ -import { Logger, Injectable } from '@nestjs/common'; +import { Injectable } from '@nestjs/common'; import { Cron } from '@nestjs/schedule'; -import { posts } from '@prisma/client'; +import { posts, users } from '@prisma/client'; import { PrismaService } from 'src/prisma/prisma.service'; @Injectable() export class SaleService { - private readonly logger = new Logger(SaleService.name); - constructor(private prismaService: PrismaService) {} // @Cron('0 */4 * * * *') // every 4 minutes @@ -15,10 +13,12 @@ export class SaleService { // this.logger.log(`Database ping: ${JSON.stringify(ping)}`); // } - // async mySale() { - // const a: posts | null = await this.prismaService.posts.findFirst({ - // where: { id: Number(711) }, - // }); - // console.log(a?.post); - // } + async getUserPhone(id: string): Promise<{ phone: string | null } | null> { + return await this.prismaService.users.findFirst({ + select: { phone: true }, + where: { + id, + }, + }); + } } diff --git a/src/sale/scene/about.scene.ts b/src/sale/scene/about.scene.ts index d22c04d..fb5d13d 100644 --- a/src/sale/scene/about.scene.ts +++ b/src/sale/scene/about.scene.ts @@ -22,7 +22,7 @@ export class AboutScene { message += `If you are developer, open a [GitHub Pull Request](https://github.com/dodyagung/telegram-sale-bot/pulls)\\.\n\n`; message += `*Creator*\n`; - message += `Hi, I am Dody\\. A backend enthusiast\\. Loves Golang and Typescript\\.\n`; + message += `Hi, I\\'m Dody\\. A backend enthusiast\\. Loves Golang and Typescript\\.\n`; message += `Visit my website at [dodyagung\\.com](https://dodyagung.com)\\.\n\n`; message += `*License*\n`; diff --git a/src/sale/scene/profile.scene.ts b/src/sale/scene/profile.scene.ts new file mode 100644 index 0000000..ea6a923 --- /dev/null +++ b/src/sale/scene/profile.scene.ts @@ -0,0 +1,35 @@ +import { Scene, SceneEnter, Ctx, Action } from 'nestjs-telegraf'; +import { SceneContext } from 'telegraf/scenes'; +import { Markup } from 'telegraf'; +import { sendMessage } from '../sale.common'; +import { SaleService } from '../sale.service'; + +@Scene('PROFILE_SCENE') +export class ProfileScene { + constructor(private saleService: SaleService) {} + + @SceneEnter() + async onSceneEnter(@Ctx() ctx: SceneContext): Promise { + const keyboard = [[Markup.button.callback('👈 Back', 'back')]]; + + let message = `*👤 My Profile*\n\n`; + + message += `This is your account information\\. You can also edit, enable or disable your phone below\\.\n\n`; + + message += `*Telegram Info*\n`; + message += `├ ID : \`${ctx.from!.id}\`\n`; + message += `├ Username : \`${ctx.from?.username ?? ''}\`\n`; + message += `├ First Name : \`${ctx.from!.first_name}\`\n`; + message += `└ Last Name : \`${ctx.from?.last_name ?? ''}\`\n\n`; + + message += `*Additional Info*\n`; + message += `└ Phone : \`${(await this.saleService.getUserPhone(ctx.from!.id.toString()))?.phone ?? ''}\`\n\n`; + + await sendMessage(ctx, message, keyboard); + } + + @Action('back') + async onBack(@Ctx() ctx: SceneContext): Promise { + await ctx.scene.enter('WELCOME_SCENE'); + } +} diff --git a/src/sale/scene/welcome.scene.ts b/src/sale/scene/welcome.scene.ts index 937aa11..5eb8e31 100644 --- a/src/sale/scene/welcome.scene.ts +++ b/src/sale/scene/welcome.scene.ts @@ -30,7 +30,7 @@ export class WelcomeScene { ( await ctx.telegram.getChatMember( this.configService.get('TELEGRAM_GROUP_ID')!, - ctx.from?.id ?? 0, + ctx.from!.id, ) ).status, ); @@ -60,6 +60,11 @@ export class WelcomeScene { await ctx.scene.enter('SALE_SCENE'); } + @Action('profile') + async onProfileAction(@Ctx() ctx: SceneContext): Promise { + await ctx.scene.enter('PROFILE_SCENE'); + } + @Action('tutorial') async onTutorialAction(@Ctx() ctx: SceneContext): Promise { await ctx.scene.enter('TUTORIAL_SCENE');