From 75e971f1704ab24855f2945906cde9456142e824 Mon Sep 17 00:00:00 2001 From: castaval Date: Thu, 15 Sep 2022 21:00:10 +0300 Subject: [PATCH 1/4] refactor: add modules --- assets/images/botpick | Bin 0 -> 14886 bytes package.json | 2 +- src/hears.ts | 16 ++++++++++++++++ src/index.ts | 16 ++++++++++++++++ src/main.ts | 25 ------------------------- src/token.ts | 11 +++++++++++ 6 files changed, 44 insertions(+), 26 deletions(-) create mode 100644 assets/images/botpick create mode 100644 src/hears.ts create mode 100644 src/index.ts delete mode 100644 src/main.ts create mode 100644 src/token.ts diff --git a/assets/images/botpick b/assets/images/botpick new file mode 100644 index 0000000000000000000000000000000000000000..3aa4e830ffbc944fca6da8fccf37f12e25be3ce2 GIT binary patch literal 14886 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 literal 0 HcmV?d00001 diff --git a/package.json b/package.json index 1746e38..7d658e8 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "scripts": { "build": "tsc --project tsconfig.json && tsc-alias -p tsconfig.json", - "start": "tsc --project tsconfig.json && tsc-alias -p tsconfig.json && node ./dist/main.js" + "start": "tsc --project tsconfig.json && tsc-alias -p tsconfig.json && node ./dist/index.js" }, "dependencies": { "@types/node": "^18.7.16", diff --git a/src/hears.ts b/src/hears.ts new file mode 100644 index 0000000..642e354 --- /dev/null +++ b/src/hears.ts @@ -0,0 +1,16 @@ +import { Markup, Context } from "telegraf"; + +const items = ["./assets/mashrek-images/1.jpg", "./assets/mashrek-images/2.jpg", "./assets/mashrek-images/3.jpg", "./assets/mashrek-images/4.jpg", "./assets/mashrek-images/5.jpg", "./assets/mashrek-images/6.jpg", "./assets/mashrek-images/7.jpg", "./assets/mashrek-images/8.jpg", "./assets/mashrek-images/9.jpg", "./assets/mashrek-images/10.jpg"] + +export const Start = (ctx: Context) => { + ctx.replyWithPhoto( + {source: "./assets/images/hello.jpg"}, + {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", + ...Markup.keyboard([["Хочу", "Не хочу",]]).resize()}); +} +export const Help = (ctx : Context) => ctx.reply("'Хочу' - получить картинку"); +export const Want = (ctx: Context) => { + const item = items[Math.floor(Math.random()*items.length)] + ctx.replyWithPhoto({source: item}); +}; +export const DontWant = (ctx: Context) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !"); diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..336097a --- /dev/null +++ b/src/index.ts @@ -0,0 +1,16 @@ +import { Start, DontWant, Help, Want } from "hears"; +import { Telegraf } from 'telegraf'; +import { botToken } from "token"; + +const bot = new Telegraf(botToken); + +bot.start(Start); +bot.help(Help); +bot.hears('Хочу', Want); +bot.hears('Не хочу', DontWant); +bot.launch(); + +// Enable graceful stop +process.once('SIGINT', () => bot.stop('SIGINT')); +process.once('SIGTERM', () => bot.stop('SIGTERM')); + diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 4011a6d..0000000 --- a/src/main.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Markup } from "telegraf"; - -const { Telegraf } = require('telegraf'); -require('dotenv').config(); - -const bot = new Telegraf(process.env.BOT_TOKEN); - -bot.start((ctx : any) => { - ctx.replyWithPhoto( - {source: "./assets/images/hello.jpg"}, - {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", - ...Markup.keyboard([["Хочу", "Не хочу",]]).resize()}); -}); -bot.help((ctx : any) => ctx.reply("'Хочу' - получить картинку")); -bot.hears('Хочу', (ctx : any) => { - const items = ["./assets/mashrek-images/1.jpg", "./assets/mashrek-images/2.jpg", "./assets/mashrek-images/3.jpg", "./assets/mashrek-images/4.jpg", "./assets/mashrek-images/5.jpg", "./assets/mashrek-images/6.jpg", "./assets/mashrek-images/7.jpg", "./assets/mashrek-images/8.jpg", "./assets/mashrek-images/9.jpg", "./assets/mashrek-images/10.jpg"] - const item = items[Math.floor(Math.random()*items.length)] - ctx.replyWithPhoto({source: item}); -}); -bot.hears('Не хочу', (ctx: any) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !")); -bot.launch(); - -// Enable graceful stop -process.once('SIGINT', () => bot.stop('SIGINT')); -process.once('SIGTERM', () => bot.stop('SIGTERM')); \ No newline at end of file diff --git a/src/token.ts b/src/token.ts new file mode 100644 index 0000000..1ffbc2e --- /dev/null +++ b/src/token.ts @@ -0,0 +1,11 @@ +import { config } from "dotenv" +config() + +const getBotToken = (): string => { + if (process.env.BOT_TOKEN) { + return process.env.BOT_TOKEN; + } + throw new Error('BOT_TOKEN must be provided!'); +} + +export const botToken = getBotToken(); \ No newline at end of file From 525e0b457c448a6754f8495d26f2a56a6baee072 Mon Sep 17 00:00:00 2001 From: castaval Date: Tue, 20 Sep 2022 17:05:03 +0300 Subject: [PATCH 2/4] feat: add scenes --- src/hears.ts | 16 ++++++++++------ src/index.ts | 18 ++++++++++++------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/hears.ts b/src/hears.ts index 642e354..2172bb9 100644 --- a/src/hears.ts +++ b/src/hears.ts @@ -2,15 +2,19 @@ import { Markup, Context } from "telegraf"; const items = ["./assets/mashrek-images/1.jpg", "./assets/mashrek-images/2.jpg", "./assets/mashrek-images/3.jpg", "./assets/mashrek-images/4.jpg", "./assets/mashrek-images/5.jpg", "./assets/mashrek-images/6.jpg", "./assets/mashrek-images/7.jpg", "./assets/mashrek-images/8.jpg", "./assets/mashrek-images/9.jpg", "./assets/mashrek-images/10.jpg"] -export const Start = (ctx: Context) => { +export const Start = (ctx: any) => { ctx.replyWithPhoto( - {source: "./assets/images/hello.jpg"}, - {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", - ...Markup.keyboard([["Хочу", "Не хочу",]]).resize()}); + {source: "./assets/images/hello.jpg"}, + {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", + ...Markup.keyboard([["Хочу", "Не хочу",]]).resize().oneTime()}); + ctx.scene.enter("hello"); } export const Help = (ctx : Context) => ctx.reply("'Хочу' - получить картинку"); -export const Want = (ctx: Context) => { +export const Want = (ctx: any) => { const item = items[Math.floor(Math.random()*items.length)] - ctx.replyWithPhoto({source: item}); + ctx.replyWithPhoto( + {source: item}, + {...Markup.removeKeyboard()}); + ctx.scene.enter("work"); }; export const DontWant = (ctx: Context) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !"); diff --git a/src/index.ts b/src/index.ts index 336097a..aed36fe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,21 @@ import { Start, DontWant, Help, Want } from "hears"; -import { Telegraf } from 'telegraf'; +import { Telegraf, Scenes, session } from 'telegraf'; import { botToken } from "token"; -const bot = new Telegraf(botToken); +const bot = new Telegraf(botToken); +const helloScene = new Scenes.BaseScene("hello"); +const workScene = new Scenes.BaseScene("work"); +const stage = new Scenes.Stage([helloScene, workScene]); -bot.start(Start); -bot.help(Help); -bot.hears('Хочу', Want); -bot.hears('Не хочу', DontWant); +bot.use(session()); +bot.use(stage.middleware()); bot.launch(); +bot.start(Start); +helloScene.help(Help); +helloScene.hears('Хочу', Want); +helloScene.hears('Не хочу', DontWant); + // Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')); process.once('SIGTERM', () => bot.stop('SIGTERM')); From d6dae4532d1039cd2166bec2f74ef8a0fab73e7d Mon Sep 17 00:00:00 2001 From: alexander Date: Wed, 21 Sep 2022 10:40:46 +0300 Subject: [PATCH 3/4] TODO: start write wizards, in future fix this commit --- src/hears.ts | 19 ++++++++++++++++++- src/index.ts | 6 +++++- src/mycontext.ts | 25 +++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 src/mycontext.ts diff --git a/src/hears.ts b/src/hears.ts index 2172bb9..dd16376 100644 --- a/src/hears.ts +++ b/src/hears.ts @@ -8,7 +8,7 @@ export const Start = (ctx: any) => { {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", ...Markup.keyboard([["Хочу", "Не хочу",]]).resize().oneTime()}); ctx.scene.enter("hello"); -} +}; export const Help = (ctx : Context) => ctx.reply("'Хочу' - получить картинку"); export const Want = (ctx: any) => { const item = items[Math.floor(Math.random()*items.length)] @@ -18,3 +18,20 @@ export const Want = (ctx: any) => { ctx.scene.enter("work"); }; export const DontWant = (ctx: Context) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !"); +export const Introduction = (ctx: any) => { + ctx.reply("Выберите взаймодействие", + Markup.inlineKeyboard([ + Markup.button.callback("Фото", "photo"), + Markup.button.callback("Музыка", "music"), + Markup.button.callback("Текст", "text"), + ])); +}; +export const PhotoAction = (ctx: any) => { + +}; +export const MusicAction = (ctx: any) => { + +}; +export const TextAction = (ctx: any) => { + +}; diff --git a/src/index.ts b/src/index.ts index aed36fe..844968d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { Start, DontWant, Help, Want } from "hears"; +import { Start, DontWant, Help, Want, Introduction, PhotoAction, MusicAction, TextAction } from "hears"; import { Telegraf, Scenes, session } from 'telegraf'; import { botToken } from "token"; @@ -15,6 +15,10 @@ bot.start(Start); helloScene.help(Help); helloScene.hears('Хочу', Want); helloScene.hears('Не хочу', DontWant); +workScene.enter(Introduction); +workScene.action("photo", PhotoAction); +workScene.action("music", MusicAction); +workScene.action("text", TextAction); // Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')); diff --git a/src/mycontext.ts b/src/mycontext.ts new file mode 100644 index 0000000..da332a2 --- /dev/null +++ b/src/mycontext.ts @@ -0,0 +1,25 @@ +import { Composer, Context, Scenes } from "telegraf"; + +interface MyWizardSession extends Scenes.WizardSessionData { + myWizardSessionProp: string; +} + +interface MyContext extends Context { + + scene: Scenes.SceneContextScene; + wizard: Scenes.WizardContextWizard; +} + + +const stepHandler = new Composer(); +stepHandler.action('next', async (ctx) => { + ctx.scene.session.myWizardSessionProp = ctx.message.chat.id; +}); + +const textWizard = new Scenes.WizardScene( + 'text-wizard', + async (ctx) => { + await ctx.reply('Отправьте текст'); + return ctx.wizard.next() + }, +) \ No newline at end of file From 0860ab43f5c985f1c155d3cbc25634409f2c5acc Mon Sep 17 00:00:00 2001 From: castaval Date: Thu, 22 Sep 2022 17:06:29 +0300 Subject: [PATCH 4/4] feat: add wizards for text, audio and photo --- src/hears.ts | 23 ++----------- src/index.ts | 22 ++++++------- src/mycontext.ts | 25 -------------- src/wizards.ts | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 98 insertions(+), 58 deletions(-) delete mode 100644 src/mycontext.ts create mode 100644 src/wizards.ts diff --git a/src/hears.ts b/src/hears.ts index dd16376..8a713fc 100644 --- a/src/hears.ts +++ b/src/hears.ts @@ -1,37 +1,18 @@ import { Markup, Context } from "telegraf"; -const items = ["./assets/mashrek-images/1.jpg", "./assets/mashrek-images/2.jpg", "./assets/mashrek-images/3.jpg", "./assets/mashrek-images/4.jpg", "./assets/mashrek-images/5.jpg", "./assets/mashrek-images/6.jpg", "./assets/mashrek-images/7.jpg", "./assets/mashrek-images/8.jpg", "./assets/mashrek-images/9.jpg", "./assets/mashrek-images/10.jpg"] - export const Start = (ctx: any) => { ctx.replyWithPhoto( {source: "./assets/images/hello.jpg"}, {caption: "Привет\nЯ Mashrek!\nНажми на кнопочки!", ...Markup.keyboard([["Хочу", "Не хочу",]]).resize().oneTime()}); - ctx.scene.enter("hello"); }; export const Help = (ctx : Context) => ctx.reply("'Хочу' - получить картинку"); export const Want = (ctx: any) => { - const item = items[Math.floor(Math.random()*items.length)] - ctx.replyWithPhoto( - {source: item}, - {...Markup.removeKeyboard()}); - ctx.scene.enter("work"); -}; -export const DontWant = (ctx: Context) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !"); -export const Introduction = (ctx: any) => { ctx.reply("Выберите взаймодействие", Markup.inlineKeyboard([ Markup.button.callback("Фото", "photo"), - Markup.button.callback("Музыка", "music"), + Markup.button.callback("Музыка", "audio"), Markup.button.callback("Текст", "text"), ])); }; -export const PhotoAction = (ctx: any) => { - -}; -export const MusicAction = (ctx: any) => { - -}; -export const TextAction = (ctx: any) => { - -}; +export const DontWant = (ctx: Context) => ctx.reply("Ну ладно (:\nЕсли захочешь, нажми на кнопочку 'Хочу' !"); diff --git a/src/index.ts b/src/index.ts index 844968d..697a7fb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,24 +1,22 @@ -import { Start, DontWant, Help, Want, Introduction, PhotoAction, MusicAction, TextAction } from "hears"; +import { Start, DontWant, Help, Want } from "hears"; import { Telegraf, Scenes, session } from 'telegraf'; import { botToken } from "token"; +import { audioWizard, photoWizard, textWizard} from "wizards"; -const bot = new Telegraf(botToken); -const helloScene = new Scenes.BaseScene("hello"); -const workScene = new Scenes.BaseScene("work"); -const stage = new Scenes.Stage([helloScene, workScene]); +const bot = new Telegraf(botToken); +const stage = new Scenes.Stage([textWizard, photoWizard, audioWizard]); bot.use(session()); bot.use(stage.middleware()); bot.launch(); bot.start(Start); -helloScene.help(Help); -helloScene.hears('Хочу', Want); -helloScene.hears('Не хочу', DontWant); -workScene.enter(Introduction); -workScene.action("photo", PhotoAction); -workScene.action("music", MusicAction); -workScene.action("text", TextAction); +bot.help(Help); +bot.hears('Хочу', Want); +bot.hears('Не хочу', DontWant); +bot.action("photo", ctx => ctx.scene.enter('photo-wizard')); +bot.action("audio", ctx => ctx.scene.enter('audio-wizard')); +bot.action("text", ctx => ctx.scene.enter('text-wizard')); // Enable graceful stop process.once('SIGINT', () => bot.stop('SIGINT')); diff --git a/src/mycontext.ts b/src/mycontext.ts deleted file mode 100644 index da332a2..0000000 --- a/src/mycontext.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Composer, Context, Scenes } from "telegraf"; - -interface MyWizardSession extends Scenes.WizardSessionData { - myWizardSessionProp: string; -} - -interface MyContext extends Context { - - scene: Scenes.SceneContextScene; - wizard: Scenes.WizardContextWizard; -} - - -const stepHandler = new Composer(); -stepHandler.action('next', async (ctx) => { - ctx.scene.session.myWizardSessionProp = ctx.message.chat.id; -}); - -const textWizard = new Scenes.WizardScene( - 'text-wizard', - async (ctx) => { - await ctx.reply('Отправьте текст'); - return ctx.wizard.next() - }, -) \ No newline at end of file diff --git a/src/wizards.ts b/src/wizards.ts new file mode 100644 index 0000000..1a7a59a --- /dev/null +++ b/src/wizards.ts @@ -0,0 +1,86 @@ +/* eslint-disable @typescript-eslint/no-floating-promises */ +import { Scenes, Composer} from 'telegraf' + +const textHandler = new Composer() +textHandler.on('text', async (ctx) => { + const message = getMessage(ctx); + + await ctx.copyMessage(message); + return await ctx.scene.leave(); +}); +textHandler.on('audio', async (ctx) => { + await ctx.reply("Введите текст, а не аудио!"); + await ctx.scene.enter("text-wizard"); +}); +textHandler.on('photo', async (ctx) => { + await ctx.reply("Введите текст, а не фото!"); + await ctx.scene.enter("text-wizard"); +}); + +const photoHandler = new Composer() +photoHandler.on('photo', async (ctx) => { + const message = getMessage(ctx); + + await ctx.copyMessage(message); + return await ctx.scene.leave(); +}); +photoHandler.on('audio', async (ctx) => { + await ctx.reply("Пришлите фото, а не аудио!"); + await ctx.scene.enter("photo-wizard"); +}); +photoHandler.on('text', async (ctx) => { + await ctx.reply("Пришлите фото, а не текст!"); + await ctx.scene.enter("photo-wizard"); +}); + +const audioHandler = new Composer() +audioHandler.on('audio', async (ctx) => { + const message = getMessage(ctx); + + await ctx.copyMessage(message); + return await ctx.scene.leave(); +}); +audioHandler.on('text', async (ctx) => { + await ctx.reply("Пришлите аудио, а не текст!"); + await ctx.scene.enter("audio-wizard"); +}); +audioHandler.on('photo', async (ctx) => { + await ctx.reply("Пришлите аудио, а не фото!"); + await ctx.scene.enter("audio-wizard"); +}); + +export const textWizard = new Scenes.WizardScene( + 'text-wizard', + async (ctx: any) => { + await ctx.reply('Пришлите текст'); + return ctx.wizard.next(); + }, + textHandler +); + +export const photoWizard = new Scenes.WizardScene( + 'photo-wizard', + async (ctx: any) => { + await ctx.reply('Пришлите фото'); + return ctx.wizard.next(); + }, + photoHandler +); + +export const audioWizard = new Scenes.WizardScene( + 'audio-wizard', + async (ctx: any) => { + await ctx.reply('Пришлите аудио'); + return ctx.wizard.next(); + }, + audioHandler +); + +const getMessage = (ctx: any): number => { + if (ctx.message?.chat.id && 'text') { + return ctx.message.chat.id; + } + + throw new Error('This is no message!'); +}; +