gramstax 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/base/general.ts","../../src/core/ctx.ts","../../src/grammy/index.ts","../../src/base/page.ts","../../src/base/guard.ts","../../src/cache/external.ts","../../src/core/bot.ts","../../src/template/engine.ts","../../src/template/manager.ts"],"sourcesContent":["export * from \"./base\"\r\nexport * from \"./cache\"\r\nexport * from \"./core\"\r\nexport * from \"./template\"\r\n","import LoggingPretty from \"logging-pretty\"\r\n\r\nexport abstract class BaseGeneral {\r\n protected static log = new LoggingPretty()\r\n protected static logError(error: any, func: string) {\r\n // const name = typeof this.name != `string` ? this.toString().match(/class\\s+([^\\s{]+)/)?.[1] : this.name\r\n this.log.error(`[${this.toString().match(/class\\s+([^\\s{]+)/)?.[1]}:${func}]: ${String(error)}`)\r\n }\r\n\r\n // protected logError(error: any, func: string, name?: string) {\r\n // log.error(`[${name || this.constructor.name}:${func}]: ${String(error)}`)\r\n // }\r\n\r\n protected logError(error: any, constructorName?: string, funcName?: string) {\r\n ;(this.constructor as any).log.error(`[${constructorName || this.constructor.name}:${funcName}] ${String(error)}`)\r\n }\r\n}\r\n","import { CacheExternal } from \"../cache\"\r\nimport { setTimeout } from \"node:timers/promises\"\r\nimport { BaseGeneral } from \"../base\"\r\nimport { TemplateManager } from \"../template\"\r\nimport { InlineKeyboard, Keyboard, type Context } from \"grammy\"\r\n\r\nexport class Ctx extends BaseGeneral {\r\n public data = (this as any).constructor.data as { name: string; callbackData: (...args: any) => string | any } // for internal access (this.**). example this.data.callbackData\r\n\r\n public get isPremium() {\r\n return this.ct.from?.is_premium ?? false\r\n }\r\n public get isBot() {\r\n return this.ct.from?.is_bot ?? false\r\n }\r\n public get userid() {\r\n return this.ct.from?.id as number\r\n }\r\n public get username() {\r\n return this.ct.from?.username as string\r\n }\r\n public get fullname() {\r\n return `${this.ct.from?.first_name || ``}${this.ct.from?.last_name || ``}`\r\n }\r\n public get firstname() {\r\n return this.ct.from?.first_name as string\r\n }\r\n public get lastname() {\r\n return this.ct.from?.last_name as string\r\n }\r\n public get msgText() {\r\n return this.ct.message?.text as string\r\n }\r\n public get msgTextIntent() {\r\n return this.msgText && this.msgText.indexOf(` `) != -1 ? (this.msgText.split(` `)[0] as string) : ``\r\n }\r\n public get msgTextPayloads() {\r\n return this.msgText && this.msgText.indexOf(` `) != -1 ? (this.msgText.split(` `).slice(1) as any[]) : ([] as any[])\r\n }\r\n public get msgTextPayload() {\r\n return this.msgTextPayloads[0] as string\r\n }\r\n public get msgCaption() {\r\n return this.ct.message?.caption as string\r\n }\r\n public get msgCaptionIntent() {\r\n return this.msgCaption && this.msgCaption.indexOf(` `) != -1 ? (this.msgCaption.split(` `)[0] as string) : ``\r\n }\r\n public get msgPhoto() {\r\n return this.ct.message?.photo\r\n }\r\n public get msgVideo() {\r\n return this.ct.message?.video\r\n }\r\n public get msgAudio() {\r\n return this.ct.message?.audio\r\n }\r\n public get callbackData() {\r\n return this.ct.callbackQuery?.data as string\r\n }\r\n public get callbackDataIntent() {\r\n return this.callbackData && this.callbackData.indexOf(`:`) != -1 ? (this.callbackData.split(`:`)[0] as string) : ``\r\n }\r\n public get callbackDataPayloads() {\r\n return this.callbackData && this.callbackData.indexOf(`:`) != -1 ? (this.callbackData.split(`:`).slice(1) as any[]) : ([] as any[])\r\n }\r\n public get callbackDataPayload() {\r\n return this.callbackDataPayloads?.[0] as string\r\n }\r\n public get callbackDataParts() {\r\n return this.callbackDataPayload && this.callbackDataPayload.indexOf(`+`) != -1 ? (this.callbackDataPayload.split(`+`) as any[]) : ([] as any[])\r\n }\r\n public get languageCode() {\r\n return this.ct.from?.language_code as string\r\n }\r\n public set languageCode(v: any) {\r\n ;(this as any).ct.from.language_code = v\r\n }\r\n\r\n public session: { method?: string; params?: any } = {}\r\n public constructor(public ct: Context, public templateManager: TemplateManager, public cacheSession: CacheExternal, public cacheKeyboard: Map<any, any>) {\r\n super()\r\n }\r\n\r\n public async broadcast(ids: any[], languageCode: any[], keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n const limitFree = 30\r\n const msgs = languageCode.map((it) => this.templateManager.getMessage(this.data.name, baseId, it, data)) as any[]\r\n for (let index = 0; index < ids.length; index++) {\r\n const id = ids[index]\r\n const msg = msgs[index]\r\n await this.ct.api.sendMessage(id, msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n\r\n if (index + 1 == limitFree) {\r\n await setTimeout(1200)\r\n }\r\n }\r\n }\r\n\r\n public async reply(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n const msg = this.templateManager.getMessage(this.data.name, baseId, this.languageCode, data)\r\n return await this.ct.reply(msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n }\r\n\r\n public async replyAction(type: Parameters<typeof this.ct.replyWithChatAction>[0]) {\r\n return await this.ct.replyWithChatAction(type)\r\n }\r\n\r\n public async edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n try {\r\n const msg = this.templateManager.getMessage(this.data.name, baseId, this.languageCode, data)\r\n return await this.ct.editMessageText(msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n } catch (error) {\r\n await this.reply(keyboard, data, baseId, options)\r\n }\r\n }\r\n\r\n public async delete() {\r\n return await this.ct.deleteMessage()\r\n }\r\n\r\n public async callbackQueryAnswer(options?: any) {\r\n try {\r\n return await this.ct.answerCallbackQuery(options)\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionSet(method: string, params: any, ...moreRoot: any) {\r\n try {\r\n const value = { method, params, ...moreRoot }\r\n const result = await this.cacheSession.set(`${this.userid}`, { method, params, ...moreRoot })\r\n if (result) {\r\n this.session = value\r\n }\r\n return result\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionGet(): Promise<{ method: string; params: any; [moreRoot: string]: any } | null> {\r\n try {\r\n const result = await this.cacheSession.get(`${this.userid}`)\r\n if (result) {\r\n this.session = result\r\n }\r\n return result || null\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionClear() {\r\n try {\r\n const result = await this.cacheSession.delete(`${this.userid}`)\r\n if (result) {\r\n this.session = {}\r\n }\r\n return result\r\n } catch {\r\n return null\r\n }\r\n }\r\n}\r\n","export * from \"grammy\"\r\n","import { Ctx } from \"../core/ctx\"\r\nimport { InlineKeyboard, Keyboard } from \"../grammy\"\r\n\r\nexport abstract class BasePage extends Ctx {\r\n public static template?: string // string html\r\n public static data: { name: string; callbackData: (...args: any) => string | any } // for external access (**.data). example StartPage.data.callbackData\r\n\r\n // =============== most common used function\r\n public transition?(...args: any): Promise<void>\r\n public internal?(...args: any): Promise<void>\r\n public notify?(...args: any): Promise<void>\r\n\r\n // =============== route function\r\n // callback\r\n public callback?(): Promise<void> // example: start\r\n public callbackPayload?(): Promise<void> // example: start:{DYNAMIC}\r\n // text\r\n public text?(): Promise<void> // example: start\r\n public textPayload?(): Promise<void> // example: start {...DYNAMIC}\r\n public textCommand?(): Promise<void> // example: /start\r\n public textCommandPayload?(): Promise<void> // example: /start {...DYNAMIC}\r\n public textFree?(): Promise<void> // example (for session): {...DYNAMIC}\r\n // photo\r\n public photoCaption?(): Promise<void>\r\n public photoCaptionPayload?(): Promise<void>\r\n public photoCaptionCommand?(): Promise<void>\r\n public photoCaptionCommandPayload?(): Promise<void>\r\n public photoFree?(): Promise<void>\r\n // video\r\n public videoCaption?(): Promise<void>\r\n public videoCaptionPayload?(): Promise<void>\r\n public videoCaptionCommand?(): Promise<void>\r\n public videoCaptionCommandPayload?(): Promise<void>\r\n public videoFree?(): Promise<void>\r\n // audio\r\n public audioCaption?(): Promise<void>\r\n public audioCaptionPayload?(): Promise<void>\r\n public audioCaptionCommand?(): Promise<void>\r\n public audioCaptionCommandPayload?(): Promise<void>\r\n public audioFree?(): Promise<void>\r\n // document\r\n public documentCaption?(): Promise<void>\r\n public documentCaptionPayload?(): Promise<void>\r\n public documentCaptionCommand?(): Promise<void>\r\n public documentCaptionCommandPayload?(): Promise<void>\r\n public documentFree?(): Promise<void>\r\n // animation\r\n public animationCaption?(): Promise<void>\r\n public animationCaptionPayload?(): Promise<void>\r\n public animationCaptionCommand?(): Promise<void>\r\n public animationCaptionCommandPayload?(): Promise<void>\r\n public animationFree?(): Promise<void>\r\n // voiceNote\r\n public voiceCaption?(): Promise<void>\r\n public voiceCaptionPayload?(): Promise<void>\r\n public voiceCaptionCommand?(): Promise<void>\r\n public voiceCaptionCommandPayload?(): Promise<void>\r\n public voiceFree?(): Promise<void>\r\n // videoNote\r\n public videoNoteCaption?(): Promise<void>\r\n public videoNoteCaptionPayload?(): Promise<void>\r\n public videoNoteCaptionCommand?(): Promise<void>\r\n public videoNoteCaptionCommandPayload?(): Promise<void>\r\n public videoNoteFree?(): Promise<void>\r\n // sticker\r\n public stickerFree?(): Promise<void>\r\n // location\r\n public locationFree?(): Promise<void>\r\n // contact\r\n public contactFree?(): Promise<void>\r\n // all\r\n public free?(): Promise<void>\r\n\r\n public ctx: Ctx\r\n public constructor(ctx: Ctx & { ctx?: Ctx }) {\r\n super(ctx.ct, ctx.templateManager, ctx.cacheSession, ctx.cacheKeyboard)\r\n this.session = ctx?.ctx?.session || ctx.session // set to this PageBase\r\n this.ctx = ctx?.ctx || ctx // if have ctx.ctx (from Page.ctx) use it, otherwise ctx (from CtxBot)\r\n }\r\n\r\n // =============== build data\r\n\r\n public static buildData<C extends ((...args: any[]) => any) | undefined = undefined>(callback?: C) {\r\n return {\r\n name: ``,\r\n callbackData: callback\r\n ? function (this: { name: string }, ...args: Parameters<Exclude<C, undefined>>): ReturnType<Exclude<C, undefined>> {\r\n const params = callback(...args)\r\n return `${this.name}${params === undefined ? `` : `:${params}`}` as any\r\n }\r\n : function (this: { name: string }) {\r\n return this?.name\r\n }\r\n }\r\n }\r\n\r\n // =============== build keyboard\r\n\r\n public buildInlineKeyboard(callback: (kb: InlineKeyboard, arr: any[]) => InlineKeyboard, params?: { baseId?: any; data?: Record<string, any>; cache?: boolean }): InlineKeyboard {\r\n const tkey = this.data.name\r\n if (params?.cache === true) {\r\n const key = `${tkey}:${this.languageCode}:inline`\r\n const ckb = this.cacheKeyboard.get(key)\r\n if (!ckb) {\r\n const ikb = new InlineKeyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `inline`, params?.data)\r\n const rkb = callback(ikb, arr)\r\n this.cacheKeyboard.set(key, rkb)\r\n return rkb\r\n }\r\n return ckb\r\n }\r\n const ikb = new InlineKeyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `inline`, params?.data)\r\n const rkb = callback(ikb, arr)\r\n return rkb\r\n }\r\n\r\n public buildKeyboard(callback: (kb: Keyboard, arr: any[]) => Keyboard, params?: { baseId?: any; data?: Record<string, any>; cache?: boolean }): Keyboard {\r\n const tkey = this.data.name\r\n if (params?.cache === true) {\r\n const key = `${tkey}:${this.languageCode}:default`\r\n const ckb = this.cacheKeyboard.get(key)\r\n if (!ckb) {\r\n const kb = new Keyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `default`, params?.data)\r\n const rkb = callback(kb, arr)\r\n rkb.resized(true)\r\n this.cacheKeyboard.set(key, rkb)\r\n return rkb\r\n }\r\n return ckb\r\n }\r\n const kb = new Keyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `default`, params?.data)\r\n const rkb = callback(kb, arr)\r\n rkb.resized()\r\n return rkb\r\n }\r\n\r\n // =============== session validate\r\n // callback\r\n\r\n public validateSessionCallback(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodCallback(name)\r\n }\r\n\r\n public validateSessionCallbackPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodCallbackPayload(name)\r\n }\r\n\r\n // text\r\n\r\n public validateSessionText(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodText(name)\r\n }\r\n\r\n public validateSessionTextPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextPayload(name)\r\n }\r\n\r\n public validateSessionTextCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextCommand(name)\r\n }\r\n\r\n public validateSessionTextCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextCommandPayload(name)\r\n }\r\n\r\n public validateSessionTextFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextFree(name)\r\n }\r\n\r\n // photo\r\n\r\n public validateSessionPhotoCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaption(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionPayload(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionCommand(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionPhotoFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoFree(name)\r\n }\r\n\r\n // video\r\n\r\n public validateSessionVideoCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaption(name)\r\n }\r\n\r\n public validateSessionVideoCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVideoCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVideoCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVideoFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoFree(name)\r\n }\r\n\r\n // audio\r\n\r\n public validateSessionAudioCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaption(name)\r\n }\r\n\r\n public validateSessionAudioCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionPayload(name)\r\n }\r\n\r\n public validateSessionAudioCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionCommand(name)\r\n }\r\n\r\n public validateSessionAudioCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionAudioFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioFree(name)\r\n }\r\n\r\n // document\r\n\r\n public validateSessionDocumentCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaption(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionPayload(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionCommand(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionDocumentFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentFree(name)\r\n }\r\n\r\n // animation\r\n\r\n public validateSessionAnimationCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaption(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionPayload(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionCommand(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionAnimationFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationFree(name)\r\n }\r\n\r\n // voice\r\n\r\n public validateSessionVoiceCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaption(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVoiceFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceFree(name)\r\n }\r\n\r\n // video note\r\n\r\n public validateSessionVideoNoteCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaption(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVideoNoteFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteFree(name)\r\n }\r\n\r\n // sticker\r\n\r\n public validateSessionStickerFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodStickerFree(name)\r\n }\r\n\r\n // location\r\n\r\n public validateSessionLocationFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodLocationFree(name)\r\n }\r\n\r\n // contact\r\n\r\n public validateSessionContactFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodContactFree(name)\r\n }\r\n\r\n // =============== session set\r\n // callback\r\n\r\n public sessionCallback(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodCallback(name), params)\r\n }\r\n\r\n public sessionCallbackPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodCallbackPayload(name), params)\r\n }\r\n\r\n // text\r\n\r\n public sessionText(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodText(name), params)\r\n }\r\n\r\n public sessionTextPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextPayload(name), params)\r\n }\r\n\r\n public sessionTextCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextCommand(name), params)\r\n }\r\n\r\n public sessionTextCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextCommandPayload(name), params)\r\n }\r\n\r\n public sessionTextFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextFree(name), params)\r\n }\r\n\r\n // photo\r\n\r\n public sessionPhotoCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaption(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionPhotoFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoFree(name), params)\r\n }\r\n\r\n // video\r\n\r\n public sessionVideoCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaption(name), params)\r\n }\r\n\r\n public sessionVideoCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVideoCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVideoCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVideoFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoFree(name), params)\r\n }\r\n\r\n // audio\r\n\r\n public sessionAudioCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaption(name), params)\r\n }\r\n\r\n public sessionAudioCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(name), params)\r\n }\r\n\r\n public sessionAudioCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(name), params)\r\n }\r\n\r\n public sessionAudioCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionAudioFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioFree(name), params)\r\n }\r\n\r\n // document\r\n\r\n public sessionDocumentCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaption(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionDocumentFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentFree(name), params)\r\n }\r\n\r\n // animation\r\n\r\n public sessionAnimationCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaption(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionAnimationFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationFree(name), params)\r\n }\r\n\r\n // voice\r\n\r\n public sessionVoiceCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaption(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVoiceFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceFree(name), params)\r\n }\r\n\r\n // video note\r\n\r\n public sessionVideoNoteCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaption(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVideoNoteFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteFree(name), params)\r\n }\r\n\r\n // sticker\r\n\r\n public sessionStickerFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodStickerFree(name), params)\r\n }\r\n\r\n // location\r\n\r\n public sessionLocationFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodLocationFree(name), params)\r\n }\r\n\r\n // contact\r\n\r\n public sessionContactFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodContactFree(name), params)\r\n }\r\n\r\n // =============== session update to set\r\n // callback\r\n\r\n public sessionToCallback(paramsAdd?: any, name?: string) {\r\n return this.sessionCallback({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToCallbackPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionCallbackPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // text\r\n\r\n public sessionToText(paramsAdd?: any, name?: string) {\r\n return this.sessionText({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionTextPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionTextCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionTextCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextFree(paramsAdd?: any, name?: string) {\r\n return this.sessionTextFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // photo\r\n\r\n public sessionToPhotoCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoFree(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // video\r\n\r\n public sessionToVideoCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // audio\r\n\r\n public sessionToAudioCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioFree(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // document\r\n\r\n public sessionToDocumentCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentFree(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // animation\r\n\r\n public sessionToAnimationCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationFree(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // voice\r\n\r\n public sessionToVoiceCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // videonote\r\n\r\n public sessionToVideoNoteCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // sticker\r\n\r\n public sessionToStickerFree(paramsAdd?: any, name?: string) {\r\n return this.sessionStickerFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // location\r\n\r\n public sessionToLocationFree(paramsAdd?: any, name?: string) {\r\n return this.sessionLocationFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // contact\r\n\r\n public sessionToContactFree(paramsAdd?: any, name?: string) {\r\n return this.sessionContactFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // =============== build intent\r\n\r\n public buildIntent(str?: string, fbCallbackData = true) {\r\n if (!str) {\r\n str = fbCallbackData ? this.data.callbackData() : this.data.name\r\n }\r\n\r\n const tag = fbCallbackData ? `:` : ` `\r\n return str?.indexOf?.(tag) != -1 ? (str?.split?.(tag)?.[0] as string) : str\r\n }\r\n\r\n // =============== build session method\r\n\r\n public buildSessionMethod(prefix: string, name: string | undefined) {\r\n return `${prefix}-${name || this.data.name}`\r\n }\r\n\r\n // callback method\r\n\r\n public buildSessionMethodCallback(name?: string) {\r\n return this.buildSessionMethod(`1`, name)\r\n }\r\n\r\n public buildSessionMethodCallbackPayload(name?: string) {\r\n return this.buildSessionMethod(`2`, name)\r\n }\r\n\r\n // text method\r\n\r\n public buildSessionMethodText(name?: string) {\r\n return this.buildSessionMethod(`3`, name)\r\n }\r\n\r\n public buildSessionMethodTextPayload(name?: string) {\r\n return this.buildSessionMethod(`4`, name)\r\n }\r\n\r\n public buildSessionMethodTextCommand(name?: string) {\r\n return this.buildSessionMethod(`5`, name)\r\n }\r\n\r\n public buildSessionMethodTextCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`6`, name)\r\n }\r\n\r\n public buildSessionMethodTextFree(name?: string) {\r\n return this.buildSessionMethod(`7`, name)\r\n }\r\n\r\n // photo method\r\n\r\n public buildSessionMethodPhotoCaption(name?: string) {\r\n return this.buildSessionMethod(`8`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`9`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`10`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`11`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoFree(name?: string) {\r\n return this.buildSessionMethod(`12`, name)\r\n }\r\n\r\n // video method\r\n\r\n public buildSessionMethodVideoCaption(name?: string) {\r\n return this.buildSessionMethod(`13`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`14`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`15`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`16`, name)\r\n }\r\n\r\n public buildSessionMethodVideoFree(name?: string) {\r\n return this.buildSessionMethod(`17`, name)\r\n }\r\n\r\n // audio method\r\n\r\n public buildSessionMethodAudioCaption(name?: string) {\r\n return this.buildSessionMethod(`18`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`19`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`20`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`21`, name)\r\n }\r\n\r\n public buildSessionMethodAudioFree(name?: string) {\r\n return this.buildSessionMethod(`22`, name)\r\n }\r\n\r\n // document method\r\n\r\n public buildSessionMethodDocumentCaption(name?: string) {\r\n return this.buildSessionMethod(`23`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`24`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`25`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`26`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentFree(name?: string) {\r\n return this.buildSessionMethod(`27`, name)\r\n }\r\n\r\n // animation method\r\n\r\n public buildSessionMethodAnimationCaption(name?: string) {\r\n return this.buildSessionMethod(`28`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`29`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`30`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`31`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationFree(name?: string) {\r\n return this.buildSessionMethod(`32`, name)\r\n }\r\n\r\n // voice method\r\n\r\n public buildSessionMethodVoiceCaption(name?: string) {\r\n return this.buildSessionMethod(`33`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`34`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`35`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`36`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceFree(name?: string) {\r\n return this.buildSessionMethod(`37`, name)\r\n }\r\n\r\n // video note method\r\n\r\n public buildSessionMethodVideoNoteCaption(name?: string) {\r\n return this.buildSessionMethod(`38`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`39`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`40`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`41`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteFree(name?: string) {\r\n return this.buildSessionMethod(`42`, name)\r\n }\r\n\r\n // sticker method\r\n\r\n public buildSessionMethodStickerFree(name?: string) {\r\n return this.buildSessionMethod(`43`, name)\r\n }\r\n\r\n // location method\r\n\r\n public buildSessionMethodLocationFree(name?: string) {\r\n return this.buildSessionMethod(`44`, name)\r\n }\r\n\r\n // contact method\r\n\r\n public buildSessionMethodContactFree(name?: string) {\r\n return this.buildSessionMethod(`45`, name)\r\n }\r\n}\r\n","import { BasePage } from \"./page\"\r\nimport type { Ctx } from \"../core/ctx\"\r\n\r\nexport abstract class BaseGuard extends BasePage {\r\n public pageData: { name: string; callbackData: (...args: any) => string | any } // because Guard not have static data like Page and public data so we assign to new property\r\n public constructor(page: { ctx: Ctx; data?: any }) {\r\n super(page.ctx)\r\n this.pageData = page.data\r\n }\r\n}\r\n","import { Keyv } from \"keyv\"\r\nimport KeyvRedis from \"@keyv/redis\"\r\n\r\ntype IMore = Omit<Required<ConstructorParameters<typeof Keyv>>[0], `store` | `namespace` | `ttl`> & { forceStore?: any }\r\n\r\nexport class CacheExternal extends Keyv {\r\n constructor(public url: string | `memory` = `memory`, namespace?: string, ttl?: number, more?: IMore) {\r\n let store: any\r\n if (url.startsWith(`redis`)) store = new KeyvRedis(url)\r\n if (url === `memory`) store = new Map()\r\n if (more?.forceStore) store = more.forceStore\r\n\r\n super({ store, namespace, ttl })\r\n }\r\n}\r\n","import { Ctx } from \"./ctx\"\r\nimport { serve } from \"bun\"\r\nimport { existsSync, readdirSync } from \"node:fs\"\r\nimport { join, parse } from \"node:path\"\r\nimport { CacheExternal } from \"../cache\"\r\nimport { LoggingPretty } from \"logging-pretty\"\r\nimport { TemplateManager } from \"../template\"\r\nimport { Bot, webhookCallback, type BotError, type Context } from \"grammy\"\r\nimport type { UserFromGetMe } from \"grammy/types\"\r\nimport type { IPageBase } from \"../types/page\"\r\n\r\nexport class Gramstax {\r\n public templateManager: TemplateManager\r\n public cacheKeyboard: Map<any, any>\r\n public cacheSession: CacheExternal\r\n public log: LoggingPretty | undefined\r\n public bot: Bot\r\n public pages = this.pageLoads()\r\n\r\n public constructor(params: { token: string; deploy: string; log?: LoggingPretty; cacheSession?: CacheExternal; cacheKeyboard?: Map<any, any>; templateManager?: TemplateManager }) {\r\n this.log = params.log === null ? undefined : params.log === undefined ? new LoggingPretty() : params.log\r\n this.cacheSession = params.cacheSession || new CacheExternal(`memory`, `session`)\r\n this.cacheKeyboard = params.cacheKeyboard || new Map()\r\n this.templateManager = params.templateManager || new TemplateManager({ path: null })\r\n\r\n this.bot = new Bot(params.token)\r\n this.bot.catch(this.onCatch)\r\n this.bot.on(`callback_query:data`, this.onCallbackQueryData.bind(this)) // Handle callback queries from inline keyboards\r\n this.bot.on(`message:text`, this.onMessageText.bind(this)) // Handle global text messages\r\n this.bot.on(`message:photo`, this.onMessagePhoto.bind(this)) // Handle global photo messages\r\n this.bot.on(`message:video`, this.onMessageVideo.bind(this)) // Handle global video messages\r\n this.bot.on(`message:audio`, this.onMessageAudio.bind(this)) // Handle global audio messages\r\n this.bot.on(`message:document`, this.onMessageDocument.bind(this)) // Handle global document messages\r\n this.bot.on(`message:animation`, this.onMessageAnimation.bind(this)) // Handle global animation messages\r\n this.bot.on(`message:voice`, this.onMessageVoice.bind(this)) // Handle global voice messages\r\n this.bot.on(`message:video_note`, this.onMessageVideoNote.bind(this)) // Handle global video note messages\r\n this.bot.on(`message:sticker`, this.onMessageSticker.bind(this)) // Handle global sticker messages\r\n this.bot.on(`message:location`, this.onMessageLocation.bind(this)) // Handle global location messages\r\n this.bot.on(`message:contact`, this.onMessageContact.bind(this)) // Handle global contact messages\r\n\r\n // Graceful shutdown\r\n process.once(`SIGINT`, () => this.bot.stop())\r\n process.once(`SIGTERM`, () => this.bot.stop())\r\n\r\n if (params.deploy.startsWith(`polling`)) {\r\n this.runPolling()\r\n } else if (params.deploy.startsWith(`webhook`)) {\r\n this.runWebhook(params.deploy.split(`webhook:`)[1] as string)\r\n }\r\n }\r\n\r\n public onCatch(error: BotError<Context>) {\r\n this.log?.error?.(`[Bot.catch]: ${String(error)}`)\r\n }\r\n\r\n public onStart(botInfo: UserFromGetMe, method: `polling` | `webhook`, data: string | null) {\r\n const { username } = botInfo\r\n if (method == `polling`) {\r\n this.log?.success?.(`Telegram bot polling started: ${username}`)\r\n } else {\r\n this.log?.success?.(`Telegram bot webhook started: ${username} (${data})`)\r\n }\r\n }\r\n\r\n public initCtx(ct: Context) {\r\n return new Ctx(ct, this.templateManager, this.cacheSession, this.cacheKeyboard)\r\n }\r\n\r\n public async runPolling() {\r\n this.bot.start({\r\n onStart: async (botInfo) => {\r\n this.onStart(botInfo, `polling`, null)\r\n }\r\n })\r\n }\r\n\r\n public async runWebhook(baseUrl: string) {\r\n const handleUpdate = webhookCallback(this.bot, `bun`)\r\n const pathWebhook = `/telegram-webhook`\r\n serve({\r\n fetch(req) {\r\n const { pathname } = new URL(req.url)\r\n if (pathname === pathWebhook) {\r\n if (req.method === `POST`) {\r\n return handleUpdate(req as any)\r\n }\r\n return new Response(`OK`, { status: 200 })\r\n }\r\n\r\n if (pathname === `/` && req.method === `GET`) {\r\n const timestamp = new Date().toISOString()\r\n return new Response(JSON.stringify({ timestamp }), {\r\n status: 200,\r\n headers: { \"Content-Type\": `application/json` }\r\n })\r\n }\r\n\r\n // Jika tidak cocok\r\n return new Response(`Not found`, { status: 404 })\r\n }\r\n })\r\n\r\n const data = await this.bot.api.getWebhookInfo()\r\n const webhookUrl = baseUrl.endsWith(`/`) ? baseUrl.slice(0, -1) + pathWebhook : baseUrl + pathWebhook\r\n if (data.url != webhookUrl) {\r\n await this.bot.api.setWebhook(webhookUrl)\r\n }\r\n\r\n const botInfo = await this.bot.api.getMe()\r\n this.onStart(botInfo, `webhook`, webhookUrl)\r\n }\r\n\r\n public pageCompile(Page: IPageBase, redacted = true) {\r\n if (Page?.template !== undefined) {\r\n this.templateManager.compile(Page.data.name, Page.template)\r\n if (redacted) {\r\n Page.template = undefined // redacted to reduce memory\r\n }\r\n } else {\r\n Page.template = undefined\r\n }\r\n }\r\n\r\n public pageBuildData(Page: IPageBase, filePath: string) {\r\n if (Page?.data === undefined) {\r\n Page.data = Page.buildData()\r\n }\r\n Page.data.name = parse(filePath).name\r\n }\r\n\r\n public pageSorts(Page: IPageBase, pages: typeof this.pages) {\r\n const name = Page.data.name\r\n const proto = Page.prototype\r\n\r\n const partPayload = `Payload`\r\n const partCommand = `Command`\r\n const partCaption = `Caption`\r\n const partFree = `Free`\r\n\r\n const pd = pages.dynamic\r\n const pds = pages.dynamicSpesific\r\n\r\n const upFirst = (s: string) => s.charAt(0).toUpperCase() + s.slice(1)\r\n const getPureFuncName = (func: string) => func.replace(partPayload, ``).replace(partCommand, ``).replace(partCaption, ``).replace(partFree, ``)\r\n const buildSessionMethod = (func: string, name: any) => (proto as any)[`buildSessionMethod${upFirst(func)}`](name)\r\n\r\n // all\r\n pages.all[name] = Page\r\n\r\n for (let index = 0; index < pages.lenListFuncStaticSession; index++) {\r\n const func = pages.listFuncStaticSession[index] as string\r\n\r\n const ps = pages.static[func as keyof typeof pages.static]\r\n const psi = pages.staticIntent[func as keyof typeof pages.staticIntent]\r\n const pss = pages.staticSession[func as keyof typeof pages.staticSession]\r\n\r\n const value = { name, func } as any\r\n const p = ps || psi\r\n if (p !== undefined) {\r\n const _name = func.includes(partCommand) ? `/${name}` : name\r\n p[proto.buildIntent(_name, func.startsWith(`callback`))] = value\r\n }\r\n\r\n // staticSession\r\n if (pss !== undefined) {\r\n pss[buildSessionMethod(func, name)] = value\r\n }\r\n\r\n // dynamicStatic\r\n if (func.toLowerCase().endsWith(`free`)) {\r\n pds[getPureFuncName(func) as keyof typeof pds].push(value)\r\n }\r\n }\r\n\r\n // all\r\n if (proto.free) {\r\n pd.push(name)\r\n }\r\n }\r\n\r\n public pageLoads() {\r\n this.log?.info?.(`Load pages..`)\r\n\r\n const path = join(process.cwd(), `src`, `pages`)\r\n if (!existsSync(path)) {\r\n throw new Error(`Folder ${path} is not found, please make it manually`)\r\n }\r\n\r\n const files = readdirSync(path)\r\n const initStatic = {} as Record<string, { name: string; func: string }> // { [page.data.name]: { name: Page.data.name, func: routeFunctionName } }\r\n const initStaticIntent = initStatic // { [intent]: { name: page.data.name, func: routeFunctionName } }\r\n const initStaticSession = initStatic // { [session.method]: { name: page.data.name, func: routeFunctionName } }\r\n const initDynamicSpesific = [] as { name: string; func: string }[] //\r\n\r\n const listFuncStatic = [\r\n // callback\r\n `callback`,\r\n // text\r\n `text`,\r\n `textCommand`,\r\n // photo\r\n `photoCaption`,\r\n `photoCaptionCommand`,\r\n // video\r\n `videoCaption`,\r\n `videoCaptionCommand`,\r\n // audio\r\n `audioCaption`,\r\n `audioCaptionCommand`,\r\n // document\r\n `documentCaption`,\r\n `documentCaptionCommand`,\r\n // animation\r\n `animationCaption`,\r\n `animationCaptionCommand`,\r\n // voice\r\n `voiceCaption`,\r\n `voiceCaptionCommand`,\r\n // videoNote\r\n `videoNoteCaption`,\r\n `videoNoteCaptionCommand`\r\n ] as const\r\n const listFuncStaticIntent = [\r\n // callback\r\n `callbackPayload`,\r\n // text\r\n `textPayload`,\r\n `textCommandPayload`,\r\n // photo\r\n `photoCaptionPayload`,\r\n `photoCaptionCommandPayload`,\r\n // video\r\n `videoCaptionPayload`,\r\n `videoCaptionCommandPayload`,\r\n // audio\r\n `audioCaptionPayload`,\r\n `audioCaptionCommandPayload`,\r\n // document\r\n `documentCaptionPayload`,\r\n `documentCaptionCommandPayload`,\r\n // animation\r\n `animationCaptionPayload`,\r\n `animationCaptionCommandPayload`,\r\n // voice\r\n `voiceCaptionPayload`,\r\n `voiceCaptionCommandPayload`,\r\n // video note\r\n `videoNoteCaptionPayload`,\r\n `videoNoteCaptionCommandPayload`\r\n ] as const\r\n const listFuncStaticSession = [\r\n ...listFuncStatic,\r\n ...listFuncStaticIntent,\r\n // text\r\n `textFree`,\r\n // photo\r\n `photoFree`,\r\n // video\r\n `videoFree`,\r\n // audio\r\n `audioFree`,\r\n // document\r\n `documentFree`,\r\n // animation\r\n `animationFree`,\r\n // voice\r\n `voiceFree`,\r\n // videoNote\r\n `videoNoteFree`,\r\n // sticker\r\n `stickerFree`,\r\n // location\r\n `locationFree`,\r\n // contact\r\n `contactFree`\r\n ] as const\r\n\r\n const makeObject = <const T extends readonly string[], V>(keys: T, val: V): { [K in T[number]]: V } => Object.fromEntries(keys.map((k) => [k, { ...val }])) as { [K in T[number]]: V }\r\n\r\n const pages = {\r\n all: {} as Record<string, IPageBase>, // (classes) all Page\r\n dynamic: [] as string[], // (dynamic) all Page function free\r\n dynamicSpesific: {\r\n text: initDynamicSpesific,\r\n photo: initDynamicSpesific,\r\n video: initDynamicSpesific,\r\n audio: initDynamicSpesific,\r\n document: initDynamicSpesific,\r\n animation: initDynamicSpesific,\r\n voice: initDynamicSpesific,\r\n videoNote: initDynamicSpesific,\r\n sticker: initDynamicSpesific,\r\n location: initDynamicSpesific,\r\n contact: initDynamicSpesific\r\n },\r\n static: makeObject(listFuncStatic, initStatic),\r\n staticIntent: makeObject(listFuncStaticIntent, initStaticIntent),\r\n staticSession: makeObject(listFuncStaticSession, initStaticSession),\r\n listFuncStatic,\r\n listFuncStaticIntent,\r\n listFuncStaticSession,\r\n lenListFuncStatic: listFuncStatic.length,\r\n lenListFuncStaticIntent: listFuncStaticIntent.length,\r\n lenListFuncStaticSession: listFuncStaticSession.length\r\n }\r\n\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const module = require(filePath) // eslint-disable-line\r\n const exports = Object.values(module)\r\n const Page = exports[0] as IPageBase // like StartPage. not have default export\r\n if (Page === undefined) {\r\n throw `file ${parse(filePath).name} must have export (not default) class page`\r\n }\r\n\r\n // create if not exist and set name (without ext) according filePath\r\n this.pageBuildData(Page, filePath)\r\n\r\n // if the raw template writes directly to the Page class, do a compile\r\n this.pageCompile(Page)\r\n\r\n // sort route method\r\n this.pageSorts(Page, pages)\r\n }\r\n\r\n this.log?.info?.(`Finish load pages with total (${Object.keys(pages.all).length})`)\r\n return pages\r\n }\r\n\r\n public async pageRoutes(ctx: Ctx, fromListener: `callback` | keyof typeof this.pages.dynamicSpesific): Promise<any | null> {\r\n // to be reassigned\r\n let Page: IPageBase | undefined\r\n let res: { name: string; func: string } | undefined\r\n\r\n // (static) priority O(1)\r\n if (Page === undefined) {\r\n const cd = ctx.callbackData\r\n const mt = ctx.msgText\r\n const mc = ctx.msgCaption\r\n const ps = this.pages.static\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStatic; index++) {\r\n const funcName = this.pages.listFuncStatic[index] as `animationCaption`\r\n res = ps[funcName][cd || mt || mc]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n\r\n // (staticSession) x = method; O(x)\r\n if (Page === undefined) {\r\n const session = await ctx.sessionGet()\r\n if (session) {\r\n const mtd = session.method\r\n const pss = this.pages.staticSession\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStaticSession; index++) {\r\n const funcName = this.pages.listFuncStaticSession[index] as `animationCaption`\r\n res = pss[funcName][mtd]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n }\r\n\r\n // (staticIntent) x = startsWith; O(x)\r\n if (Page === undefined) {\r\n const cdi = ctx.callbackDataIntent\r\n const mti = ctx.msgTextIntent\r\n const mci = ctx.msgCaptionIntent\r\n const psi = this.pages.staticIntent\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStaticIntent; index++) {\r\n const funcName = this.pages.listFuncStaticIntent[index] as `animationCaptionCommandPayload`\r\n res = psi[funcName][cdi || mti || mci]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n\r\n // run\r\n if (Page !== undefined && res !== undefined) {\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage[res.func as keyof typeof initPage]?.()\r\n return initRoute\r\n }\r\n\r\n // (dynamicSpesific) O(n)\r\n const arrFree = this.pages.dynamicSpesific[fromListener as keyof typeof this.pages.dynamicSpesific] || []\r\n for (let index = 0; index < arrFree.length; index++) {\r\n const value = arrFree[index]\r\n if (value === undefined) {\r\n continue\r\n }\r\n\r\n const Page = this.pages.all[value.func]\r\n if (Page === undefined) {\r\n continue\r\n }\r\n\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage[value.name as keyof typeof initPage]?.()\r\n // const initRoute = await initPage.route(value.name)\r\n if (initRoute !== null) {\r\n return initRoute // stop when return not null\r\n }\r\n }\r\n\r\n // (dynamic) O(n)\r\n for (let index = 0; index < this.pages.dynamic.length; index++) {\r\n const value = this.pages.dynamic[index]\r\n if (value === undefined) {\r\n continue\r\n }\r\n\r\n const Page = this.pages.all[value]\r\n if (Page === undefined) {\r\n continue\r\n }\r\n\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage.free?.()\r\n // const initRoute = await initPage.route(`free`)\r\n if (initRoute !== null) {\r\n return initRoute // stop when return not null\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n public async hookBeforeRoute(ctx: Ctx, listenerName: string) {\r\n // must be override\r\n return true\r\n }\r\n\r\n public async hookErrorPage(ctx: Ctx, listenerName: string, error: any, isEdit: boolean) {\r\n // must be override\r\n return\r\n }\r\n\r\n public async hookErrorInputNotFoundPage(ctx: Ctx) {\r\n // must be override\r\n return\r\n }\r\n\r\n public async onMessage(ct: Context, listenerName: string): Promise<void> {\r\n const ctx = this.initCtx(ct)\r\n try {\r\n const before = await this.hookBeforeRoute(ctx, listenerName)\r\n if (before === false) {\r\n return\r\n }\r\n\r\n const route = await this.pageRoutes(ctx, listenerName as any)\r\n if (route === null) {\r\n await this.hookErrorInputNotFoundPage(ctx)\r\n }\r\n } catch (error) {\r\n await this.hookErrorPage(ctx, listenerName, error, false)\r\n }\r\n }\r\n\r\n public async onCallbackQueryData(ct: Context): Promise<void> {\r\n const ctx = this.initCtx(ct)\r\n try {\r\n // answer callback query first for fast response\r\n await ctx.callbackQueryAnswer()\r\n const before = await this.hookBeforeRoute(ctx, `onCallbackQueryData`)\r\n if (before === false) {\r\n return\r\n }\r\n\r\n // Check all route\r\n await this.pageRoutes(ctx, `callback`)\r\n } catch (error) {\r\n await this.hookErrorPage(ctx, `onCallbackQueryData`, error, true)\r\n }\r\n }\r\n\r\n public async onMessageText(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageText`)\r\n }\r\n\r\n public async onMessagePhoto(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessagePhoto`)\r\n }\r\n\r\n public async onMessageVideo(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVideo`)\r\n }\r\n\r\n public async onMessageAudio(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageAudio`)\r\n }\r\n\r\n public async onMessageDocument(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageDocument`)\r\n }\r\n\r\n public async onMessageAnimation(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageAnimation`)\r\n }\r\n\r\n public async onMessageVoice(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVoice`)\r\n }\r\n\r\n public async onMessageVideoNote(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVideoNote`)\r\n }\r\n\r\n public async onMessageSticker(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageSticker`)\r\n }\r\n\r\n public async onMessageLocation(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageLocation`)\r\n }\r\n\r\n public async onMessageContact(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageContact`)\r\n }\r\n}\r\n","export class TemplateEngine {\r\n public static _escape(str: string): string {\r\n return str\r\n .replace(/\\\\/g, `\\\\\\\\`) // escape backslash: \\ → \\\\\r\n .replace(/`/g, `\\\\\\``) // escape backtick: ` → \\`\r\n }\r\n\r\n public static _processVariables(template: string) {\r\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => `\\${(data && data[\"${key}\"]) ?? \"\"}`)\r\n }\r\n\r\n public static _processBaseBlocks(template: string) {\r\n const baseRegex = /<base\\b[^>]*?(?:\\sid=([\"']?)([^\"'\\s>]+)\\1)?[^>]*?>([\\s\\S]*?)<\\/base>/g\r\n const result: {\r\n [baseId: string]: string\r\n } = {}\r\n\r\n for (const match of template.matchAll(baseRegex)) {\r\n const idValue = match[2] ?? `default`\r\n const inner = match[3] ?? ``\r\n const cleaned = inner\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n .trim()\r\n\r\n result[idValue] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _processScriptBlocks(template: string) {\r\n return template.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (_, rawCode) => {\r\n const innerCode = rawCode.trim()\r\n if (!innerCode) return ``\r\n\r\n return `\\${(() => { if (!data) return ''; try { with(data) { ${innerCode} } } catch(e) { return '' } })()}`\r\n })\r\n }\r\n\r\n public static _processSpaceBlocks(template: string) {\r\n return template.replace(/^[ \\t]*<space\\s*\\/>[ \\t]*$/gim, ``)\r\n }\r\n\r\n public static _processDivBlocks(template: string) {\r\n return template.replace(/<div>([\\s\\S]*?)<\\/div>/gi, (_, inner) => {\r\n const cleaned = inner\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n return cleaned\r\n })\r\n }\r\n\r\n public static _processMessageBlocks(template: string) {\r\n const messageRegex = /<message\\s+lang=\"([^\"]+)\"\\s*>([\\s\\S]*?)<\\/message>/gi\r\n const result: {\r\n [lang: string]: string\r\n } = {}\r\n\r\n for (const [, lang, rawContent] of template.matchAll(messageRegex) as any) {\r\n const cleaned = rawContent\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n .trim()\r\n\r\n result[lang] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _processKeyboardBlocks(template: string) {\r\n const keyboardRegex = /<keyboard\\b[^>]*\\blang=\"([^\"]*)\"[^>]*?(?:\\sfor=\"([^\"]*)\")?[^>]*>([\\s\\S]*?)<\\/keyboard>/gi\r\n const result: {\r\n [lang: string]: {\r\n inline?: string\r\n default?: string\r\n }\r\n } = {}\r\n\r\n for (const [, lang, forAttr, rawContent] of template.matchAll(keyboardRegex) as any) {\r\n const mode = forAttr === `default` ? `default` : `inline`\r\n const cleaned = rawContent.trim()\r\n\r\n if (!result[lang]) {\r\n result[lang] = {}\r\n }\r\n result[lang][mode] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _compileToFunction<T extends boolean>(template: T extends true ? string[] : string, isArray: T): T extends true ? (data?: Record<string, any>) => string[] : (data?: Record<string, any>) => string {\r\n let singleOrCombined: string\r\n if (isArray) {\r\n const multiTemplate = template as string[]\r\n singleOrCombined = multiTemplate.map((t) => `\\`${t}\\``).join(`,`)\r\n } else {\r\n singleOrCombined = `\\`${template as string}\\``\r\n }\r\n\r\n let processed = singleOrCombined\r\n processed = this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(processed)))\r\n\r\n if (isArray) {\r\n const functionBody = `return [${processed}]`\r\n return new Function(`data`, functionBody) as any\r\n } else {\r\n const functionBody = `return ${processed}`\r\n return new Function(`data`, functionBody) as any\r\n }\r\n }\r\n\r\n public static compileMessages(template: string) {\r\n const baseBlocks = this._processBaseBlocks(template)\r\n const result: {\r\n [baseId: string]: {\r\n [lang: string]: (data?: Record<string, any>) => string\r\n }\r\n } = {}\r\n\r\n for (const [baseId, baseContent] of Object.entries(baseBlocks)) {\r\n const messages = this._processMessageBlocks(baseContent)\r\n result[baseId] = {}\r\n\r\n for (const [lang, content] of Object.entries(messages)) {\r\n const processed = this._processVariables(this._processScriptBlocks(content))\r\n result[baseId][lang] = this._compileToFunction(processed, false)\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n public static compileKeyboards(template: string) {\r\n const baseBlocks = this._processBaseBlocks(template)\r\n const result: {\r\n [baseId: string]: {\r\n [lang: string]: {\r\n inline?: (data?: Record<string, any>) => string[]\r\n default?: (data?: Record<string, any>) => string[]\r\n }\r\n }\r\n } = {}\r\n\r\n for (const [baseId, baseContent] of Object.entries(baseBlocks)) {\r\n const keyboards = this._processKeyboardBlocks(baseContent)\r\n result[baseId] = {}\r\n\r\n for (const [lang, modes] of Object.entries(keyboards)) {\r\n result[baseId][lang] = {}\r\n\r\n for (const [mode, content] of Object.entries(modes)) {\r\n // Pisahkan label, handle escaped comma\r\n const labels = content.split(/(?<!\\\\),\\s*/).map((label: string) => label.replace(/\\\\,/g, `,`).trim())\r\n\r\n const processedLabels = labels.map((label) => this._processVariables(this._processScriptBlocks(label)))\r\n\r\n result[baseId][lang][mode as `inline` | `default`] = this._compileToFunction(processedLabels, true)\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }\r\n}\r\n","import { TemplateEngine } from \".\"\r\nimport { readFile, mkdir } from \"node:fs/promises\"\r\nimport { watch, FSWatcher } from \"chokidar\"\r\nimport { basename, join, extname } from \"node:path\"\r\nimport { readdirSync, readFileSync, existsSync, statSync, writeFileSync } from \"node:fs\"\r\n\r\n/** Template file interface for better type safety */\r\ntype ICompiledTemplate = {\r\n message: ReturnType<typeof TemplateEngine.compileMessages>\r\n keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>\r\n}\r\n\r\n/** Template loading options */\r\ntype ITemplateOptions = {\r\n /** Enable file watching for hot reloading (if have templatePath) */\r\n enableWatch?: boolean\r\n /** Base path for template files (set null if dont want read template from file) */\r\n path?: string | undefined | null\r\n /** Force language params to this value */\r\n forceLanguage?: string | undefined | null\r\n}\r\n\r\n/** Template management system */\r\nexport class TemplateManager {\r\n public _map = new Map<string, ICompiledTemplate>()\r\n public _engine = TemplateEngine\r\n public _watcher: FSWatcher | null = null\r\n public _supportedExtensions = new Set([`.html`])\r\n public readonly _path: string | null\r\n public readonly _forceLanguage: string | null\r\n public readonly _isWatchEnabled: boolean\r\n public constructor(options: ITemplateOptions = {}) {\r\n const { enableWatch = false, path = null, forceLanguage = null } = options\r\n\r\n this._path = path\r\n this._forceLanguage = forceLanguage\r\n this._isWatchEnabled = enableWatch\r\n\r\n this._validatePath()\r\n this._initializeWatcher()\r\n this._loadAllFiles()\r\n }\r\n\r\n /** Validate and ensure template directory exists. @returns Void */\r\n public _validatePath(): void {\r\n try {\r\n if (this._path === null || !existsSync(this._path)) {\r\n return\r\n }\r\n\r\n const stats = statSync(this._path)\r\n if (!stats.isDirectory()) {\r\n throw new Error(`Template path is not a directory: ${this._path}`)\r\n }\r\n } catch (error) {\r\n throw new Error(`Failed to validate Template path: ${error}`)\r\n }\r\n }\r\n\r\n /** Initialize file system watcher for hot reloading. @returns Void */\r\n public _initializeWatcher(): void {\r\n if (this._path === null || !this._isWatchEnabled) {\r\n return\r\n }\r\n\r\n this._watcher = watch(this._path, {\r\n persistent: true,\r\n ignoreInitial: true,\r\n awaitWriteFinish: {\r\n stabilityThreshold: 100,\r\n pollInterval: 50\r\n }\r\n })\r\n\r\n this._watcher!.on(`change`, this._handleFileChange.bind(this))\r\n this._watcher!.on(`add`, this._handleFileAdd.bind(this))\r\n this._watcher!.on(`unlink`, this._handleFileDelete.bind(this))\r\n this._watcher!.on(`error`, this._handleWatchError.bind(this))\r\n }\r\n\r\n /** Handle file change events */\r\n public async _handleFileChange(filepath: string): Promise<void> {\r\n const filename = basename(filepath)\r\n if (this._isValidFile(filename)) {\r\n await this._loadFile(filename, false)\r\n }\r\n }\r\n\r\n /** Handle file add events */\r\n public async _handleFileAdd(filePath: string): Promise<void> {\r\n const fileName = basename(filePath)\r\n if (this._isValidFile(fileName)) {\r\n await this._loadFile(fileName, false)\r\n }\r\n }\r\n\r\n /** Handle file delete events */\r\n public _handleFileDelete(filePath: string): void {\r\n const fileName = basename(filePath)\r\n const fileKey = this._getKey(fileName)\r\n if (this._map.has(fileKey)) {\r\n this._map.delete(fileKey)\r\n }\r\n }\r\n\r\n /** Handle watcher errors */\r\n public _handleWatchError(error: any): void {\r\n // you can overrides\r\n }\r\n\r\n /** Load all Template files during initialization */\r\n public _loadAllFiles(): void {\r\n if (this._path === null || !existsSync(this._path)) {\r\n return\r\n }\r\n const files = readdirSync(this._path, { encoding: `utf8` })\r\n const validFiles = files.filter((file) => this._isValidFile(file))\r\n for (const fileName of validFiles) {\r\n this._loadFile(fileName, true)\r\n }\r\n }\r\n\r\n /** Load and compile a single template file */\r\n public async _loadFile(filename: string, useSync: boolean = true): Promise<void> {\r\n if (this._path === null) {\r\n return\r\n }\r\n const path = join(this._path, filename)\r\n const key = this._getKey(filename)\r\n const raw = useSync ? readFileSync(path, { encoding: `utf8` }) : await readFile(path, { encoding: `utf8` })\r\n this.compile(key, raw)\r\n }\r\n\r\n public _isValidFile(filename: string): boolean {\r\n const extension = extname(filename).toLowerCase()\r\n return this._supportedExtensions.has(extension)\r\n }\r\n\r\n public _getKey(filename: string): string {\r\n return filename.replace(/\\.[^/.]+$/, ``)\r\n }\r\n\r\n public compile(key: string, rawTemplate: string, keepIfExist?: Partial<{ [K in keyof ICompiledTemplate]: boolean }>) {\r\n const existing = this._map.get(key)\r\n const compiled = existing || ({} as ICompiledTemplate)\r\n let updated = false\r\n\r\n if (keepIfExist === undefined || keepIfExist?.message === false || existing?.message === undefined) {\r\n compiled.message = TemplateEngine.compileMessages(rawTemplate)\r\n updated = true\r\n }\r\n if (keepIfExist === undefined || keepIfExist?.keyboard === false || existing?.keyboard === undefined) {\r\n compiled.keyboard = TemplateEngine.compileKeyboards(rawTemplate)\r\n updated = true\r\n }\r\n\r\n if (updated) {\r\n this._map.set(key, compiled)\r\n }\r\n }\r\n\r\n /**\r\n * Get compiled message template\r\n * @param key Template identifier (filename without extension)\r\n * @param baseId Base id attr from block\r\n * @param language Target language code\r\n * @param data Template variables\r\n * @returns Rendered message string\r\n */\r\n public getMessage(key: string, baseId: string = `default`, language: string = `en`, data?: Record<string, any>): string {\r\n const template = this._map.get(key)\r\n const func = template?.message?.[baseId]?.[this._forceLanguage || language]\r\n if (!func) {\r\n return ``\r\n }\r\n\r\n try {\r\n return func(data)\r\n } catch (error) {\r\n return ``\r\n }\r\n }\r\n\r\n /**\r\n * Get compiled keyboard template\r\n * @param key Template identifier (filename without extension)\r\n * @param baseId Base id attr from block\r\n * @param language Target language code\r\n * @param data Template variables\r\n * @returns Array of rendered button labels\r\n */\r\n public getKeyboard(key: string, baseId: string = `default`, language: string = `en`, display: `inline` | `default` = `inline`, data?: Record<string, any>): string[] {\r\n const template = this._map.get(key)\r\n const func = template?.keyboard?.[baseId]?.[this._forceLanguage || language]?.[display]\r\n if (!func) {\r\n return []\r\n }\r\n\r\n try {\r\n return func(data)\r\n } catch (error) {\r\n return []\r\n }\r\n }\r\n\r\n /**\r\n * Update message template in memory\r\n * @param key Template identifier (filename without extension)\r\n * @param rawTemplate Raw template string\r\n */\r\n public setMessage(key: string, rawTemplate: string): void {\r\n this.compile(key, rawTemplate, { keyboard: true })\r\n }\r\n\r\n /**\r\n * Update keyboard template in memory\r\n * @param key Template identifier (filename without extension)\r\n * @param rawTemplate Raw template string\r\n */\r\n public setKeyboard(key: string, rawTemplate: string): void {\r\n this.compile(key, rawTemplate, { message: true })\r\n }\r\n\r\n /**\r\n * Write template to file and update cache\r\n * @param filename Target filename (with extension)\r\n * @param rawTemplate Template to write\r\n * @returns Promise that resolves when file is written\r\n */\r\n public async write(filename: string, rawTemplate: string): Promise<void> {\r\n if (this._path === null) {\r\n return\r\n }\r\n const filePath = join(this._path, filename)\r\n await mkdir(this._path, { recursive: true })\r\n writeFileSync(filePath, rawTemplate, { encoding: `utf8` })\r\n await this._loadFile(filename, false)\r\n }\r\n\r\n /**\r\n * Get list of available template\r\n * @returns Array of template names\r\n */\r\n public getAvailable(): string[] {\r\n return Array.from(this._map.keys())\r\n }\r\n\r\n /**\r\n * Check if template exists\r\n * @param key Template identifier\r\n * @returns True if template exists\r\n */\r\n public has(key: string): boolean {\r\n return this._map.has(key)\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n * @returns Object with cache information\r\n */\r\n public getCacheStats(): { templateCount: number; totalSize: number } {\r\n return {\r\n templateCount: this._map.size,\r\n totalSize: JSON.stringify(this._map.entries().toArray(), (_, value) => {\r\n return typeof value === `function` ? value.toString() : value\r\n }).length\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup resources and close watchers\r\n * @returns Promise void\r\n */\r\n public async destroy(): Promise<void> {\r\n if (this._watcher) {\r\n await this._watcher.close()\r\n }\r\n this._map.clear()\r\n }\r\n}\r\n"],"mappings":"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","names":["index_exports","__export","BaseGeneral","BaseGuard","BasePage","CacheExternal","Ctx","Gramstax","TemplateEngine","TemplateManager","__toCommonJS","import_logging_pretty","BaseGeneral","__name","LoggingPretty","error","func","constructorName","funcName","import_promises","Ctx","BaseGeneral","ct","templateManager","cacheSession","cacheKeyboard","__name","v","ids","languageCode","keyboard","data","baseId","options","msgs","it","index","id","msg","type","method","params","moreRoot","value","result","grammy_exports","__reExport","BasePage","Ctx","__name","ctx","callback","args","params","tkey","key","ckb","ikb","arr","rkb","kb","method","name","paramsAdd","str","fbCallbackData","tag","prefix","BaseGuard","BasePage","__name","page","import_keyv","import_redis","CacheExternal","url","namespace","ttl","more","store","KeyvRedis","__name","import_bun","import_node_fs","import_node_path","import_logging_pretty","TemplateEngine","__name","str","template","_","key","baseRegex","result","match","idValue","cleaned","rawCode","innerCode","inner","messageRegex","lang","rawContent","keyboardRegex","forAttr","mode","isArray","singleOrCombined","t","processed","functionBody","baseBlocks","baseId","baseContent","messages","content","keyboards","modes","processedLabels","label","import_promises","import_chokidar","import_node_path","import_node_fs","TemplateManager","__name","TemplateEngine","options","enableWatch","path","forceLanguage","error","filepath","filename","filePath","fileName","fileKey","validFiles","file","useSync","key","raw","extension","rawTemplate","keepIfExist","existing","compiled","updated","baseId","language","data","func","display","_","value","import_grammy","Gramstax","__name","params","CacheExternal","TemplateManager","error","botInfo","method","data","username","ct","Ctx","baseUrl","handleUpdate","pathWebhook","req","pathname","timestamp","webhookUrl","Page","redacted","filePath","pages","name","proto","partPayload","partCommand","partCaption","partFree","pd","pds","upFirst","s","getPureFuncName","func","buildSessionMethod","index","ps","psi","pss","value","p","_name","path","files","initStatic","initStaticIntent","initStaticSession","initDynamicSpesific","listFuncStatic","listFuncStaticIntent","listFuncStaticSession","makeObject","keys","val","k","file","module","ctx","fromListener","res","cd","mt","mc","funcName","session","mtd","cdi","mti","mci","arrFree","initRoute","listenerName","isEdit"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/base/general.ts","../../src/core/ctx.ts","../../src/grammy/index.ts","../../src/base/page.ts","../../src/base/guard.ts","../../src/cache/external.ts","../../src/core/bot.ts","../../src/template/engine.ts","../../src/template/manager.ts"],"sourcesContent":["export * from \"./base\"\r\nexport * from \"./cache\"\r\nexport * from \"./core\"\r\nexport * from \"./template\"\r\n","import LoggingPretty from \"logging-pretty\"\r\n\r\nexport abstract class BaseGeneral {\r\n protected static log = new LoggingPretty()\r\n protected static logError(error: any, func: string) {\r\n // const name = typeof this.name != `string` ? this.toString().match(/class\\s+([^\\s{]+)/)?.[1] : this.name\r\n this.log.error(`[${this.toString().match(/class\\s+([^\\s{]+)/)?.[1]}:${func}]: ${String(error)}`)\r\n }\r\n\r\n // protected logError(error: any, func: string, name?: string) {\r\n // log.error(`[${name || this.constructor.name}:${func}]: ${String(error)}`)\r\n // }\r\n\r\n protected logError(error: any, constructorName?: string, funcName?: string) {\r\n ;(this.constructor as any).log.error(`[${constructorName || this.constructor.name}:${funcName}] ${String(error)}`)\r\n }\r\n}\r\n","import { CacheExternal } from \"../cache\"\r\nimport { setTimeout } from \"node:timers/promises\"\r\nimport { BaseGeneral } from \"../base\"\r\nimport { TemplateManager } from \"../template\"\r\nimport { InlineKeyboard, Keyboard, type Context } from \"grammy\"\r\n\r\nexport class Ctx extends BaseGeneral {\r\n public data = (this as any).constructor.data as { name: string; callbackData: (...args: any) => string | any } // for internal access (this.**). example this.data.callbackData\r\n\r\n public get isPremium() {\r\n return this.ct.from?.is_premium ?? false\r\n }\r\n public get isBot() {\r\n return this.ct.from?.is_bot ?? false\r\n }\r\n public get userid() {\r\n return this.ct.from?.id as number\r\n }\r\n public get username() {\r\n return this.ct.from?.username as string\r\n }\r\n public get fullname() {\r\n return `${this.ct.from?.first_name || ``}${this.ct.from?.last_name || ``}`\r\n }\r\n public get firstname() {\r\n return this.ct.from?.first_name as string\r\n }\r\n public get lastname() {\r\n return this.ct.from?.last_name as string\r\n }\r\n public get msgText() {\r\n return this.ct.message?.text as string\r\n }\r\n public get msgTextIntent() {\r\n return this.msgText && this.msgText.indexOf(` `) != -1 ? (this.msgText.split(` `)[0] as string) : ``\r\n }\r\n public get msgTextPayloads() {\r\n return this.msgText && this.msgText.indexOf(` `) != -1 ? (this.msgText.split(` `).slice(1) as any[]) : ([] as any[])\r\n }\r\n public get msgTextPayload() {\r\n return this.msgTextPayloads[0] as string\r\n }\r\n public get msgCaption() {\r\n return this.ct.message?.caption as string\r\n }\r\n public get msgCaptionIntent() {\r\n return this.msgCaption && this.msgCaption.indexOf(` `) != -1 ? (this.msgCaption.split(` `)[0] as string) : ``\r\n }\r\n public get msgPhoto() {\r\n return this.ct.message?.photo\r\n }\r\n public get msgVideo() {\r\n return this.ct.message?.video\r\n }\r\n public get msgAudio() {\r\n return this.ct.message?.audio\r\n }\r\n public get callbackData() {\r\n return this.ct.callbackQuery?.data as string\r\n }\r\n public get callbackDataIntent() {\r\n return this.callbackData && this.callbackData.indexOf(`:`) != -1 ? (this.callbackData.split(`:`)[0] as string) : ``\r\n }\r\n public get callbackDataPayloads() {\r\n return this.callbackData && this.callbackData.indexOf(`:`) != -1 ? (this.callbackData.split(`:`).slice(1) as any[]) : ([] as any[])\r\n }\r\n public get callbackDataPayload() {\r\n return this.callbackDataPayloads?.[0] as string\r\n }\r\n public get callbackDataParts() {\r\n return this.callbackDataPayload && this.callbackDataPayload.indexOf(`+`) != -1 ? (this.callbackDataPayload.split(`+`) as any[]) : ([] as any[])\r\n }\r\n public get languageCode() {\r\n return this.ct.from?.language_code as string\r\n }\r\n public set languageCode(v: any) {\r\n ;(this as any).ct.from.language_code = v\r\n }\r\n\r\n public session: { method?: string; params?: any } = {}\r\n public constructor(public ct: Context, public templateManager: TemplateManager, public cacheSession: CacheExternal, public cacheKeyboard: Map<any, any>) {\r\n super()\r\n }\r\n\r\n public async broadcast(ids: any[], languageCode: any[], keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n const limitFree = 30\r\n const msgs = languageCode.map((it) => this.templateManager.getMessage(this.data.name, baseId, it, data)) as any[]\r\n for (let index = 0; index < ids.length; index++) {\r\n const id = ids[index]\r\n const msg = msgs[index]\r\n await this.ct.api.sendMessage(id, msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n\r\n if (index + 1 == limitFree) {\r\n await setTimeout(1200)\r\n }\r\n }\r\n }\r\n\r\n public async reply(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n const msg = this.templateManager.getMessage(this.data.name, baseId, this.languageCode, data)\r\n return await this.ct.reply(msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n }\r\n\r\n public async replyAction(type: Parameters<typeof this.ct.replyWithChatAction>[0]) {\r\n return await this.ct.replyWithChatAction(type)\r\n }\r\n\r\n public async edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any) {\r\n try {\r\n const msg = this.templateManager.getMessage(this.data.name, baseId, this.languageCode, data)\r\n return await this.ct.editMessageText(msg, {\r\n parse_mode: `HTML`,\r\n reply_markup: keyboard,\r\n ...options\r\n })\r\n } catch (error) {\r\n await this.reply(keyboard, data, baseId, options)\r\n }\r\n }\r\n\r\n public async delete() {\r\n return await this.ct.deleteMessage()\r\n }\r\n\r\n public async callbackQueryAnswer(options?: any) {\r\n try {\r\n return await this.ct.answerCallbackQuery(options)\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionSet(method: string, params: any, ...moreRoot: any) {\r\n try {\r\n const value = { method, params, ...moreRoot }\r\n const result = await this.cacheSession.set(`${this.userid}`, { method, params, ...moreRoot })\r\n if (result) {\r\n this.session = value\r\n }\r\n return result\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionGet(): Promise<{ method: string; params: any; [moreRoot: string]: any } | null> {\r\n try {\r\n const result = await this.cacheSession.get(`${this.userid}`)\r\n if (result) {\r\n this.session = result\r\n }\r\n return result || null\r\n } catch {\r\n return null\r\n }\r\n }\r\n\r\n public async sessionClear() {\r\n try {\r\n const result = await this.cacheSession.delete(`${this.userid}`)\r\n if (result) {\r\n this.session = {}\r\n }\r\n return result\r\n } catch {\r\n return null\r\n }\r\n }\r\n}\r\n","export * from \"grammy\"\r\n","import { Ctx } from \"../core/ctx\"\r\nimport { InlineKeyboard, Keyboard } from \"../grammy\"\r\n\r\nexport abstract class BasePage extends Ctx {\r\n public static template?: string // string html\r\n public static data: { name: string; callbackData: (...args: any) => string | any } // for external access (**.data). example StartPage.data.callbackData\r\n\r\n // =============== most common used function\r\n public transition?(...args: any): Promise<void>\r\n public internal?(...args: any): Promise<void>\r\n public notify?(...args: any): Promise<void>\r\n\r\n // =============== route function\r\n // callback\r\n public callback?(): Promise<void> // example: start\r\n public callbackPayload?(): Promise<void> // example: start:{DYNAMIC}\r\n // text\r\n public text?(): Promise<void> // example: start\r\n public textPayload?(): Promise<void> // example: start {...DYNAMIC}\r\n public textCommand?(): Promise<void> // example: /start\r\n public textCommandPayload?(): Promise<void> // example: /start {...DYNAMIC}\r\n public textFree?(): Promise<void> // example (for session): {...DYNAMIC}\r\n // photo\r\n public photoCaption?(): Promise<void>\r\n public photoCaptionPayload?(): Promise<void>\r\n public photoCaptionCommand?(): Promise<void>\r\n public photoCaptionCommandPayload?(): Promise<void>\r\n public photoFree?(): Promise<void>\r\n // video\r\n public videoCaption?(): Promise<void>\r\n public videoCaptionPayload?(): Promise<void>\r\n public videoCaptionCommand?(): Promise<void>\r\n public videoCaptionCommandPayload?(): Promise<void>\r\n public videoFree?(): Promise<void>\r\n // audio\r\n public audioCaption?(): Promise<void>\r\n public audioCaptionPayload?(): Promise<void>\r\n public audioCaptionCommand?(): Promise<void>\r\n public audioCaptionCommandPayload?(): Promise<void>\r\n public audioFree?(): Promise<void>\r\n // document\r\n public documentCaption?(): Promise<void>\r\n public documentCaptionPayload?(): Promise<void>\r\n public documentCaptionCommand?(): Promise<void>\r\n public documentCaptionCommandPayload?(): Promise<void>\r\n public documentFree?(): Promise<void>\r\n // animation\r\n public animationCaption?(): Promise<void>\r\n public animationCaptionPayload?(): Promise<void>\r\n public animationCaptionCommand?(): Promise<void>\r\n public animationCaptionCommandPayload?(): Promise<void>\r\n public animationFree?(): Promise<void>\r\n // voiceNote\r\n public voiceCaption?(): Promise<void>\r\n public voiceCaptionPayload?(): Promise<void>\r\n public voiceCaptionCommand?(): Promise<void>\r\n public voiceCaptionCommandPayload?(): Promise<void>\r\n public voiceFree?(): Promise<void>\r\n // videoNote\r\n public videoNoteCaption?(): Promise<void>\r\n public videoNoteCaptionPayload?(): Promise<void>\r\n public videoNoteCaptionCommand?(): Promise<void>\r\n public videoNoteCaptionCommandPayload?(): Promise<void>\r\n public videoNoteFree?(): Promise<void>\r\n // sticker\r\n public stickerFree?(): Promise<void>\r\n // location\r\n public locationFree?(): Promise<void>\r\n // contact\r\n public contactFree?(): Promise<void>\r\n // all\r\n public free?(): Promise<void>\r\n\r\n public ctx: Ctx\r\n public constructor(ctx: Ctx & { ctx?: Ctx }) {\r\n super(ctx.ct, ctx.templateManager, ctx.cacheSession, ctx.cacheKeyboard)\r\n this.session = ctx?.ctx?.session || ctx.session // set to this PageBase\r\n this.ctx = ctx?.ctx || ctx // if have ctx.ctx (from Page.ctx) use it, otherwise ctx (from CtxBot)\r\n }\r\n\r\n // =============== build data\r\n\r\n public static buildData<C extends ((...args: any[]) => any) | undefined = undefined>(callback?: C) {\r\n return {\r\n name: ``,\r\n callbackData: callback\r\n ? function (this: { name: string }, ...args: Parameters<Exclude<C, undefined>>): ReturnType<Exclude<C, undefined>> {\r\n const params = callback(...args)\r\n return `${this.name}${params === undefined ? `` : `:${params}`}` as any\r\n }\r\n : function (this: { name: string }) {\r\n return this?.name\r\n }\r\n }\r\n }\r\n\r\n // =============== build keyboard\r\n\r\n public buildInlineKeyboard(callback: (kb: InlineKeyboard, arr: any[]) => InlineKeyboard, params?: { baseId?: any; data?: Record<string, any>; cache?: boolean }): InlineKeyboard {\r\n const tkey = this.data.name\r\n if (params?.cache === true) {\r\n const key = `${tkey}:${this.languageCode}:inline`\r\n const ckb = this.cacheKeyboard.get(key)\r\n if (!ckb) {\r\n const ikb = new InlineKeyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `inline`, params?.data)\r\n const rkb = callback(ikb, arr)\r\n this.cacheKeyboard.set(key, rkb)\r\n return rkb\r\n }\r\n return ckb\r\n }\r\n const ikb = new InlineKeyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `inline`, params?.data)\r\n const rkb = callback(ikb, arr)\r\n return rkb\r\n }\r\n\r\n public buildKeyboard(callback: (kb: Keyboard, arr: any[]) => Keyboard, params?: { baseId?: any; data?: Record<string, any>; cache?: boolean }): Keyboard {\r\n const tkey = this.data.name\r\n if (params?.cache === true) {\r\n const key = `${tkey}:${this.languageCode}:default`\r\n const ckb = this.cacheKeyboard.get(key)\r\n if (!ckb) {\r\n const kb = new Keyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `default`, params?.data)\r\n const rkb = callback(kb, arr)\r\n rkb.resized(true)\r\n this.cacheKeyboard.set(key, rkb)\r\n return rkb\r\n }\r\n return ckb\r\n }\r\n const kb = new Keyboard()\r\n const arr = this.templateManager.getKeyboard(tkey, params?.baseId, this.languageCode, `default`, params?.data)\r\n const rkb = callback(kb, arr)\r\n rkb.resized()\r\n return rkb\r\n }\r\n\r\n // =============== session validate\r\n // callback\r\n\r\n public validateSessionCallback(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodCallback(name)\r\n }\r\n\r\n public validateSessionCallbackPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodCallbackPayload(name)\r\n }\r\n\r\n // text\r\n\r\n public validateSessionText(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodText(name)\r\n }\r\n\r\n public validateSessionTextPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextPayload(name)\r\n }\r\n\r\n public validateSessionTextCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextCommand(name)\r\n }\r\n\r\n public validateSessionTextCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextCommandPayload(name)\r\n }\r\n\r\n public validateSessionTextFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodTextFree(name)\r\n }\r\n\r\n // photo\r\n\r\n public validateSessionPhotoCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaption(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionPayload(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionCommand(name)\r\n }\r\n\r\n public validateSessionPhotoCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionPhotoFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodPhotoFree(name)\r\n }\r\n\r\n // video\r\n\r\n public validateSessionVideoCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaption(name)\r\n }\r\n\r\n public validateSessionVideoCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVideoCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVideoCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVideoFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoFree(name)\r\n }\r\n\r\n // audio\r\n\r\n public validateSessionAudioCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaption(name)\r\n }\r\n\r\n public validateSessionAudioCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionPayload(name)\r\n }\r\n\r\n public validateSessionAudioCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionCommand(name)\r\n }\r\n\r\n public validateSessionAudioCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionAudioFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAudioFree(name)\r\n }\r\n\r\n // document\r\n\r\n public validateSessionDocumentCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaption(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionPayload(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionCommand(name)\r\n }\r\n\r\n public validateSessionDocumentCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionDocumentFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodDocumentFree(name)\r\n }\r\n\r\n // animation\r\n\r\n public validateSessionAnimationCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaption(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionPayload(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionCommand(name)\r\n }\r\n\r\n public validateSessionAnimationCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionAnimationFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodAnimationFree(name)\r\n }\r\n\r\n // voice\r\n\r\n public validateSessionVoiceCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaption(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVoiceCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVoiceFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVoiceFree(name)\r\n }\r\n\r\n // video note\r\n\r\n public validateSessionVideoNoteCaption(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaption(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionPayload(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionCommand(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionCommand(name)\r\n }\r\n\r\n public validateSessionVideoNoteCaptionCommandPayload(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteCaptionCommandPayload(name)\r\n }\r\n\r\n public validateSessionVideoNoteFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodVideoNoteFree(name)\r\n }\r\n\r\n // sticker\r\n\r\n public validateSessionStickerFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodStickerFree(name)\r\n }\r\n\r\n // location\r\n\r\n public validateSessionLocationFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodLocationFree(name)\r\n }\r\n\r\n // contact\r\n\r\n public validateSessionContactFree(method?: string, name?: string) {\r\n if (method === undefined) {\r\n method = this.session.method\r\n }\r\n return method === undefined ? false : method === this.buildSessionMethodContactFree(name)\r\n }\r\n\r\n // =============== session set\r\n // callback\r\n\r\n public sessionCallback(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodCallback(name), params)\r\n }\r\n\r\n public sessionCallbackPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodCallbackPayload(name), params)\r\n }\r\n\r\n // text\r\n\r\n public sessionText(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodText(name), params)\r\n }\r\n\r\n public sessionTextPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextPayload(name), params)\r\n }\r\n\r\n public sessionTextCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextCommand(name), params)\r\n }\r\n\r\n public sessionTextCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextCommandPayload(name), params)\r\n }\r\n\r\n public sessionTextFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodTextFree(name), params)\r\n }\r\n\r\n // photo\r\n\r\n public sessionPhotoCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaption(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(name), params)\r\n }\r\n\r\n public sessionPhotoCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionPhotoFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodPhotoFree(name), params)\r\n }\r\n\r\n // video\r\n\r\n public sessionVideoCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaption(name), params)\r\n }\r\n\r\n public sessionVideoCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVideoCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVideoCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVideoFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoFree(name), params)\r\n }\r\n\r\n // audio\r\n\r\n public sessionAudioCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaption(name), params)\r\n }\r\n\r\n public sessionAudioCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(name), params)\r\n }\r\n\r\n public sessionAudioCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(name), params)\r\n }\r\n\r\n public sessionAudioCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionAudioFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAudioFree(name), params)\r\n }\r\n\r\n // document\r\n\r\n public sessionDocumentCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaption(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(name), params)\r\n }\r\n\r\n public sessionDocumentCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionDocumentFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodDocumentFree(name), params)\r\n }\r\n\r\n // animation\r\n\r\n public sessionAnimationCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaption(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(name), params)\r\n }\r\n\r\n public sessionAnimationCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionAnimationFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodAnimationFree(name), params)\r\n }\r\n\r\n // voice\r\n\r\n public sessionVoiceCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaption(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVoiceCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVoiceFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVoiceFree(name), params)\r\n }\r\n\r\n // video note\r\n\r\n public sessionVideoNoteCaption(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaption(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionCommand(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(name), params)\r\n }\r\n\r\n public sessionVideoNoteCaptionCommandPayload(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(name), params)\r\n }\r\n\r\n public sessionVideoNoteFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodVideoNoteFree(name), params)\r\n }\r\n\r\n // sticker\r\n\r\n public sessionStickerFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodStickerFree(name), params)\r\n }\r\n\r\n // location\r\n\r\n public sessionLocationFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodLocationFree(name), params)\r\n }\r\n\r\n // contact\r\n\r\n public sessionContactFree(params?: any, name?: string) {\r\n return this.sessionSet(this.buildSessionMethodContactFree(name), params)\r\n }\r\n\r\n // =============== session update to set\r\n // callback\r\n\r\n public sessionToCallback(paramsAdd?: any, name?: string) {\r\n return this.sessionCallback({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToCallbackPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionCallbackPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // text\r\n\r\n public sessionToText(paramsAdd?: any, name?: string) {\r\n return this.sessionText({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionTextPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionTextCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionTextCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToTextFree(paramsAdd?: any, name?: string) {\r\n return this.sessionTextFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // photo\r\n\r\n public sessionToPhotoCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToPhotoFree(paramsAdd?: any, name?: string) {\r\n return this.sessionPhotoFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // video\r\n\r\n public sessionToVideoCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // audio\r\n\r\n public sessionToAudioCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAudioFree(paramsAdd?: any, name?: string) {\r\n return this.sessionAudioFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // document\r\n\r\n public sessionToDocumentCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToDocumentFree(paramsAdd?: any, name?: string) {\r\n return this.sessionDocumentFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // animation\r\n\r\n public sessionToAnimationCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToAnimationFree(paramsAdd?: any, name?: string) {\r\n return this.sessionAnimationFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // voice\r\n\r\n public sessionToVoiceCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVoiceFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVoiceFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // videonote\r\n\r\n public sessionToVideoNoteCaption(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaption({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionCommand(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionCommand({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteCaptionCommandPayload(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteCaptionCommandPayload({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n public sessionToVideoNoteFree(paramsAdd?: any, name?: string) {\r\n return this.sessionVideoNoteFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // sticker\r\n\r\n public sessionToStickerFree(paramsAdd?: any, name?: string) {\r\n return this.sessionStickerFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // location\r\n\r\n public sessionToLocationFree(paramsAdd?: any, name?: string) {\r\n return this.sessionLocationFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // contact\r\n\r\n public sessionToContactFree(paramsAdd?: any, name?: string) {\r\n return this.sessionContactFree({ ...this.session.params, ...paramsAdd }, name)\r\n }\r\n\r\n // =============== build intent\r\n\r\n public buildIntent(str?: string, fbCallbackData = true) {\r\n if (!str) {\r\n str = fbCallbackData ? this.data.callbackData() : this.data.name\r\n }\r\n\r\n const tag = fbCallbackData ? `:` : ` `\r\n return str?.indexOf?.(tag) != -1 ? (str?.split?.(tag)?.[0] as string) : str\r\n }\r\n\r\n // =============== build session method\r\n\r\n public buildSessionMethod(prefix: string, name: string | undefined) {\r\n return `${prefix}-${name || this.data.name}`\r\n }\r\n\r\n // callback method\r\n\r\n public buildSessionMethodCallback(name?: string) {\r\n return this.buildSessionMethod(`1`, name)\r\n }\r\n\r\n public buildSessionMethodCallbackPayload(name?: string) {\r\n return this.buildSessionMethod(`2`, name)\r\n }\r\n\r\n // text method\r\n\r\n public buildSessionMethodText(name?: string) {\r\n return this.buildSessionMethod(`3`, name)\r\n }\r\n\r\n public buildSessionMethodTextPayload(name?: string) {\r\n return this.buildSessionMethod(`4`, name)\r\n }\r\n\r\n public buildSessionMethodTextCommand(name?: string) {\r\n return this.buildSessionMethod(`5`, name)\r\n }\r\n\r\n public buildSessionMethodTextCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`6`, name)\r\n }\r\n\r\n public buildSessionMethodTextFree(name?: string) {\r\n return this.buildSessionMethod(`7`, name)\r\n }\r\n\r\n // photo method\r\n\r\n public buildSessionMethodPhotoCaption(name?: string) {\r\n return this.buildSessionMethod(`8`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`9`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`10`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`11`, name)\r\n }\r\n\r\n public buildSessionMethodPhotoFree(name?: string) {\r\n return this.buildSessionMethod(`12`, name)\r\n }\r\n\r\n // video method\r\n\r\n public buildSessionMethodVideoCaption(name?: string) {\r\n return this.buildSessionMethod(`13`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`14`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`15`, name)\r\n }\r\n\r\n public buildSessionMethodVideoCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`16`, name)\r\n }\r\n\r\n public buildSessionMethodVideoFree(name?: string) {\r\n return this.buildSessionMethod(`17`, name)\r\n }\r\n\r\n // audio method\r\n\r\n public buildSessionMethodAudioCaption(name?: string) {\r\n return this.buildSessionMethod(`18`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`19`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`20`, name)\r\n }\r\n\r\n public buildSessionMethodAudioCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`21`, name)\r\n }\r\n\r\n public buildSessionMethodAudioFree(name?: string) {\r\n return this.buildSessionMethod(`22`, name)\r\n }\r\n\r\n // document method\r\n\r\n public buildSessionMethodDocumentCaption(name?: string) {\r\n return this.buildSessionMethod(`23`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`24`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`25`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`26`, name)\r\n }\r\n\r\n public buildSessionMethodDocumentFree(name?: string) {\r\n return this.buildSessionMethod(`27`, name)\r\n }\r\n\r\n // animation method\r\n\r\n public buildSessionMethodAnimationCaption(name?: string) {\r\n return this.buildSessionMethod(`28`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`29`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`30`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`31`, name)\r\n }\r\n\r\n public buildSessionMethodAnimationFree(name?: string) {\r\n return this.buildSessionMethod(`32`, name)\r\n }\r\n\r\n // voice method\r\n\r\n public buildSessionMethodVoiceCaption(name?: string) {\r\n return this.buildSessionMethod(`33`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`34`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`35`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`36`, name)\r\n }\r\n\r\n public buildSessionMethodVoiceFree(name?: string) {\r\n return this.buildSessionMethod(`37`, name)\r\n }\r\n\r\n // video note method\r\n\r\n public buildSessionMethodVideoNoteCaption(name?: string) {\r\n return this.buildSessionMethod(`38`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionPayload(name?: string) {\r\n return this.buildSessionMethod(`39`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionCommand(name?: string) {\r\n return this.buildSessionMethod(`40`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteCaptionCommandPayload(name?: string) {\r\n return this.buildSessionMethod(`41`, name)\r\n }\r\n\r\n public buildSessionMethodVideoNoteFree(name?: string) {\r\n return this.buildSessionMethod(`42`, name)\r\n }\r\n\r\n // sticker method\r\n\r\n public buildSessionMethodStickerFree(name?: string) {\r\n return this.buildSessionMethod(`43`, name)\r\n }\r\n\r\n // location method\r\n\r\n public buildSessionMethodLocationFree(name?: string) {\r\n return this.buildSessionMethod(`44`, name)\r\n }\r\n\r\n // contact method\r\n\r\n public buildSessionMethodContactFree(name?: string) {\r\n return this.buildSessionMethod(`45`, name)\r\n }\r\n}\r\n","import { BasePage } from \"./page\"\r\nimport type { Ctx } from \"../core/ctx\"\r\n\r\nexport abstract class BaseGuard extends BasePage {\r\n public pageData: { name: string; callbackData: (...args: any) => string | any } // because Guard not have static data like Page and public data so we assign to new property\r\n public constructor(page: { ctx: Ctx; data?: any }) {\r\n super(page.ctx)\r\n this.pageData = page.data\r\n }\r\n}\r\n","import { Keyv } from \"keyv\"\r\nimport KeyvRedis from \"@keyv/redis\"\r\n\r\ntype IMore = Omit<Required<ConstructorParameters<typeof Keyv>>[0], `store` | `namespace` | `ttl`> & { forceStore?: any }\r\n\r\nexport class CacheExternal extends Keyv {\r\n constructor(public url: string | `memory` = `memory`, namespace?: string, ttl?: number, more?: IMore) {\r\n let store: any\r\n if (url.startsWith(`redis`)) store = new KeyvRedis(url)\r\n if (url === `memory`) store = new Map()\r\n if (more?.forceStore) store = more.forceStore\r\n\r\n super({ store, namespace, ttl })\r\n }\r\n}\r\n","import { Ctx } from \"./ctx\"\r\nimport { serve } from \"bun\"\r\nimport { existsSync, readdirSync } from \"node:fs\"\r\nimport { join, parse } from \"node:path\"\r\nimport { CacheExternal } from \"../cache\"\r\nimport { LoggingPretty } from \"logging-pretty\"\r\nimport { TemplateManager } from \"../template\"\r\nimport { Bot, webhookCallback, type BotError, type Context } from \"grammy\"\r\nimport type { UserFromGetMe } from \"grammy/types\"\r\nimport type { IPageBase } from \"../types/page\"\r\n\r\nexport class Gramstax {\r\n public templateManager: TemplateManager\r\n public cacheKeyboard: Map<any, any>\r\n public cacheSession: CacheExternal\r\n public log: LoggingPretty | undefined | null\r\n public bot: Bot\r\n public pages: ReturnType<typeof this.pageLoads>\r\n\r\n public constructor(params: { token: string; deploy: string; log?: LoggingPretty; cacheSession?: CacheExternal; cacheKeyboard?: Map<any, any>; templateManager?: TemplateManager }) {\r\n this.log = params.log === null ? undefined : params.log === undefined ? new LoggingPretty() : params.log\r\n this.cacheSession = params.cacheSession || new CacheExternal(`memory`, `session`)\r\n this.cacheKeyboard = params.cacheKeyboard || new Map()\r\n this.templateManager = params.templateManager || new TemplateManager({ path: null })\r\n\r\n this.bot = new Bot(params.token)\r\n this.bot.catch(this.onCatch)\r\n this.bot.on(`callback_query:data`, this.onCallbackQueryData.bind(this)) // Handle callback queries from inline keyboards\r\n this.bot.on(`message:text`, this.onMessageText.bind(this)) // Handle global text messages\r\n this.bot.on(`message:photo`, this.onMessagePhoto.bind(this)) // Handle global photo messages\r\n this.bot.on(`message:video`, this.onMessageVideo.bind(this)) // Handle global video messages\r\n this.bot.on(`message:audio`, this.onMessageAudio.bind(this)) // Handle global audio messages\r\n this.bot.on(`message:document`, this.onMessageDocument.bind(this)) // Handle global document messages\r\n this.bot.on(`message:animation`, this.onMessageAnimation.bind(this)) // Handle global animation messages\r\n this.bot.on(`message:voice`, this.onMessageVoice.bind(this)) // Handle global voice messages\r\n this.bot.on(`message:video_note`, this.onMessageVideoNote.bind(this)) // Handle global video note messages\r\n this.bot.on(`message:sticker`, this.onMessageSticker.bind(this)) // Handle global sticker messages\r\n this.bot.on(`message:location`, this.onMessageLocation.bind(this)) // Handle global location messages\r\n this.bot.on(`message:contact`, this.onMessageContact.bind(this)) // Handle global contact messages\r\n\r\n // Load pages AFTER templateManager is initialized\r\n this.pages = this.pageLoads()\r\n\r\n // Graceful shutdown\r\n process.once(`SIGINT`, () => this.bot.stop())\r\n process.once(`SIGTERM`, () => this.bot.stop())\r\n\r\n if (params.deploy.startsWith(`polling`)) {\r\n this.runPolling()\r\n } else if (params.deploy.startsWith(`webhook`)) {\r\n this.runWebhook(params.deploy.split(`webhook:`)[1] as string)\r\n }\r\n }\r\n\r\n public onCatch(error: BotError<Context>) {\r\n this.log?.error?.(`[Bot.catch]: ${String(error)}`)\r\n }\r\n\r\n public onStart(botInfo: UserFromGetMe, method: `polling` | `webhook`, data: string | null) {\r\n const { username } = botInfo\r\n if (method == `polling`) {\r\n this.log?.success?.(`Telegram bot polling started: ${username}`)\r\n } else {\r\n this.log?.success?.(`Telegram bot webhook started: ${username} (${data})`)\r\n }\r\n }\r\n\r\n public initCtx(ct: Context) {\r\n return new Ctx(ct, this.templateManager, this.cacheSession, this.cacheKeyboard)\r\n }\r\n\r\n public async runPolling() {\r\n this.bot.start({\r\n onStart: async (botInfo) => {\r\n this.onStart(botInfo, `polling`, null)\r\n }\r\n })\r\n }\r\n\r\n public async runWebhook(baseUrl: string) {\r\n const handleUpdate = webhookCallback(this.bot, `bun`)\r\n const pathWebhook = `/telegram-webhook`\r\n serve({\r\n fetch(req) {\r\n const { pathname } = new URL(req.url)\r\n if (pathname === pathWebhook) {\r\n if (req.method === `POST`) {\r\n return handleUpdate(req as any)\r\n }\r\n return new Response(`OK`, { status: 200 })\r\n }\r\n\r\n if (pathname === `/` && req.method === `GET`) {\r\n const timestamp = new Date().toISOString()\r\n return new Response(JSON.stringify({ timestamp }), {\r\n status: 200,\r\n headers: { \"Content-Type\": `application/json` }\r\n })\r\n }\r\n\r\n // Jika tidak cocok\r\n return new Response(`Not found`, { status: 404 })\r\n }\r\n })\r\n\r\n const data = await this.bot.api.getWebhookInfo()\r\n const webhookUrl = baseUrl.endsWith(`/`) ? baseUrl.slice(0, -1) + pathWebhook : baseUrl + pathWebhook\r\n if (data.url != webhookUrl) {\r\n await this.bot.api.setWebhook(webhookUrl)\r\n }\r\n\r\n const botInfo = await this.bot.api.getMe()\r\n this.onStart(botInfo, `webhook`, webhookUrl)\r\n }\r\n\r\n public pageCompile(Page: IPageBase, redacted = true) {\r\n if (Page?.template !== undefined) {\r\n this.templateManager.compile(Page.data.name, Page.template)\r\n if (redacted) {\r\n Page.template = undefined // redacted to reduce memory\r\n }\r\n } else {\r\n Page.template = undefined\r\n }\r\n }\r\n\r\n public pageBuildData(Page: IPageBase, filePath: string) {\r\n if (Page?.data === undefined) {\r\n Page.data = Page.buildData()\r\n }\r\n Page.data.name = parse(filePath).name\r\n }\r\n\r\n public pageSorts(Page: IPageBase, pages: typeof this.pages) {\r\n const name = Page.data.name\r\n const proto = Page.prototype\r\n\r\n const partPayload = `Payload`\r\n const partCommand = `Command`\r\n const partCaption = `Caption`\r\n const partFree = `Free`\r\n\r\n const pd = pages.dynamic\r\n const pds = pages.dynamicSpesific\r\n\r\n const upFirst = (s: string) => s.charAt(0).toUpperCase() + s.slice(1)\r\n const getPureFuncName = (func: string) => func.replace(partPayload, ``).replace(partCommand, ``).replace(partCaption, ``).replace(partFree, ``)\r\n const buildSessionMethod = (func: string, name: any) => (proto as any)[`buildSessionMethod${upFirst(func)}`](name)\r\n\r\n // all\r\n pages.all[name] = Page\r\n\r\n for (let index = 0; index < pages.lenListFuncStaticSession; index++) {\r\n const func = pages.listFuncStaticSession[index] as string\r\n\r\n const ps = pages.static[func as keyof typeof pages.static]\r\n const psi = pages.staticIntent[func as keyof typeof pages.staticIntent]\r\n const pss = pages.staticSession[func as keyof typeof pages.staticSession]\r\n\r\n const value = { name, func } as any\r\n const p = ps || psi\r\n if (p !== undefined) {\r\n const _name = func.includes(partCommand) ? `/${name}` : name\r\n p[proto.buildIntent(_name, func.startsWith(`callback`))] = value\r\n }\r\n\r\n // staticSession\r\n if (pss !== undefined) {\r\n pss[buildSessionMethod(func, name)] = value\r\n }\r\n\r\n // dynamicStatic\r\n if (func.toLowerCase().endsWith(`free`)) {\r\n pds[getPureFuncName(func) as keyof typeof pds].push(value)\r\n }\r\n }\r\n\r\n // all\r\n if (proto.free) {\r\n pd.push(name)\r\n }\r\n }\r\n\r\n public pageLoads() {\r\n this.log?.info?.(`Load pages..`)\r\n\r\n const path = join(process.cwd(), `src`, `pages`)\r\n if (!existsSync(path)) {\r\n throw new Error(`Folder ${path} is not found, please make it manually`)\r\n }\r\n\r\n const files = readdirSync(path)\r\n const initStatic = {} as Record<string, { name: string; func: string }> // { [page.data.name]: { name: Page.data.name, func: routeFunctionName } }\r\n const initStaticIntent = initStatic // { [intent]: { name: page.data.name, func: routeFunctionName } }\r\n const initStaticSession = initStatic // { [session.method]: { name: page.data.name, func: routeFunctionName } }\r\n const initDynamicSpesific = [] as { name: string; func: string }[] //\r\n\r\n const listFuncStatic = [\r\n // callback\r\n `callback`,\r\n // text\r\n `text`,\r\n `textCommand`,\r\n // photo\r\n `photoCaption`,\r\n `photoCaptionCommand`,\r\n // video\r\n `videoCaption`,\r\n `videoCaptionCommand`,\r\n // audio\r\n `audioCaption`,\r\n `audioCaptionCommand`,\r\n // document\r\n `documentCaption`,\r\n `documentCaptionCommand`,\r\n // animation\r\n `animationCaption`,\r\n `animationCaptionCommand`,\r\n // voice\r\n `voiceCaption`,\r\n `voiceCaptionCommand`,\r\n // videoNote\r\n `videoNoteCaption`,\r\n `videoNoteCaptionCommand`\r\n ] as const\r\n const listFuncStaticIntent = [\r\n // callback\r\n `callbackPayload`,\r\n // text\r\n `textPayload`,\r\n `textCommandPayload`,\r\n // photo\r\n `photoCaptionPayload`,\r\n `photoCaptionCommandPayload`,\r\n // video\r\n `videoCaptionPayload`,\r\n `videoCaptionCommandPayload`,\r\n // audio\r\n `audioCaptionPayload`,\r\n `audioCaptionCommandPayload`,\r\n // document\r\n `documentCaptionPayload`,\r\n `documentCaptionCommandPayload`,\r\n // animation\r\n `animationCaptionPayload`,\r\n `animationCaptionCommandPayload`,\r\n // voice\r\n `voiceCaptionPayload`,\r\n `voiceCaptionCommandPayload`,\r\n // video note\r\n `videoNoteCaptionPayload`,\r\n `videoNoteCaptionCommandPayload`\r\n ] as const\r\n const listFuncStaticSession = [\r\n ...listFuncStatic,\r\n ...listFuncStaticIntent,\r\n // text\r\n `textFree`,\r\n // photo\r\n `photoFree`,\r\n // video\r\n `videoFree`,\r\n // audio\r\n `audioFree`,\r\n // document\r\n `documentFree`,\r\n // animation\r\n `animationFree`,\r\n // voice\r\n `voiceFree`,\r\n // videoNote\r\n `videoNoteFree`,\r\n // sticker\r\n `stickerFree`,\r\n // location\r\n `locationFree`,\r\n // contact\r\n `contactFree`\r\n ] as const\r\n\r\n const makeObject = <const T extends readonly string[], V>(keys: T, val: V): { [K in T[number]]: V } => Object.fromEntries(keys.map((k) => [k, { ...val }])) as { [K in T[number]]: V }\r\n\r\n const pages = {\r\n all: {} as Record<string, IPageBase>, // (classes) all Page\r\n dynamic: [] as string[], // (dynamic) all Page function free\r\n dynamicSpesific: {\r\n text: initDynamicSpesific,\r\n photo: initDynamicSpesific,\r\n video: initDynamicSpesific,\r\n audio: initDynamicSpesific,\r\n document: initDynamicSpesific,\r\n animation: initDynamicSpesific,\r\n voice: initDynamicSpesific,\r\n videoNote: initDynamicSpesific,\r\n sticker: initDynamicSpesific,\r\n location: initDynamicSpesific,\r\n contact: initDynamicSpesific\r\n },\r\n static: makeObject(listFuncStatic, initStatic),\r\n staticIntent: makeObject(listFuncStaticIntent, initStaticIntent),\r\n staticSession: makeObject(listFuncStaticSession, initStaticSession),\r\n listFuncStatic,\r\n listFuncStaticIntent,\r\n listFuncStaticSession,\r\n lenListFuncStatic: listFuncStatic.length,\r\n lenListFuncStaticIntent: listFuncStaticIntent.length,\r\n lenListFuncStaticSession: listFuncStaticSession.length\r\n }\r\n\r\n for (const file of files) {\r\n const filePath = join(path, file)\r\n const module = require(filePath) // eslint-disable-line\r\n const exports = Object.values(module)\r\n const Page = exports[0] as IPageBase // like StartPage. not have default export\r\n if (Page === undefined) {\r\n throw `file ${parse(filePath).name} must have export (not default) class page`\r\n }\r\n\r\n // create if not exist and set name (without ext) according filePath\r\n this.pageBuildData(Page, filePath)\r\n\r\n // if the raw template writes directly to the Page class, do a compile\r\n this.pageCompile(Page)\r\n\r\n // sort route method\r\n this.pageSorts(Page, pages)\r\n }\r\n\r\n this.log?.info?.(`Finish load pages with total (${Object.keys(pages.all).length})`)\r\n return pages\r\n }\r\n\r\n public async pageRoutes(ctx: Ctx, fromListener: `callback` | keyof typeof this.pages.dynamicSpesific): Promise<any | null> {\r\n // to be reassigned\r\n let Page: IPageBase | undefined\r\n let res: { name: string; func: string } | undefined\r\n\r\n // (static) priority O(1)\r\n if (Page === undefined) {\r\n const cd = ctx.callbackData\r\n const mt = ctx.msgText\r\n const mc = ctx.msgCaption\r\n const ps = this.pages.static\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStatic; index++) {\r\n const funcName = this.pages.listFuncStatic[index] as `animationCaption`\r\n res = ps[funcName][cd || mt || mc]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n\r\n // (staticSession) x = method; O(x)\r\n if (Page === undefined) {\r\n const session = await ctx.sessionGet()\r\n if (session) {\r\n const mtd = session.method\r\n const pss = this.pages.staticSession\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStaticSession; index++) {\r\n const funcName = this.pages.listFuncStaticSession[index] as `animationCaption`\r\n res = pss[funcName][mtd]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n }\r\n\r\n // (staticIntent) x = startsWith; O(x)\r\n if (Page === undefined) {\r\n const cdi = ctx.callbackDataIntent\r\n const mti = ctx.msgTextIntent\r\n const mci = ctx.msgCaptionIntent\r\n const psi = this.pages.staticIntent\r\n\r\n for (let index = 0; index < this.pages.lenListFuncStaticIntent; index++) {\r\n const funcName = this.pages.listFuncStaticIntent[index] as `animationCaptionCommandPayload`\r\n res = psi[funcName][cdi || mti || mci]\r\n if (res) {\r\n break\r\n }\r\n }\r\n\r\n if (res !== undefined) {\r\n Page = this.pages.all[res.name]\r\n }\r\n }\r\n\r\n // run\r\n if (Page !== undefined && res !== undefined) {\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage[res.func as keyof typeof initPage]?.()\r\n return initRoute\r\n }\r\n\r\n // (dynamicSpesific) O(n)\r\n const arrFree = this.pages.dynamicSpesific[fromListener as keyof typeof this.pages.dynamicSpesific] || []\r\n for (let index = 0; index < arrFree.length; index++) {\r\n const value = arrFree[index]\r\n if (value === undefined) {\r\n continue\r\n }\r\n\r\n const Page = this.pages.all[value.func]\r\n if (Page === undefined) {\r\n continue\r\n }\r\n\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage[value.name as keyof typeof initPage]?.()\r\n // const initRoute = await initPage.route(value.name)\r\n if (initRoute !== null) {\r\n return initRoute // stop when return not null\r\n }\r\n }\r\n\r\n // (dynamic) O(n)\r\n for (let index = 0; index < this.pages.dynamic.length; index++) {\r\n const value = this.pages.dynamic[index]\r\n if (value === undefined) {\r\n continue\r\n }\r\n\r\n const Page = this.pages.all[value]\r\n if (Page === undefined) {\r\n continue\r\n }\r\n\r\n const initPage = new Page(ctx)\r\n const initRoute = await initPage.free?.()\r\n // const initRoute = await initPage.route(`free`)\r\n if (initRoute !== null) {\r\n return initRoute // stop when return not null\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n public async hookBeforeRoute(ctx: Ctx, listenerName: string) {\r\n // must be override\r\n return true\r\n }\r\n\r\n public async hookErrorPage(ctx: Ctx, listenerName: string, error: any, isEdit: boolean) {\r\n // must be override\r\n return\r\n }\r\n\r\n public async hookErrorInputNotFoundPage(ctx: Ctx) {\r\n // must be override\r\n return\r\n }\r\n\r\n public async onMessage(ct: Context, listenerName: string): Promise<void> {\r\n const ctx = this.initCtx(ct)\r\n try {\r\n const before = await this.hookBeforeRoute(ctx, listenerName)\r\n if (before === false) {\r\n return\r\n }\r\n\r\n const route = await this.pageRoutes(ctx, listenerName as any)\r\n if (route === null) {\r\n await this.hookErrorInputNotFoundPage(ctx)\r\n }\r\n } catch (error) {\r\n await this.hookErrorPage(ctx, listenerName, error, false)\r\n }\r\n }\r\n\r\n public async onCallbackQueryData(ct: Context): Promise<void> {\r\n const ctx = this.initCtx(ct)\r\n try {\r\n // answer callback query first for fast response\r\n await ctx.callbackQueryAnswer()\r\n const before = await this.hookBeforeRoute(ctx, `onCallbackQueryData`)\r\n if (before === false) {\r\n return\r\n }\r\n\r\n // Check all route\r\n await this.pageRoutes(ctx, `callback`)\r\n } catch (error) {\r\n await this.hookErrorPage(ctx, `onCallbackQueryData`, error, true)\r\n }\r\n }\r\n\r\n public async onMessageText(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageText`)\r\n }\r\n\r\n public async onMessagePhoto(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessagePhoto`)\r\n }\r\n\r\n public async onMessageVideo(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVideo`)\r\n }\r\n\r\n public async onMessageAudio(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageAudio`)\r\n }\r\n\r\n public async onMessageDocument(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageDocument`)\r\n }\r\n\r\n public async onMessageAnimation(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageAnimation`)\r\n }\r\n\r\n public async onMessageVoice(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVoice`)\r\n }\r\n\r\n public async onMessageVideoNote(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageVideoNote`)\r\n }\r\n\r\n public async onMessageSticker(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageSticker`)\r\n }\r\n\r\n public async onMessageLocation(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageLocation`)\r\n }\r\n\r\n public async onMessageContact(ct: Context): Promise<void> {\r\n await this.onMessage(ct, `onMessageContact`)\r\n }\r\n}\r\n","export class TemplateEngine {\r\n public static _escape(str: string): string {\r\n return str\r\n .replace(/\\\\/g, `\\\\\\\\`) // escape backslash: \\ → \\\\\r\n .replace(/`/g, `\\\\\\``) // escape backtick: ` → \\`\r\n }\r\n\r\n public static _processVariables(template: string) {\r\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => `\\${(data && data[\"${key}\"]) ?? \"\"}`)\r\n }\r\n\r\n public static _processBaseBlocks(template: string) {\r\n const baseRegex = /<base\\b[^>]*?(?:\\sid=([\"']?)([^\"'\\s>]+)\\1)?[^>]*?>([\\s\\S]*?)<\\/base>/g\r\n const result: {\r\n [baseId: string]: string\r\n } = {}\r\n\r\n for (const match of template.matchAll(baseRegex)) {\r\n const idValue = match[2] ?? `default`\r\n const inner = match[3] ?? ``\r\n const cleaned = inner\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n .trim()\r\n\r\n result[idValue] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _processScriptBlocks(template: string) {\r\n return template.replace(/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/gi, (_, rawCode) => {\r\n const innerCode = rawCode.trim()\r\n if (!innerCode) return ``\r\n\r\n return `\\${(() => { if (!data) return ''; try { with(data) { ${innerCode} } } catch(e) { return '' } })()}`\r\n })\r\n }\r\n\r\n public static _processSpaceBlocks(template: string) {\r\n return template.replace(/^[ \\t]*<space\\s*\\/>[ \\t]*$/gim, ``)\r\n }\r\n\r\n public static _processDivBlocks(template: string) {\r\n return template.replace(/<div>([\\s\\S]*?)<\\/div>/gi, (_, inner) => {\r\n const cleaned = inner\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n return cleaned\r\n })\r\n }\r\n\r\n public static _processMessageBlocks(template: string) {\r\n const messageRegex = /<message\\s+lang=\"([^\"]+)\"\\s*>([\\s\\S]*?)<\\/message>/gi\r\n const result: {\r\n [lang: string]: string\r\n } = {}\r\n\r\n for (const [, lang, rawContent] of template.matchAll(messageRegex) as any) {\r\n const cleaned = rawContent\r\n .replace(/^[\\t ]+/gm, ``)\r\n .replace(/^\\n+/, ``)\r\n .replace(/\\n+$/, ``)\r\n .trim()\r\n\r\n result[lang] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _processKeyboardBlocks(template: string) {\r\n const keyboardRegex = /<keyboard\\b[^>]*\\blang=\"([^\"]*)\"[^>]*?(?:\\sfor=\"([^\"]*)\")?[^>]*>([\\s\\S]*?)<\\/keyboard>/gi\r\n const result: {\r\n [lang: string]: {\r\n inline?: string\r\n default?: string\r\n }\r\n } = {}\r\n\r\n for (const [, lang, forAttr, rawContent] of template.matchAll(keyboardRegex) as any) {\r\n const mode = forAttr === `default` ? `default` : `inline`\r\n const cleaned = rawContent.trim()\r\n\r\n if (!result[lang]) {\r\n result[lang] = {}\r\n }\r\n result[lang][mode] = cleaned\r\n }\r\n return result\r\n }\r\n\r\n public static _compileToFunction<T extends boolean>(template: T extends true ? string[] : string, isArray: T): T extends true ? (data?: Record<string, any>) => string[] : (data?: Record<string, any>) => string {\r\n let singleOrCombined: string\r\n if (isArray) {\r\n const multiTemplate = template as string[]\r\n singleOrCombined = multiTemplate.map((t) => `\\`${t}\\``).join(`,`)\r\n } else {\r\n singleOrCombined = `\\`${template as string}\\``\r\n }\r\n\r\n let processed = singleOrCombined\r\n processed = this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(processed)))\r\n\r\n if (isArray) {\r\n const functionBody = `return [${processed}]`\r\n return new Function(`data`, functionBody) as any\r\n } else {\r\n const functionBody = `return ${processed}`\r\n return new Function(`data`, functionBody) as any\r\n }\r\n }\r\n\r\n public static compileMessages(template: string) {\r\n const baseBlocks = this._processBaseBlocks(template)\r\n const result: {\r\n [baseId: string]: {\r\n [lang: string]: (data?: Record<string, any>) => string\r\n }\r\n } = {}\r\n\r\n for (const [baseId, baseContent] of Object.entries(baseBlocks)) {\r\n const messages = this._processMessageBlocks(baseContent)\r\n result[baseId] = {}\r\n\r\n for (const [lang, content] of Object.entries(messages)) {\r\n const processed = this._processVariables(this._processScriptBlocks(content))\r\n result[baseId][lang] = this._compileToFunction(processed, false)\r\n }\r\n }\r\n\r\n return result\r\n }\r\n\r\n public static compileKeyboards(template: string) {\r\n const baseBlocks = this._processBaseBlocks(template)\r\n const result: {\r\n [baseId: string]: {\r\n [lang: string]: {\r\n inline?: (data?: Record<string, any>) => string[]\r\n default?: (data?: Record<string, any>) => string[]\r\n }\r\n }\r\n } = {}\r\n\r\n for (const [baseId, baseContent] of Object.entries(baseBlocks)) {\r\n const keyboards = this._processKeyboardBlocks(baseContent)\r\n result[baseId] = {}\r\n\r\n for (const [lang, modes] of Object.entries(keyboards)) {\r\n result[baseId][lang] = {}\r\n\r\n for (const [mode, content] of Object.entries(modes)) {\r\n // Pisahkan label, handle escaped comma\r\n const labels = content.split(/(?<!\\\\),\\s*/).map((label: string) => label.replace(/\\\\,/g, `,`).trim())\r\n\r\n const processedLabels = labels.map((label) => this._processVariables(this._processScriptBlocks(label)))\r\n\r\n result[baseId][lang][mode as `inline` | `default`] = this._compileToFunction(processedLabels, true)\r\n }\r\n }\r\n }\r\n\r\n return result\r\n }\r\n}\r\n","import { TemplateEngine } from \".\"\r\nimport { readFile, mkdir } from \"node:fs/promises\"\r\nimport { watch, FSWatcher } from \"chokidar\"\r\nimport { basename, join, extname } from \"node:path\"\r\nimport { readdirSync, readFileSync, existsSync, statSync, writeFileSync } from \"node:fs\"\r\n\r\n/** Template file interface for better type safety */\r\ntype ICompiledTemplate = {\r\n message: ReturnType<typeof TemplateEngine.compileMessages>\r\n keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>\r\n}\r\n\r\n/** Template loading options */\r\ntype ITemplateOptions = {\r\n /** Enable file watching for hot reloading (if have templatePath) */\r\n enableWatch?: boolean\r\n /** Base path for template files (set null if dont want read template from file) */\r\n path?: string | undefined | null\r\n /** Force language params to this value */\r\n forceLanguage?: string | undefined | null\r\n}\r\n\r\n/** Template management system */\r\nexport class TemplateManager {\r\n public _map = new Map<string, ICompiledTemplate>()\r\n public _engine = TemplateEngine\r\n public _watcher: FSWatcher | null = null\r\n public _supportedExtensions = new Set([`.html`])\r\n public readonly _path: string | null\r\n public readonly _forceLanguage: string | null\r\n public readonly _isWatchEnabled: boolean\r\n public constructor(options: ITemplateOptions = {}) {\r\n const { enableWatch = false, path = null, forceLanguage = null } = options\r\n\r\n this._path = path\r\n this._forceLanguage = forceLanguage\r\n this._isWatchEnabled = enableWatch\r\n\r\n this._validatePath()\r\n this._initializeWatcher()\r\n this._loadAllFiles()\r\n }\r\n\r\n /** Validate and ensure template directory exists. @returns Void */\r\n public _validatePath(): void {\r\n try {\r\n if (this._path === null || !existsSync(this._path)) {\r\n return\r\n }\r\n\r\n const stats = statSync(this._path)\r\n if (!stats.isDirectory()) {\r\n throw new Error(`Template path is not a directory: ${this._path}`)\r\n }\r\n } catch (error) {\r\n throw new Error(`Failed to validate Template path: ${error}`)\r\n }\r\n }\r\n\r\n /** Initialize file system watcher for hot reloading. @returns Void */\r\n public _initializeWatcher(): void {\r\n if (this._path === null || !this._isWatchEnabled) {\r\n return\r\n }\r\n\r\n this._watcher = watch(this._path, {\r\n persistent: true,\r\n ignoreInitial: true,\r\n awaitWriteFinish: {\r\n stabilityThreshold: 100,\r\n pollInterval: 50\r\n }\r\n })\r\n\r\n this._watcher!.on(`change`, this._handleFileChange.bind(this))\r\n this._watcher!.on(`add`, this._handleFileAdd.bind(this))\r\n this._watcher!.on(`unlink`, this._handleFileDelete.bind(this))\r\n this._watcher!.on(`error`, this._handleWatchError.bind(this))\r\n }\r\n\r\n /** Handle file change events */\r\n public async _handleFileChange(filepath: string): Promise<void> {\r\n const filename = basename(filepath)\r\n if (this._isValidFile(filename)) {\r\n await this._loadFile(filename, false)\r\n }\r\n }\r\n\r\n /** Handle file add events */\r\n public async _handleFileAdd(filePath: string): Promise<void> {\r\n const fileName = basename(filePath)\r\n if (this._isValidFile(fileName)) {\r\n await this._loadFile(fileName, false)\r\n }\r\n }\r\n\r\n /** Handle file delete events */\r\n public _handleFileDelete(filePath: string): void {\r\n const fileName = basename(filePath)\r\n const fileKey = this._getKey(fileName)\r\n if (this._map.has(fileKey)) {\r\n this._map.delete(fileKey)\r\n }\r\n }\r\n\r\n /** Handle watcher errors */\r\n public _handleWatchError(error: any): void {\r\n // you can overrides\r\n }\r\n\r\n /** Load all Template files during initialization */\r\n public _loadAllFiles(): void {\r\n if (this._path === null || !existsSync(this._path)) {\r\n return\r\n }\r\n const files = readdirSync(this._path, { encoding: `utf8` })\r\n const validFiles = files.filter((file) => this._isValidFile(file))\r\n for (const fileName of validFiles) {\r\n this._loadFile(fileName, true)\r\n }\r\n }\r\n\r\n /** Load and compile a single template file */\r\n public async _loadFile(filename: string, useSync: boolean = true): Promise<void> {\r\n if (this._path === null) {\r\n return\r\n }\r\n const path = join(this._path, filename)\r\n const key = this._getKey(filename)\r\n const raw = useSync ? readFileSync(path, { encoding: `utf8` }) : await readFile(path, { encoding: `utf8` })\r\n this.compile(key, raw)\r\n }\r\n\r\n public _isValidFile(filename: string): boolean {\r\n const extension = extname(filename).toLowerCase()\r\n return this._supportedExtensions.has(extension)\r\n }\r\n\r\n public _getKey(filename: string): string {\r\n return filename.replace(/\\.[^/.]+$/, ``)\r\n }\r\n\r\n public compile(key: string, rawTemplate: string, keepIfExist?: Partial<{ [K in keyof ICompiledTemplate]: boolean }>) {\r\n const existing = this._map.get(key)\r\n const compiled = existing || ({} as ICompiledTemplate)\r\n let updated = false\r\n\r\n if (keepIfExist === undefined || keepIfExist?.message === false || existing?.message === undefined) {\r\n compiled.message = TemplateEngine.compileMessages(rawTemplate)\r\n updated = true\r\n }\r\n if (keepIfExist === undefined || keepIfExist?.keyboard === false || existing?.keyboard === undefined) {\r\n compiled.keyboard = TemplateEngine.compileKeyboards(rawTemplate)\r\n updated = true\r\n }\r\n\r\n if (updated) {\r\n this._map.set(key, compiled)\r\n }\r\n }\r\n\r\n /**\r\n * Get compiled message template\r\n * @param key Template identifier (filename without extension)\r\n * @param baseId Base id attr from block\r\n * @param language Target language code\r\n * @param data Template variables\r\n * @returns Rendered message string\r\n */\r\n public getMessage(key: string, baseId: string = `default`, language: string = `en`, data?: Record<string, any>): string {\r\n const template = this._map.get(key)\r\n const func = template?.message?.[baseId]?.[this._forceLanguage || language]\r\n if (!func) {\r\n return ``\r\n }\r\n\r\n try {\r\n return func(data)\r\n } catch (error) {\r\n return ``\r\n }\r\n }\r\n\r\n /**\r\n * Get compiled keyboard template\r\n * @param key Template identifier (filename without extension)\r\n * @param baseId Base id attr from block\r\n * @param language Target language code\r\n * @param data Template variables\r\n * @returns Array of rendered button labels\r\n */\r\n public getKeyboard(key: string, baseId: string = `default`, language: string = `en`, display: `inline` | `default` = `inline`, data?: Record<string, any>): string[] {\r\n const template = this._map.get(key)\r\n const func = template?.keyboard?.[baseId]?.[this._forceLanguage || language]?.[display]\r\n if (!func) {\r\n return []\r\n }\r\n\r\n try {\r\n return func(data)\r\n } catch (error) {\r\n return []\r\n }\r\n }\r\n\r\n /**\r\n * Update message template in memory\r\n * @param key Template identifier (filename without extension)\r\n * @param rawTemplate Raw template string\r\n */\r\n public setMessage(key: string, rawTemplate: string): void {\r\n this.compile(key, rawTemplate, { keyboard: true })\r\n }\r\n\r\n /**\r\n * Update keyboard template in memory\r\n * @param key Template identifier (filename without extension)\r\n * @param rawTemplate Raw template string\r\n */\r\n public setKeyboard(key: string, rawTemplate: string): void {\r\n this.compile(key, rawTemplate, { message: true })\r\n }\r\n\r\n /**\r\n * Write template to file and update cache\r\n * @param filename Target filename (with extension)\r\n * @param rawTemplate Template to write\r\n * @returns Promise that resolves when file is written\r\n */\r\n public async write(filename: string, rawTemplate: string): Promise<void> {\r\n if (this._path === null) {\r\n return\r\n }\r\n const filePath = join(this._path, filename)\r\n await mkdir(this._path, { recursive: true })\r\n writeFileSync(filePath, rawTemplate, { encoding: `utf8` })\r\n await this._loadFile(filename, false)\r\n }\r\n\r\n /**\r\n * Get list of available template\r\n * @returns Array of template names\r\n */\r\n public getAvailable(): string[] {\r\n return Array.from(this._map.keys())\r\n }\r\n\r\n /**\r\n * Check if template exists\r\n * @param key Template identifier\r\n * @returns True if template exists\r\n */\r\n public has(key: string): boolean {\r\n return this._map.has(key)\r\n }\r\n\r\n /**\r\n * Get cache statistics\r\n * @returns Object with cache information\r\n */\r\n public getCacheStats(): { templateCount: number; totalSize: number } {\r\n return {\r\n templateCount: this._map.size,\r\n totalSize: JSON.stringify(this._map.entries().toArray(), (_, value) => {\r\n return typeof value === `function` ? value.toString() : value\r\n }).length\r\n }\r\n }\r\n\r\n /**\r\n * Cleanup resources and close watchers\r\n * @returns Promise void\r\n */\r\n public async destroy(): Promise<void> {\r\n if (this._watcher) {\r\n await this._watcher.close()\r\n }\r\n this._map.clear()\r\n }\r\n}\r\n"],"mappings":"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","names":["index_exports","__export","BaseGeneral","BaseGuard","BasePage","CacheExternal","Ctx","Gramstax","TemplateEngine","TemplateManager","__toCommonJS","import_logging_pretty","BaseGeneral","__name","LoggingPretty","error","func","constructorName","funcName","import_promises","Ctx","BaseGeneral","ct","templateManager","cacheSession","cacheKeyboard","__name","v","ids","languageCode","keyboard","data","baseId","options","msgs","it","index","id","msg","type","method","params","moreRoot","value","result","grammy_exports","__reExport","BasePage","Ctx","__name","ctx","callback","args","params","tkey","key","ckb","ikb","arr","rkb","kb","method","name","paramsAdd","str","fbCallbackData","tag","prefix","BaseGuard","BasePage","__name","page","import_keyv","import_redis","CacheExternal","url","namespace","ttl","more","store","KeyvRedis","__name","import_bun","import_node_fs","import_node_path","import_logging_pretty","TemplateEngine","__name","str","template","_","key","baseRegex","result","match","idValue","cleaned","rawCode","innerCode","inner","messageRegex","lang","rawContent","keyboardRegex","forAttr","mode","isArray","singleOrCombined","t","processed","functionBody","baseBlocks","baseId","baseContent","messages","content","keyboards","modes","processedLabels","label","import_promises","import_chokidar","import_node_path","import_node_fs","TemplateManager","__name","TemplateEngine","options","enableWatch","path","forceLanguage","error","filepath","filename","filePath","fileName","fileKey","validFiles","file","useSync","key","raw","extension","rawTemplate","keepIfExist","existing","compiled","updated","baseId","language","data","func","display","_","value","import_grammy","Gramstax","__name","params","CacheExternal","TemplateManager","error","botInfo","method","data","username","ct","Ctx","baseUrl","handleUpdate","pathWebhook","req","pathname","timestamp","webhookUrl","Page","redacted","filePath","pages","name","proto","partPayload","partCommand","partCaption","partFree","pd","pds","upFirst","s","getPureFuncName","func","buildSessionMethod","index","ps","psi","pss","value","p","_name","path","files","initStatic","initStaticIntent","initStaticSession","initDynamicSpesific","listFuncStatic","listFuncStaticIntent","listFuncStaticSession","makeObject","keys","val","k","file","module","ctx","fromListener","res","cd","mt","mc","funcName","session","mtd","cdi","mti","mci","arrFree","initRoute","listenerName","isEdit"]}