gramstax 0.0.17 → 0.0.19

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
- "use strict";var z=Object.create;var v=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var H=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var p=(u,i)=>v(u,"name",{value:i,configurable:!0});var q=(u,i)=>{for(var s in i)v(u,s,{get:i[s],enumerable:!0})},K=(u,i,s,e)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of U(i))!J.call(u,t)&&t!==s&&v(u,t,{get:()=>i[t],enumerable:!(e=G(i,t))||e.enumerable});return u};var X=(u,i,s)=>(s=u!=null?z(H(u)):{},K(i||!u||!u.__esModule?v(s,"default",{value:u,enumerable:!0}):s,u)),Y=u=>K(v({},"__esModule",{value:!0}),u);var Z={};q(Z,{BaseGeneral:()=>F,CacheExternal:()=>x,Ctx:()=>k,Gramstax:()=>D,TemplateEngine:()=>f,TemplateManager:()=>T});module.exports=Y(Z);var $=require("logging-pretty");var F=class{static{p(this,"BaseGeneral")}static log=new $.LoggingPretty;static logError(i,s){this.log.error(`[${this.toString().match(/class\s+([^\s{]+)/)?.[1]}:${s}]: ${String(i)}`)}logError(i,s,e){this.constructor.log.error(`[${s||this.constructor.name}:${e}] ${String(i)}`)}};var B=require("keyv"),L=X(require("@keyv/redis"),1);var x=class extends B.Keyv{constructor(s="memory",e,t,o){let n;s.startsWith("redis")&&(n=new L.default(s)),s==="memory"&&(n=new Map),o?.forceStore&&(n=o.forceStore);super({store:n,namespace:e,ttl:t});this.url=s}static{p(this,"CacheExternal")}};var R=require("timers/promises");var P=require("grammy");var k=class extends F{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get isPremium(){return this.ct.from?.is_premium??!1}get isBot(){return this.ct.from?.is_bot??!1}get userid(){return this.ct.from?.id}get username(){return this.ct.from?.username}get fullname(){return`${this.ct.from?.first_name||""}${this.ct.from?.last_name||""}`}get firstname(){return this.ct.from?.first_name}get lastname(){return this.ct.from?.last_name}get msgText(){return this.ct.message?.text}get msgTextIntent(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ")[0]:""}get msgTextPayloads(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ").slice(1):[]}get msgTextPayload(){return this.msgTextPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionIntent(){return this.msgCaption&&this.msgCaption.indexOf(" ")!=-1?this.msgCaption.split(" ")[0]:""}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataIntent(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":")[0]:""}get callbackDataPayloads(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":").slice(1):[]}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}get callbackDataParts(){return this.callbackDataPayload&&this.callbackDataPayload.indexOf("+")!=-1?this.callbackDataPayload.split("+"):[]}get languageCode(){return this.ct.from?.language_code}set languageCode(i){this.ct.from.language_code=i}set session(i){this.temp.session=i}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(i){super(),this.ct=i.ct,this.cacheSession=i.cacheSession,this.cacheKeyboard=i.cacheKeyboard,this.templateManager=i.templateManager,this.temp=i.temp,i?.data&&(this.temp.data=i.data)}async broadcast(i,s,e,t,o,n){let r=s.map(d=>this.templateManager.getMessage(this.data.name,o,d,t));for(let d=0;d<i.length;d++){let l=i[d],c=r[d];await this.ct.api.sendMessage(l,c,{parse_mode:"HTML",reply_markup:e,...n}),d+1==30&&await(0,R.setTimeout)(1200)}}async reply(i,s,e,t){let o=this.templateManager.getMessage(this.data.name,e,this.languageCode,s);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:i,...t})}async replyAction(i){return await this.ct.replyWithChatAction(i)}async edit(i,s,e,t){try{let o=this.templateManager.getMessage(this.data.name,e,this.languageCode,s);return await this.ct.editMessageText(o,{parse_mode:"HTML",reply_markup:i,...t})}catch{await this.reply(i,s,e,t)}}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(i){try{return await this.ct.answerCallbackQuery(i)}catch{return null}}async sessionSet(i,s,...e){try{let t={method:i,params:s,...e},o=await this.cacheSession.set(`${this.userid}`,{method:i,params:s,...e});return o&&(this.session=t),o}catch{return null}}async sessionGet(){try{let i=await this.cacheSession.get(`${this.userid}`);return i&&(this.session=i),i||null}catch{return null}}async sessionClear(){try{let i=await this.cacheSession.delete(`${this.userid}`);return i&&(this.session={}),i}catch{return null}}static buildData(i){return{name:"",callbackData:i?function(...s){let e=i(...s);return`${this.name}${e===void 0?"":`:${e}`}`}:function(){return this?.name}}}buildInlineKeyboard(i,s){let e=this.data.name;if(s?.cache===!0){let a=`${e}:${this.languageCode}:inline`,r=this.cacheKeyboard.get(a);if(!r){let d=new P.InlineKeyboard,l=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"inline",s?.data),c=i(d,l);return this.cacheKeyboard.set(a,c),c}return r}let t=new P.InlineKeyboard,o=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"inline",s?.data);return i(t,o)}buildKeyboard(i,s){let e=this.data.name;if(s?.cache===!0){let a=`${e}:${this.languageCode}:default`,r=this.cacheKeyboard.get(a);if(!r){let d=new P.Keyboard,l=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"default",s?.data),c=i(d,l);return c.resized(!0),this.cacheKeyboard.set(a,c),c}return r}let t=new P.Keyboard,o=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"default",s?.data),n=i(t,o);return n.resized(),n}validateSessionCallback(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallback(s)}validateSessionCallbackPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallbackPayload(s)}validateSessionText(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodText(s)}validateSessionTextPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextPayload(s)}validateSessionTextCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommand(s)}validateSessionTextCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommandPayload(s)}validateSessionTextFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextFree(s)}validateSessionPhotoCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaption(s)}validateSessionPhotoCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionPayload(s)}validateSessionPhotoCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommand(s)}validateSessionPhotoCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommandPayload(s)}validateSessionPhotoFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoFree(s)}validateSessionVideoCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaption(s)}validateSessionVideoCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionPayload(s)}validateSessionVideoCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommand(s)}validateSessionVideoCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommandPayload(s)}validateSessionVideoFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoFree(s)}validateSessionAudioCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaption(s)}validateSessionAudioCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionPayload(s)}validateSessionAudioCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommand(s)}validateSessionAudioCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommandPayload(s)}validateSessionAudioFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioFree(s)}validateSessionDocumentCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaption(s)}validateSessionDocumentCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionPayload(s)}validateSessionDocumentCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommand(s)}validateSessionDocumentCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommandPayload(s)}validateSessionDocumentFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentFree(s)}validateSessionAnimationCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaption(s)}validateSessionAnimationCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionPayload(s)}validateSessionAnimationCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommand(s)}validateSessionAnimationCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommandPayload(s)}validateSessionAnimationFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationFree(s)}validateSessionVoiceCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaption(s)}validateSessionVoiceCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionPayload(s)}validateSessionVoiceCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommand(s)}validateSessionVoiceCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommandPayload(s)}validateSessionVoiceFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceFree(s)}validateSessionVideoNoteCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaption(s)}validateSessionVideoNoteCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionPayload(s)}validateSessionVideoNoteCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommand(s)}validateSessionVideoNoteCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommandPayload(s)}validateSessionVideoNoteFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteFree(s)}validateSessionStickerFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodStickerFree(s)}validateSessionLocationFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodLocationFree(s)}validateSessionContactFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodContactFree(s)}sessionCallback(i,s){return this.sessionSet(this.buildSessionMethodCallback(s),i)}sessionCallbackPayload(i,s){return this.sessionSet(this.buildSessionMethodCallbackPayload(s),i)}sessionText(i,s){return this.sessionSet(this.buildSessionMethodText(s),i)}sessionTextPayload(i,s){return this.sessionSet(this.buildSessionMethodTextPayload(s),i)}sessionTextCommand(i,s){return this.sessionSet(this.buildSessionMethodTextCommand(s),i)}sessionTextCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodTextCommandPayload(s),i)}sessionTextFree(i,s){return this.sessionSet(this.buildSessionMethodTextFree(s),i)}sessionPhotoCaption(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaption(s),i)}sessionPhotoCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(s),i)}sessionPhotoCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(s),i)}sessionPhotoCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(s),i)}sessionPhotoFree(i,s){return this.sessionSet(this.buildSessionMethodPhotoFree(s),i)}sessionVideoCaption(i,s){return this.sessionSet(this.buildSessionMethodVideoCaption(s),i)}sessionVideoCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(s),i)}sessionVideoCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(s),i)}sessionVideoCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(s),i)}sessionVideoFree(i,s){return this.sessionSet(this.buildSessionMethodVideoFree(s),i)}sessionAudioCaption(i,s){return this.sessionSet(this.buildSessionMethodAudioCaption(s),i)}sessionAudioCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(s),i)}sessionAudioCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(s),i)}sessionAudioCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(s),i)}sessionAudioFree(i,s){return this.sessionSet(this.buildSessionMethodAudioFree(s),i)}sessionDocumentCaption(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaption(s),i)}sessionDocumentCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(s),i)}sessionDocumentCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(s),i)}sessionDocumentCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(s),i)}sessionDocumentFree(i,s){return this.sessionSet(this.buildSessionMethodDocumentFree(s),i)}sessionAnimationCaption(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaption(s),i)}sessionAnimationCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(s),i)}sessionAnimationCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(s),i)}sessionAnimationCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(s),i)}sessionAnimationFree(i,s){return this.sessionSet(this.buildSessionMethodAnimationFree(s),i)}sessionVoiceCaption(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaption(s),i)}sessionVoiceCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(s),i)}sessionVoiceCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(s),i)}sessionVoiceCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(s),i)}sessionVoiceFree(i,s){return this.sessionSet(this.buildSessionMethodVoiceFree(s),i)}sessionVideoNoteCaption(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaption(s),i)}sessionVideoNoteCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(s),i)}sessionVideoNoteCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(s),i)}sessionVideoNoteCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(s),i)}sessionVideoNoteFree(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteFree(s),i)}sessionStickerFree(i,s){return this.sessionSet(this.buildSessionMethodStickerFree(s),i)}sessionLocationFree(i,s){return this.sessionSet(this.buildSessionMethodLocationFree(s),i)}sessionContactFree(i,s){return this.sessionSet(this.buildSessionMethodContactFree(s),i)}sessionToCallback(i,s){return this.sessionCallback({...this.session.params,...i},s)}sessionToCallbackPayload(i,s){return this.sessionCallbackPayload({...this.session.params,...i},s)}sessionToText(i,s){return this.sessionText({...this.session.params,...i},s)}sessionToTextPayload(i,s){return this.sessionTextPayload({...this.session.params,...i},s)}sessionToTextCommand(i,s){return this.sessionTextCommand({...this.session.params,...i},s)}sessionToTextCommandPayload(i,s){return this.sessionTextCommandPayload({...this.session.params,...i},s)}sessionToTextFree(i,s){return this.sessionTextFree({...this.session.params,...i},s)}sessionToPhotoCaption(i,s){return this.sessionPhotoCaption({...this.session.params,...i},s)}sessionToPhotoCaptionPayload(i,s){return this.sessionPhotoCaptionPayload({...this.session.params,...i},s)}sessionToPhotoCaptionCommand(i,s){return this.sessionPhotoCaptionCommand({...this.session.params,...i},s)}sessionToPhotoCaptionCommandPayload(i,s){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...i},s)}sessionToPhotoFree(i,s){return this.sessionPhotoFree({...this.session.params,...i},s)}sessionToVideoCaption(i,s){return this.sessionVideoCaption({...this.session.params,...i},s)}sessionToVideoCaptionPayload(i,s){return this.sessionVideoCaptionPayload({...this.session.params,...i},s)}sessionToVideoCaptionCommand(i,s){return this.sessionVideoCaptionCommand({...this.session.params,...i},s)}sessionToVideoCaptionCommandPayload(i,s){return this.sessionVideoCaptionCommandPayload({...this.session.params,...i},s)}sessionToVideoFree(i,s){return this.sessionVideoFree({...this.session.params,...i},s)}sessionToAudioCaption(i,s){return this.sessionAudioCaption({...this.session.params,...i},s)}sessionToAudioCaptionPayload(i,s){return this.sessionAudioCaptionPayload({...this.session.params,...i},s)}sessionToAudioCaptionCommand(i,s){return this.sessionAudioCaptionCommand({...this.session.params,...i},s)}sessionToAudioCaptionCommandPayload(i,s){return this.sessionAudioCaptionCommandPayload({...this.session.params,...i},s)}sessionToAudioFree(i,s){return this.sessionAudioFree({...this.session.params,...i},s)}sessionToDocumentCaption(i,s){return this.sessionDocumentCaption({...this.session.params,...i},s)}sessionToDocumentCaptionPayload(i,s){return this.sessionDocumentCaptionPayload({...this.session.params,...i},s)}sessionToDocumentCaptionCommand(i,s){return this.sessionDocumentCaptionCommand({...this.session.params,...i},s)}sessionToDocumentCaptionCommandPayload(i,s){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...i},s)}sessionToDocumentFree(i,s){return this.sessionDocumentFree({...this.session.params,...i},s)}sessionToAnimationCaption(i,s){return this.sessionAnimationCaption({...this.session.params,...i},s)}sessionToAnimationCaptionPayload(i,s){return this.sessionAnimationCaptionPayload({...this.session.params,...i},s)}sessionToAnimationCaptionCommand(i,s){return this.sessionAnimationCaptionCommand({...this.session.params,...i},s)}sessionToAnimationCaptionCommandPayload(i,s){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...i},s)}sessionToAnimationFree(i,s){return this.sessionAnimationFree({...this.session.params,...i},s)}sessionToVoiceCaption(i,s){return this.sessionVoiceCaption({...this.session.params,...i},s)}sessionToVoiceCaptionPayload(i,s){return this.sessionVoiceCaptionPayload({...this.session.params,...i},s)}sessionToVoiceCaptionCommand(i,s){return this.sessionVoiceCaptionCommand({...this.session.params,...i},s)}sessionToVoiceCaptionCommandPayload(i,s){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...i},s)}sessionToVoiceFree(i,s){return this.sessionVoiceFree({...this.session.params,...i},s)}sessionToVideoNoteCaption(i,s){return this.sessionVideoNoteCaption({...this.session.params,...i},s)}sessionToVideoNoteCaptionPayload(i,s){return this.sessionVideoNoteCaptionPayload({...this.session.params,...i},s)}sessionToVideoNoteCaptionCommand(i,s){return this.sessionVideoNoteCaptionCommand({...this.session.params,...i},s)}sessionToVideoNoteCaptionCommandPayload(i,s){return this.sessionVideoNoteCaptionCommandPayload({...this.session.params,...i},s)}sessionToVideoNoteFree(i,s){return this.sessionVideoNoteFree({...this.session.params,...i},s)}sessionToStickerFree(i,s){return this.sessionStickerFree({...this.session.params,...i},s)}sessionToLocationFree(i,s){return this.sessionLocationFree({...this.session.params,...i},s)}sessionToContactFree(i,s){return this.sessionContactFree({...this.session.params,...i},s)}buildIntent(i,s=!0){i||(i=s?this.data.callbackData():this.data.name);let e=s?":":" ";return i?.indexOf?.(e)!=-1?i?.split?.(e)?.[0]:i}buildSessionMethod(i,s){return`${i}-${s||this.data.name}`}buildSessionMethodCallback(i){return this.buildSessionMethod("1",i)}buildSessionMethodCallbackPayload(i){return this.buildSessionMethod("2",i)}buildSessionMethodText(i){return this.buildSessionMethod("3",i)}buildSessionMethodTextPayload(i){return this.buildSessionMethod("4",i)}buildSessionMethodTextCommand(i){return this.buildSessionMethod("5",i)}buildSessionMethodTextCommandPayload(i){return this.buildSessionMethod("6",i)}buildSessionMethodTextFree(i){return this.buildSessionMethod("7",i)}buildSessionMethodPhotoCaption(i){return this.buildSessionMethod("8",i)}buildSessionMethodPhotoCaptionPayload(i){return this.buildSessionMethod("9",i)}buildSessionMethodPhotoCaptionCommand(i){return this.buildSessionMethod("10",i)}buildSessionMethodPhotoCaptionCommandPayload(i){return this.buildSessionMethod("11",i)}buildSessionMethodPhotoFree(i){return this.buildSessionMethod("12",i)}buildSessionMethodVideoCaption(i){return this.buildSessionMethod("13",i)}buildSessionMethodVideoCaptionPayload(i){return this.buildSessionMethod("14",i)}buildSessionMethodVideoCaptionCommand(i){return this.buildSessionMethod("15",i)}buildSessionMethodVideoCaptionCommandPayload(i){return this.buildSessionMethod("16",i)}buildSessionMethodVideoFree(i){return this.buildSessionMethod("17",i)}buildSessionMethodAudioCaption(i){return this.buildSessionMethod("18",i)}buildSessionMethodAudioCaptionPayload(i){return this.buildSessionMethod("19",i)}buildSessionMethodAudioCaptionCommand(i){return this.buildSessionMethod("20",i)}buildSessionMethodAudioCaptionCommandPayload(i){return this.buildSessionMethod("21",i)}buildSessionMethodAudioFree(i){return this.buildSessionMethod("22",i)}buildSessionMethodDocumentCaption(i){return this.buildSessionMethod("23",i)}buildSessionMethodDocumentCaptionPayload(i){return this.buildSessionMethod("24",i)}buildSessionMethodDocumentCaptionCommand(i){return this.buildSessionMethod("25",i)}buildSessionMethodDocumentCaptionCommandPayload(i){return this.buildSessionMethod("26",i)}buildSessionMethodDocumentFree(i){return this.buildSessionMethod("27",i)}buildSessionMethodAnimationCaption(i){return this.buildSessionMethod("28",i)}buildSessionMethodAnimationCaptionPayload(i){return this.buildSessionMethod("29",i)}buildSessionMethodAnimationCaptionCommand(i){return this.buildSessionMethod("30",i)}buildSessionMethodAnimationCaptionCommandPayload(i){return this.buildSessionMethod("31",i)}buildSessionMethodAnimationFree(i){return this.buildSessionMethod("32",i)}buildSessionMethodVoiceCaption(i){return this.buildSessionMethod("33",i)}buildSessionMethodVoiceCaptionPayload(i){return this.buildSessionMethod("34",i)}buildSessionMethodVoiceCaptionCommand(i){return this.buildSessionMethod("35",i)}buildSessionMethodVoiceCaptionCommandPayload(i){return this.buildSessionMethod("36",i)}buildSessionMethodVoiceFree(i){return this.buildSessionMethod("37",i)}buildSessionMethodVideoNoteCaption(i){return this.buildSessionMethod("38",i)}buildSessionMethodVideoNoteCaptionPayload(i){return this.buildSessionMethod("39",i)}buildSessionMethodVideoNoteCaptionCommand(i){return this.buildSessionMethod("40",i)}buildSessionMethodVideoNoteCaptionCommandPayload(i){return this.buildSessionMethod("41",i)}buildSessionMethodVideoNoteFree(i){return this.buildSessionMethod("42",i)}buildSessionMethodStickerFree(i){return this.buildSessionMethod("43",i)}buildSessionMethodLocationFree(i){return this.buildSessionMethod("44",i)}buildSessionMethodContactFree(i){return this.buildSessionMethod("45",i)}};var O=require("bun"),M=require("path");var W=require("logging-pretty");var f=class{static{p(this,"TemplateEngine")}static _escape(i){return i.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(i){return i.replace(/\{\{(\w+)\}\}/g,(s,e)=>`\${(data && data["${e}"]) ?? ""}`)}static _processBaseBlocks(i){let s=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,e={};for(let t of i.matchAll(s)){let o=t[2]??"default",a=(t[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();e[o]=a}return e}static _processScriptBlocks(i){return i.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(s,e)=>{let t=e.trim();return t?`\${(() => { if (!data) return ''; try { with(data) { ${t} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(i){return i.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(i){return i.replace(/<div>([\s\S]*?)<\/div>/gi,(s,e)=>e.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processMessageBlocks(i){let s=/<message\s+lang="([^"]+)"\s*>([\s\S]*?)<\/message>/gi,e={};for(let[,t,o]of i.matchAll(s)){let n=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();e[t]=n}return e}static _processKeyboardBlocks(i){let s=/<keyboard\b[^>]*\blang="([^"]*)"[^>]*?(?:\sfor="([^"]*)")?[^>]*>([\s\S]*?)<\/keyboard>/gi,e={};for(let[,t,o,n]of i.matchAll(s)){let a=o==="default"?"default":"inline",r=n.trim();e[t]||(e[t]={}),e[t][a]=r}return e}static _compileToFunction(i,s){let e;s?e=i.map(n=>`\`${n}\``).join(","):e=`\`${i}\``;let t=e;if(t=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(t))),s){let o=`return [${t}]`;return new Function("data",o)}else{let o=`return ${t}`;return new Function("data",o)}}static compileMessages(i){let s=this._processBaseBlocks(i),e={};for(let[t,o]of Object.entries(s)){let n=this._processMessageBlocks(o);e[t]={};for(let[a,r]of Object.entries(n)){let d=this._processVariables(this._processScriptBlocks(r));e[t][a]=this._compileToFunction(d,!1)}}return e}static compileKeyboards(i){let s=this._processBaseBlocks(i),e={};for(let[t,o]of Object.entries(s)){let n=this._processKeyboardBlocks(o);e[t]={};for(let[a,r]of Object.entries(n)){e[t][a]={};for(let[d,l]of Object.entries(r)){let C=l.split(/(?<!\\),\s*/).map(m=>m.replace(/\\,/g,",").trim()).map(m=>this._processVariables(this._processScriptBlocks(m)));e[t][a][d]=this._compileToFunction(C,!0)}}}return e}};var V=require("fs/promises"),E=require("chokidar"),y=require("path"),g=require("fs");var T=class{static{p(this,"TemplateManager")}_map=new Map;_engine=f;_watcher=null;_supportedExtensions=new Set([".html"]);_path;_forceLanguage;_isWatchEnabled;constructor(i={}){let{enableWatch:s=!1,path:e=null,forceLanguage:t=null}=i;this._path=e,this._forceLanguage=t,this._isWatchEnabled=s,this._validatePath(),this._initializeWatcher(),this._loadAllFiles()}_validatePath(){try{if(this._path===null||!(0,g.existsSync)(this._path))return;if(!(0,g.statSync)(this._path).isDirectory())throw new Error(`Template path is not a directory: ${this._path}`)}catch(i){throw new Error(`Failed to validate Template path: ${i}`)}}_initializeWatcher(){this._path===null||!this._isWatchEnabled||(this._watcher=(0,E.watch)(this._path,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50}}),this._watcher.on("change",this._handleFileChange.bind(this)),this._watcher.on("add",this._handleFileAdd.bind(this)),this._watcher.on("unlink",this._handleFileDelete.bind(this)),this._watcher.on("error",this._handleWatchError.bind(this)))}async _handleFileChange(i){let s=(0,y.basename)(i);this._isValidFile(s)&&await this._loadFile(s,!1)}async _handleFileAdd(i){let s=(0,y.basename)(i);this._isValidFile(s)&&await this._loadFile(s,!1)}_handleFileDelete(i){let s=(0,y.basename)(i),e=this._getKey(s);this._map.has(e)&&this._map.delete(e)}_handleWatchError(i){}_loadAllFiles(){if(this._path===null||!(0,g.existsSync)(this._path))return;let s=(0,g.readdirSync)(this._path,{encoding:"utf8"}).filter(e=>this._isValidFile(e));for(let e of s)this._loadFile(e,!0)}async _loadFile(i,s=!0){if(this._path===null)return;let e=(0,y.join)(this._path,i),t=this._getKey(i),o=s?(0,g.readFileSync)(e,{encoding:"utf8"}):await(0,V.readFile)(e,{encoding:"utf8"});this.compile(t,o)}_isValidFile(i){let s=(0,y.extname)(i).toLowerCase();return this._supportedExtensions.has(s)}_getKey(i){return i.replace(/\.[^/.]+$/,"")}compile(i,s,e){let t=this._map.get(i),o=t||{},n=!1;(e===void 0||e?.message===!1||t?.message===void 0)&&(o.message=f.compileMessages(s),n=!0),(e===void 0||e?.keyboard===!1||t?.keyboard===void 0)&&(o.keyboard=f.compileKeyboards(s),n=!0),n&&this._map.set(i,o)}getMessage(i,s="default",e="en",t){let n=this._map.get(i)?.message?.[s]?.[this._forceLanguage||e];if(!n)return"";try{return n(t)}catch{return""}}getKeyboard(i,s="default",e="en",t="inline",o){let a=this._map.get(i)?.keyboard?.[s]?.[this._forceLanguage||e]?.[t];if(!a)return[];try{return a(o)}catch{return[]}}setMessage(i,s){this.compile(i,s,{keyboard:!0})}setKeyboard(i,s){this.compile(i,s,{message:!0})}async write(i,s){if(this._path===null)return;let e=(0,y.join)(this._path,i);await(0,V.mkdir)(this._path,{recursive:!0}),(0,g.writeFileSync)(e,s,{encoding:"utf8"}),await this._loadFile(i,!1)}getAvailable(){return Array.from(this._map.keys())}has(i){return this._map.has(i)}getCacheStats(){return{templateCount:this._map.size,totalSize:JSON.stringify(this._map.entries().toArray(),(i,s)=>typeof s=="function"?s.toString():s).length}}async destroy(){this._watcher&&await this._watcher.close(),this._map.clear()}};var _=require("fs"),w=require("grammy");var D=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;log;bot;constructor(i){this.log=i.log===null?void 0:i.log===void 0?new W.LoggingPretty:i.log,this.cacheSession=i.cacheSession||new x("memory","session"),this.cacheKeyboard=i.cacheKeyboard||new Map,this.templateManager=i.templateManager||new T({path:null}),this.bot=this.createBot(i.token),this.bot.catch(this.onCatch),this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this)),this.bot.on("message:text",this.onMessageText.bind(this)),this.bot.on("message:photo",this.onMessagePhoto.bind(this)),this.bot.on("message:video",this.onMessageVideo.bind(this)),this.bot.on("message:audio",this.onMessageAudio.bind(this)),this.bot.on("message:document",this.onMessageDocument.bind(this)),this.bot.on("message:animation",this.onMessageAnimation.bind(this)),this.bot.on("message:voice",this.onMessageVoice.bind(this)),this.bot.on("message:video_note",this.onMessageVideoNote.bind(this)),this.bot.on("message:sticker",this.onMessageSticker.bind(this)),this.bot.on("message:location",this.onMessageLocation.bind(this)),this.bot.on("message:contact",this.onMessageContact.bind(this)),this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),i.deploy.startsWith("polling")?this.runPolling():i.deploy.startsWith("webhook")&&this.runWebhook(i.deploy.split("webhook:")[1])}onCatch(i){this.log?.error?.(`[Bot.catch]: ${String(i)}`)}onStart(i,s,e){let{username:t}=i;s=="polling"?this.log?.success?.(`Telegram bot polling started: ${t}`):this.log?.success?.(`Telegram bot webhook started: ${t} (${e})`)}createBot(i){return new w.Bot(i)}createCtx(i){return new k({ct:i,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{session:{},data:{}}})}async runPolling(){this.bot.start({onStart:p(async i=>{this.onStart(i,"polling",null)},"onStart")})}async runWebhook(i){let s=(0,w.webhookCallback)(this.bot,"bun"),e="/telegram-webhook";(0,O.serve)({fetch(a){let{pathname:r}=new URL(a.url);if(r===e)return a.method==="POST"?s(a):new Response("OK",{status:200});if(r==="/"&&a.method==="GET"){let d=new Date().toISOString();return new Response(JSON.stringify({timestamp:d}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}});let t=await this.bot.api.getWebhookInfo(),o=i.endsWith("/")?i.slice(0,-1)+e:i+e;t.url!=o&&await this.bot.api.setWebhook(o);let n=await this.bot.api.getMe();this.onStart(n,"webhook",o)}pageCompile(i,s=!0){i?.template!==void 0?(this.templateManager.compile(i.data.name,i.template),s&&(i.template=void 0)):i.template=void 0}pageBuildData(i,s){i?.data===void 0&&(i.data=i.buildData()),i.data.name=(0,M.parse)(s).name}pageSorts(i,s){let e=i.data.name,t=i.prototype,o="Payload",n="Command",a="Caption",r="Free",d=s.dynamic,l=s.dynamicSpesific,c=p(h=>h.charAt(0).toUpperCase()+h.slice(1),"upFirst"),C=p(h=>h.replace(o,"").replace(n,"").replace(a,"").replace(r,""),"getPureFuncName"),m=p((h,b)=>t[`buildSessionMethod${c(h)}`](b),"buildSessionMethod");s.all[e]=i;for(let h=0;h<s.lenListFuncStaticSession;h++){let b=s.listFuncStaticSession[h],S=s.static[b],j=s.staticIntent[b],I=s.staticSession[b],A={name:e,func:b},N=S||j;if(N!==void 0){let Q=b.includes(n)?`/${e}`:e;N[t.buildIntent(Q,b.startsWith("callback"))]=A}I!==void 0&&(I[m(b,e)]=A),b.toLowerCase().endsWith("free")&&l[C(b)].push(A)}t.free&&d.push(e)}pageLoads(){this.log?.info?.("Load pages..");let i=(0,M.join)(process.cwd(),"src","pages");if(!(0,_.existsSync)(i))throw new Error(`Folder ${i} is not found, please make it manually`);let s=(0,_.readdirSync)(i),e={},t=e,o=e,n=[],a=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand","videoNoteCaption","videoNoteCaptionCommand"],r=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload","videoNoteCaptionPayload","videoNoteCaptionCommandPayload"],d=[...a,...r,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],l=p((C,m)=>Object.fromEntries(C.map(h=>[h,{...m}])),"makeObject"),c={all:{},dynamic:[],dynamicSpesific:{text:n,photo:n,video:n,audio:n,document:n,animation:n,voice:n,videoNote:n,sticker:n,location:n,contact:n},static:l(a,e),staticIntent:l(r,t),staticSession:l(d,o),listFuncStatic:a,listFuncStaticIntent:r,listFuncStaticSession:d,lenListFuncStatic:a.length,lenListFuncStaticIntent:r.length,lenListFuncStaticSession:d.length};for(let C of s){let m=(0,M.join)(i,C),h=require(m),S=Object.values(h)[0];if(S===void 0)throw`file ${(0,M.parse)(m).name} must have export (not default) class page`;this.pageBuildData(S,m),this.pageCompile(S),this.pageSorts(S,c)}return this.log?.info?.(`Finish load pages with total (${Object.keys(c.all).length})`),c}async pageRoutes(i,s){let e,t;if(e===void 0){let n=i.callbackData,a=i.msgText,r=i.msgCaption,d=this.pages.static;for(let l=0;l<this.pages.lenListFuncStatic;l++){let c=this.pages.listFuncStatic[l];if(t=d[c][n||a||r],t)break}t!==void 0&&(e=this.pages.all[t.name])}if(e===void 0){let n=await i.sessionGet();if(n){let a=n.method,r=this.pages.staticSession;for(let d=0;d<this.pages.lenListFuncStaticSession;d++){let l=this.pages.listFuncStaticSession[d];if(t=r[l][a],t)break}t!==void 0&&(e=this.pages.all[t.name])}}if(e===void 0){let n=i.callbackDataIntent,a=i.msgTextIntent,r=i.msgCaptionIntent,d=this.pages.staticIntent;for(let l=0;l<this.pages.lenListFuncStaticIntent;l++){let c=this.pages.listFuncStaticIntent[l];if(t=d[c][n||a||r],t)break}t!==void 0&&(e=this.pages.all[t.name])}if(e!==void 0&&t!==void 0)return await new e(i)[t.func]?.();let o=this.pages.dynamicSpesific[s]||[];for(let n=0;n<o.length;n++){let a=o[n];if(a===void 0)continue;let r=this.pages.all[a.func];if(r===void 0)continue;let l=await new r(i)[a.name]?.();if(l!==null)return l}for(let n=0;n<this.pages.dynamic.length;n++){let a=this.pages.dynamic[n];if(a===void 0)continue;let r=this.pages.all[a];if(r===void 0)continue;let l=await new r(i).free?.();if(l!==null)return l}return null}async hookBeforeRoute(i,s){return!0}async hookErrorPage(i,s,e,t){}async hookErrorInputNotFoundPage(i){}async onMessage(i,s){let e=this.createCtx(i);try{if(await this.hookBeforeRoute(e,s)===!1)return;await this.pageRoutes(e,s)===null&&await this.hookErrorInputNotFoundPage(e)}catch(t){await this.hookErrorPage(e,s,t,!1)}}async onCallbackQueryData(i){let s=this.createCtx(i);try{if(await s.callbackQueryAnswer(),await this.hookBeforeRoute(s,"onCallbackQueryData")===!1)return;await this.pageRoutes(s,"callback")}catch(e){await this.hookErrorPage(s,"onCallbackQueryData",e,!0)}}async onMessageText(i){await this.onMessage(i,"onMessageText")}async onMessagePhoto(i){await this.onMessage(i,"onMessagePhoto")}async onMessageVideo(i){await this.onMessage(i,"onMessageVideo")}async onMessageAudio(i){await this.onMessage(i,"onMessageAudio")}async onMessageDocument(i){await this.onMessage(i,"onMessageDocument")}async onMessageAnimation(i){await this.onMessage(i,"onMessageAnimation")}async onMessageVoice(i){await this.onMessage(i,"onMessageVoice")}async onMessageVideoNote(i){await this.onMessage(i,"onMessageVideoNote")}async onMessageSticker(i){await this.onMessage(i,"onMessageSticker")}async onMessageLocation(i){await this.onMessage(i,"onMessageLocation")}async onMessageContact(i){await this.onMessage(i,"onMessageContact")}};0&&(module.exports={BaseGeneral,CacheExternal,Ctx,Gramstax,TemplateEngine,TemplateManager});
1
+ "use strict";var G=Object.create;var v=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var h=(u,i)=>v(u,"name",{value:i,configurable:!0});var X=(u,i)=>{for(var e in i)v(u,e,{get:i[e],enumerable:!0})},D=(u,i,e,t)=>{if(i&&typeof i=="object"||typeof i=="function")for(let s of U(i))!q.call(u,s)&&s!==e&&v(u,s,{get:()=>i[s],enumerable:!(t=H(i,s))||t.enumerable});return u};var Y=(u,i,e)=>(e=u!=null?G(J(u)):{},D(i||!u||!u.__esModule?v(e,"default",{value:u,enumerable:!0}):e,u)),Z=u=>D(v({},"__esModule",{value:!0}),u);var ii={};X(ii,{BaseGeneral:()=>x,CacheExternal:()=>T,Ctx:()=>k,Gramstax:()=>A,TemplateEngine:()=>C,TemplateManager:()=>F});module.exports=Z(ii);var R=require("logging-pretty");var x=class{static{h(this,"BaseGeneral")}static log=new R.LoggingPretty;static logError(i,e){this.log.error(`[${this.toString().match(/class\s+([^\s{]+)/)?.[1]}:${e}]: ${String(i)}`)}logError(i,e,t){this.constructor.log.error(`[${e||this.constructor.name}:${t}] ${String(i)}`)}};var N=require("keyv"),W=Y(require("@keyv/redis"),1);var T=class extends N.Keyv{constructor(e="memory",t,s,o){let n;e.startsWith("redis")&&(n=new W.default(e)),e==="memory"&&(n=new Map),o?.forceStore&&(n=o.forceStore);super({store:n,namespace:t,ttl:s});this.url=e}static{h(this,"CacheExternal")}};var B=require("timers/promises");var S=require("grammy");var k=class extends x{static{h(this,"Ctx")}static template;static data;data=this.constructor.data;get isPremium(){return this.ct.from?.is_premium??!1}get isBot(){return this.ct.from?.is_bot??!1}get userid(){return this.ct.from?.id}get username(){return this.ct.from?.username}get fullname(){return`${this.ct.from?.first_name||""}${this.ct.from?.last_name||""}`}get firstname(){return this.ct.from?.first_name}get lastname(){return this.ct.from?.last_name}get msgText(){return this.ct.message?.text}get msgTextIntent(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ")[0]:""}get msgTextPayloads(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ").slice(1):[]}get msgTextPayload(){return this.msgTextPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionIntent(){return this.msgCaption&&this.msgCaption.indexOf(" ")!=-1?this.msgCaption.split(" ")[0]:""}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataIntent(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":")[0]:""}get callbackDataPayloads(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":").slice(1):[]}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}get callbackDataParts(){return this.callbackDataPayload&&this.callbackDataPayload.indexOf("+")!=-1?this.callbackDataPayload.split("+"):[]}get languageCode(){return this.ct.from?.language_code}set languageCode(i){this.ct.from.language_code=i}set session(i){this.temp.session=i}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(i){super(),this.ct=i.ct,this.cacheSession=i.cacheSession,this.cacheKeyboard=i.cacheKeyboard,this.templateManager=i.templateManager,this.temp=i.temp,i?.data&&(this.temp.data=i.data)}async broadcast(i,e,t,s,o,n){let r=e.map(d=>this.templateManager.getMessage(this.data.name,o,d,s));for(let d=0;d<i.length;d++){let c=i[d],l=r[d];await this.ct.api.sendMessage(c,l,{parse_mode:"HTML",reply_markup:t,...n}),d+1==30&&await(0,B.setTimeout)(1200)}}async reply(i,e,t,s){let o=this.templateManager.getMessage(this.data.name,t,this.languageCode,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:i,...s})}async replyMedia(i,e,t,s,o){let n=this.templateManager.getMedia(this.data.name,s,this.languageCode,t),a={parse_mode:"HTML",reply_markup:e,...o};if(i=="photo")return await this.ct.replyWithPhoto(n.src,{caption:n.caption,...a});if(i=="video")return await this.ct.replyWithVideo(n.src,{caption:n.caption,...a});if(i=="audio")return await this.ct.replyWithAudio(n.src,{caption:n.caption,...a});if(i=="document")return await this.ct.replyWithDocument(n.src,{caption:n.caption,...a});if(i=="animation")return await this.ct.replyWithAnimation(n.src,{caption:n.caption,...a});if(i=="voice")return await this.ct.replyWithVoice(n.src,a);if(i=="video_note")return await this.ct.replyWithVideoNote(n.src,a);if(i=="sticker")return await this.ct.replyWithSticker(n.src,a);if(i=="location")return await this.ct.replyWithLocation(n.latitude,n.longitude,a);if(i=="contact")return await this.ct.replyWithContact(n.phone,n.first_name,{vcard:n.vcard,...a})}async replyPhoto(i,e,t,s){return this.replyMedia("photo",i,e,t,s)}async replyVideo(i,e,t,s){return this.replyMedia("video",i,e,t,s)}async replyAudio(i,e,t,s){return this.replyMedia("audio",i,e,t,s)}async replyDocument(i,e,t,s){return this.replyMedia("document",i,e,t,s)}async replyAnimation(i,e,t,s){return this.replyMedia("animation",i,e,t,s)}async replyVoice(i,e,t,s){return this.replyMedia("voice",i,e,t,s)}async replyVideoNote(i,e,t,s){return this.replyMedia("video_note",i,e,t,s)}async replySticker(i,e,t,s){return this.replyMedia("sticker",i,e,t,s)}async replyLocation(i,e,t,s){return this.replyMedia("location",i,e,t,s)}async replyContact(i,e,t,s){return this.replyMedia("contact",i,e,t,s)}async replyAction(i){return await this.ct.replyWithChatAction(i)}async edit(i,e,t,s){try{let o=this.templateManager.getMessage(this.data.name,t,this.languageCode,e);return await this.ct.editMessageText(o,{parse_mode:"HTML",reply_markup:i,...s})}catch{await this.reply(i,e,t,s)}}async editMedia(i,e,t,s,o,n){try{let{src:a,caption:r}=this.templateManager.getMedia(this.data.name,s,this.languageCode,t);return i=="voice"?(await this.delete(),await this.replyVoice(e,t,s,o)):i=="video_note"?(await this.delete(),await this.replyVoice(e,t,s,o)):i=="sticker"?(await this.delete(),await this.replySticker(e,t,s,o)):i=="location"?(await this.delete(),await this.replyLocation(e,t,s,o)):i=="contact"?(await this.delete(),await this.replyContact(e,t,s,o)):await this.ct.editMessageMedia({media:a,caption:r,type:i,parse_mode:"HTML",...o},{reply_markup:e,...n})}catch{await this.reply(e,t,s,n)}}async editPhoto(i,e,t,s,o){return await this.editMedia("photo",i,e,t,s,o)}async editVideo(i,e,t,s,o){return await this.editMedia("video",i,e,t,s,o)}async editAudio(i,e,t,s,o){return await this.editMedia("audio",i,e,t,s,o)}async editDocument(i,e,t,s,o){return await this.editMedia("document",i,e,t,s,o)}async editAnimation(i,e,t,s,o){return await this.editMedia("animation",i,e,t,s,o)}async editVoice(i,e,t,s){return await this.editMedia("voice",i,e,t,s)}async editVideoNote(i,e,t,s){return await this.editMedia("video_note",i,e,t,s)}async editSticker(i,e,t,s){return await this.editMedia("sticker",i,e,t,s)}async editLocation(i,e,t,s){return await this.editMedia("location",i,e,t,s)}async editContact(i,e,t,s){return await this.editMedia("contact",i,e,t,s)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(i){try{return await this.ct.answerCallbackQuery(i)}catch{return null}}async sessionSet(i,e,t){try{let s={method:i,params:e,...t},o=await this.cacheSession.set(`${this.userid}`,s);return o&&(this.session=s),o}catch{return null}}async sessionGet(){try{let i=await this.cacheSession.get(`${this.userid}`);return i&&(this.session=i),i||null}catch{return null}}async sessionClear(){try{let i=await this.cacheSession.delete(`${this.userid}`);return i&&(this.session={}),i}catch{return null}}static buildData(i){return{name:"",callbackData:i?function(...e){let t=i(...e);return`${this.name}${t===void 0?"":`:${t}`}`}:function(){return this?.name}}}buildInlineKeyboard(i,e){let t=this.data.name;if(e?.cache===!0){let a=`${t}:${this.languageCode}:inline`,r=this.cacheKeyboard.get(a);if(!r){let d=new S.InlineKeyboard,c=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"inline",e?.data),l=i(d,c);return this.cacheKeyboard.set(a,l),l}return r}let s=new S.InlineKeyboard,o=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"inline",e?.data);return i(s,o)}buildKeyboard(i,e){let t=this.data.name;if(e?.cache===!0){let a=`${t}:${this.languageCode}:default`,r=this.cacheKeyboard.get(a);if(!r){let d=new S.Keyboard,c=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"default",e?.data),l=i(d,c);return l.resized(!0),this.cacheKeyboard.set(a,l),l}return r}let s=new S.Keyboard,o=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"default",e?.data),n=i(s,o);return n.resized(),n}validateSessionCallback(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallback(e)}validateSessionCallbackPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallbackPayload(e)}validateSessionText(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodText(e)}validateSessionTextPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextPayload(e)}validateSessionTextCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommand(e)}validateSessionTextCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommandPayload(e)}validateSessionTextFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextFree(e)}validateSessionPhotoCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaption(e)}validateSessionPhotoCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoFree(e)}validateSessionVideoCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaption(e)}validateSessionVideoCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommandPayload(e)}validateSessionVideoFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoFree(e)}validateSessionAudioCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaption(e)}validateSessionAudioCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommandPayload(e)}validateSessionAudioFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioFree(e)}validateSessionDocumentCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaption(e)}validateSessionDocumentCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentFree(e)}validateSessionAnimationCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaption(e)}validateSessionAnimationCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationFree(e)}validateSessionVoiceCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaption(e)}validateSessionVoiceCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceFree(e)}validateSessionVideoNoteCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaption(e)}validateSessionVideoNoteCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionPayload(e)}validateSessionVideoNoteCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommand(e)}validateSessionVideoNoteCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommandPayload(e)}validateSessionVideoNoteFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteFree(e)}validateSessionStickerFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodStickerFree(e)}validateSessionLocationFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodLocationFree(e)}validateSessionContactFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodContactFree(e)}sessionCallback(i,e){return this.sessionSet(this.buildSessionMethodCallback(e),i)}sessionCallbackPayload(i,e){return this.sessionSet(this.buildSessionMethodCallbackPayload(e),i)}sessionText(i,e){return this.sessionSet(this.buildSessionMethodText(e),i)}sessionTextPayload(i,e){return this.sessionSet(this.buildSessionMethodTextPayload(e),i)}sessionTextCommand(i,e){return this.sessionSet(this.buildSessionMethodTextCommand(e),i)}sessionTextCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodTextCommandPayload(e),i)}sessionTextFree(i,e){return this.sessionSet(this.buildSessionMethodTextFree(e),i)}sessionPhotoCaption(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaption(e),i)}sessionPhotoCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(e),i)}sessionPhotoCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(e),i)}sessionPhotoCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(e),i)}sessionPhotoFree(i,e){return this.sessionSet(this.buildSessionMethodPhotoFree(e),i)}sessionVideoCaption(i,e){return this.sessionSet(this.buildSessionMethodVideoCaption(e),i)}sessionVideoCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(e),i)}sessionVideoCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(e),i)}sessionVideoCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(e),i)}sessionVideoFree(i,e){return this.sessionSet(this.buildSessionMethodVideoFree(e),i)}sessionAudioCaption(i,e){return this.sessionSet(this.buildSessionMethodAudioCaption(e),i)}sessionAudioCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(e),i)}sessionAudioCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(e),i)}sessionAudioCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(e),i)}sessionAudioFree(i,e){return this.sessionSet(this.buildSessionMethodAudioFree(e),i)}sessionDocumentCaption(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaption(e),i)}sessionDocumentCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(e),i)}sessionDocumentCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(e),i)}sessionDocumentCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(e),i)}sessionDocumentFree(i,e){return this.sessionSet(this.buildSessionMethodDocumentFree(e),i)}sessionAnimationCaption(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaption(e),i)}sessionAnimationCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(e),i)}sessionAnimationCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(e),i)}sessionAnimationCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(e),i)}sessionAnimationFree(i,e){return this.sessionSet(this.buildSessionMethodAnimationFree(e),i)}sessionVoiceCaption(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaption(e),i)}sessionVoiceCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(e),i)}sessionVoiceCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(e),i)}sessionVoiceCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(e),i)}sessionVoiceFree(i,e){return this.sessionSet(this.buildSessionMethodVoiceFree(e),i)}sessionVideoNoteCaption(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaption(e),i)}sessionVideoNoteCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(e),i)}sessionVideoNoteCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(e),i)}sessionVideoNoteCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(e),i)}sessionVideoNoteFree(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteFree(e),i)}sessionStickerFree(i,e){return this.sessionSet(this.buildSessionMethodStickerFree(e),i)}sessionLocationFree(i,e){return this.sessionSet(this.buildSessionMethodLocationFree(e),i)}sessionContactFree(i,e){return this.sessionSet(this.buildSessionMethodContactFree(e),i)}sessionToCallback(i,e){return this.sessionCallback({...this.session.params,...i},e)}sessionToCallbackPayload(i,e){return this.sessionCallbackPayload({...this.session.params,...i},e)}sessionToText(i,e){return this.sessionText({...this.session.params,...i},e)}sessionToTextPayload(i,e){return this.sessionTextPayload({...this.session.params,...i},e)}sessionToTextCommand(i,e){return this.sessionTextCommand({...this.session.params,...i},e)}sessionToTextCommandPayload(i,e){return this.sessionTextCommandPayload({...this.session.params,...i},e)}sessionToTextFree(i,e){return this.sessionTextFree({...this.session.params,...i},e)}sessionToPhotoCaption(i,e){return this.sessionPhotoCaption({...this.session.params,...i},e)}sessionToPhotoCaptionPayload(i,e){return this.sessionPhotoCaptionPayload({...this.session.params,...i},e)}sessionToPhotoCaptionCommand(i,e){return this.sessionPhotoCaptionCommand({...this.session.params,...i},e)}sessionToPhotoCaptionCommandPayload(i,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...i},e)}sessionToPhotoFree(i,e){return this.sessionPhotoFree({...this.session.params,...i},e)}sessionToVideoCaption(i,e){return this.sessionVideoCaption({...this.session.params,...i},e)}sessionToVideoCaptionPayload(i,e){return this.sessionVideoCaptionPayload({...this.session.params,...i},e)}sessionToVideoCaptionCommand(i,e){return this.sessionVideoCaptionCommand({...this.session.params,...i},e)}sessionToVideoCaptionCommandPayload(i,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...i},e)}sessionToVideoFree(i,e){return this.sessionVideoFree({...this.session.params,...i},e)}sessionToAudioCaption(i,e){return this.sessionAudioCaption({...this.session.params,...i},e)}sessionToAudioCaptionPayload(i,e){return this.sessionAudioCaptionPayload({...this.session.params,...i},e)}sessionToAudioCaptionCommand(i,e){return this.sessionAudioCaptionCommand({...this.session.params,...i},e)}sessionToAudioCaptionCommandPayload(i,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...i},e)}sessionToAudioFree(i,e){return this.sessionAudioFree({...this.session.params,...i},e)}sessionToDocumentCaption(i,e){return this.sessionDocumentCaption({...this.session.params,...i},e)}sessionToDocumentCaptionPayload(i,e){return this.sessionDocumentCaptionPayload({...this.session.params,...i},e)}sessionToDocumentCaptionCommand(i,e){return this.sessionDocumentCaptionCommand({...this.session.params,...i},e)}sessionToDocumentCaptionCommandPayload(i,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...i},e)}sessionToDocumentFree(i,e){return this.sessionDocumentFree({...this.session.params,...i},e)}sessionToAnimationCaption(i,e){return this.sessionAnimationCaption({...this.session.params,...i},e)}sessionToAnimationCaptionPayload(i,e){return this.sessionAnimationCaptionPayload({...this.session.params,...i},e)}sessionToAnimationCaptionCommand(i,e){return this.sessionAnimationCaptionCommand({...this.session.params,...i},e)}sessionToAnimationCaptionCommandPayload(i,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...i},e)}sessionToAnimationFree(i,e){return this.sessionAnimationFree({...this.session.params,...i},e)}sessionToVoiceCaption(i,e){return this.sessionVoiceCaption({...this.session.params,...i},e)}sessionToVoiceCaptionPayload(i,e){return this.sessionVoiceCaptionPayload({...this.session.params,...i},e)}sessionToVoiceCaptionCommand(i,e){return this.sessionVoiceCaptionCommand({...this.session.params,...i},e)}sessionToVoiceCaptionCommandPayload(i,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...i},e)}sessionToVoiceFree(i,e){return this.sessionVoiceFree({...this.session.params,...i},e)}sessionToVideoNoteCaption(i,e){return this.sessionVideoNoteCaption({...this.session.params,...i},e)}sessionToVideoNoteCaptionPayload(i,e){return this.sessionVideoNoteCaptionPayload({...this.session.params,...i},e)}sessionToVideoNoteCaptionCommand(i,e){return this.sessionVideoNoteCaptionCommand({...this.session.params,...i},e)}sessionToVideoNoteCaptionCommandPayload(i,e){return this.sessionVideoNoteCaptionCommandPayload({...this.session.params,...i},e)}sessionToVideoNoteFree(i,e){return this.sessionVideoNoteFree({...this.session.params,...i},e)}sessionToStickerFree(i,e){return this.sessionStickerFree({...this.session.params,...i},e)}sessionToLocationFree(i,e){return this.sessionLocationFree({...this.session.params,...i},e)}sessionToContactFree(i,e){return this.sessionContactFree({...this.session.params,...i},e)}buildIntent(i,e=!0){i||(i=e?this.data.callbackData():this.data.name);let t=e?":":" ";return i?.indexOf?.(t)!=-1?i?.split?.(t)?.[0]:i}buildSessionMethod(i,e){return`${i}-${e||this.data.name}`}buildSessionMethodCallback(i){return this.buildSessionMethod("1",i)}buildSessionMethodCallbackPayload(i){return this.buildSessionMethod("2",i)}buildSessionMethodText(i){return this.buildSessionMethod("3",i)}buildSessionMethodTextPayload(i){return this.buildSessionMethod("4",i)}buildSessionMethodTextCommand(i){return this.buildSessionMethod("5",i)}buildSessionMethodTextCommandPayload(i){return this.buildSessionMethod("6",i)}buildSessionMethodTextFree(i){return this.buildSessionMethod("7",i)}buildSessionMethodPhotoCaption(i){return this.buildSessionMethod("8",i)}buildSessionMethodPhotoCaptionPayload(i){return this.buildSessionMethod("9",i)}buildSessionMethodPhotoCaptionCommand(i){return this.buildSessionMethod("10",i)}buildSessionMethodPhotoCaptionCommandPayload(i){return this.buildSessionMethod("11",i)}buildSessionMethodPhotoFree(i){return this.buildSessionMethod("12",i)}buildSessionMethodVideoCaption(i){return this.buildSessionMethod("13",i)}buildSessionMethodVideoCaptionPayload(i){return this.buildSessionMethod("14",i)}buildSessionMethodVideoCaptionCommand(i){return this.buildSessionMethod("15",i)}buildSessionMethodVideoCaptionCommandPayload(i){return this.buildSessionMethod("16",i)}buildSessionMethodVideoFree(i){return this.buildSessionMethod("17",i)}buildSessionMethodAudioCaption(i){return this.buildSessionMethod("18",i)}buildSessionMethodAudioCaptionPayload(i){return this.buildSessionMethod("19",i)}buildSessionMethodAudioCaptionCommand(i){return this.buildSessionMethod("20",i)}buildSessionMethodAudioCaptionCommandPayload(i){return this.buildSessionMethod("21",i)}buildSessionMethodAudioFree(i){return this.buildSessionMethod("22",i)}buildSessionMethodDocumentCaption(i){return this.buildSessionMethod("23",i)}buildSessionMethodDocumentCaptionPayload(i){return this.buildSessionMethod("24",i)}buildSessionMethodDocumentCaptionCommand(i){return this.buildSessionMethod("25",i)}buildSessionMethodDocumentCaptionCommandPayload(i){return this.buildSessionMethod("26",i)}buildSessionMethodDocumentFree(i){return this.buildSessionMethod("27",i)}buildSessionMethodAnimationCaption(i){return this.buildSessionMethod("28",i)}buildSessionMethodAnimationCaptionPayload(i){return this.buildSessionMethod("29",i)}buildSessionMethodAnimationCaptionCommand(i){return this.buildSessionMethod("30",i)}buildSessionMethodAnimationCaptionCommandPayload(i){return this.buildSessionMethod("31",i)}buildSessionMethodAnimationFree(i){return this.buildSessionMethod("32",i)}buildSessionMethodVoiceCaption(i){return this.buildSessionMethod("33",i)}buildSessionMethodVoiceCaptionPayload(i){return this.buildSessionMethod("34",i)}buildSessionMethodVoiceCaptionCommand(i){return this.buildSessionMethod("35",i)}buildSessionMethodVoiceCaptionCommandPayload(i){return this.buildSessionMethod("36",i)}buildSessionMethodVoiceFree(i){return this.buildSessionMethod("37",i)}buildSessionMethodVideoNoteCaption(i){return this.buildSessionMethod("38",i)}buildSessionMethodVideoNoteCaptionPayload(i){return this.buildSessionMethod("39",i)}buildSessionMethodVideoNoteCaptionCommand(i){return this.buildSessionMethod("40",i)}buildSessionMethodVideoNoteCaptionCommandPayload(i){return this.buildSessionMethod("41",i)}buildSessionMethodVideoNoteFree(i){return this.buildSessionMethod("42",i)}buildSessionMethodStickerFree(i){return this.buildSessionMethod("43",i)}buildSessionMethodLocationFree(i){return this.buildSessionMethod("44",i)}buildSessionMethodContactFree(i){return this.buildSessionMethod("45",i)}};var E=require("bun"),M=require("path");var O=require("logging-pretty");var C=class{static{h(this,"TemplateEngine")}static _escape(i){return i.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(i){return i.replace(/\{\{(\w+)\}\}/g,(e,t)=>`\${(data && data["${t}"]) ?? ""}`)}static _processBaseBlocks(i){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,t={};for(let s of i.matchAll(e)){let o=s[2]??"default",a=(s[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();t[o]=a}return t}static _processScriptBlocks(i){return i.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,t)=>{let s=t.trim();return s?`\${(() => { if (!data) return ''; try { with(data) { ${s} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(i){return i.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(i){return i.replace(/<div>([\s\S]*?)<\/div>/gi,(e,t)=>t.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processMediaBlocks(i){let e=/<media\s+([^>]+)>([\s\S]*?)<\/media>/gi,t={};for(let s of i.matchAll(e)){let o=s[1],n=s[2],a={},r=/(\w+)="([^"]*)"/g;for(let g of o.matchAll(r))a[g[1]]=g[2];if(!a.lang)continue;let d=a.lang,c=a.type,l=n.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),p={type:c};a.src&&(p.src=a.src),l&&c!=="video_note"&&c!=="sticker"&&(p.caption=l),c==="location"&&(a.latitude&&(p.latitude=a.latitude),a.longitude&&(p.longitude=a.longitude),l&&(p.caption=l)),c==="contact"&&(a.phone&&(p.phone=a.phone),a.first_name&&(p.first_name=a.first_name),a.last_name&&(p.last_name=a.last_name),a.vcard&&(p.vcard=a.vcard),l&&(p.caption=l)),t[d]=p}return t}static _processMessageBlocks(i){let e=/<message\s+lang="([^"]+)"\s*>([\s\S]*?)<\/message>/gi,t={};for(let[,s,o]of i.matchAll(e)){let n=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();t[s]=n}return t}static _processKeyboardBlocks(i){let e=/<keyboard\b[^>]*\blang="([^"]*)"[^>]*?(?:\stype="([^"]*)")?[^>]*>([\s\S]*?)<\/keyboard>/gi,t={};for(let[,s,o,n]of i.matchAll(e)){let a=o==="default"?"default":"inline",r=n.trim();t[s]||(t[s]={}),t[s][a]=r}return t}static _compileToFunction(i,e){let t;e?t=i.map(n=>`\`${n}\``).join(","):t=`\`${i}\``;let s=t;if(s=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(s))),e){let o=`return [${s}]`;return new Function("data",o)}else{let o=`return ${s}`;return new Function("data",o)}}static compileMedia(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processMediaBlocks(o);t[s]={};for(let[a,r]of Object.entries(n))if(r.caption){let d=this._processVariables(this._processScriptBlocks(r.caption)),c=this._compileToFunction(d,!1);t[s][a]=l=>({...r,caption:c(l)})}else t[s][a]=()=>r}return t}static compileMessages(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processMessageBlocks(o);t[s]={};for(let[a,r]of Object.entries(n)){let d=this._processVariables(this._processScriptBlocks(r));t[s][a]=this._compileToFunction(d,!1)}}return t}static compileKeyboards(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processKeyboardBlocks(o);t[s]={};for(let[a,r]of Object.entries(n)){t[s][a]={};for(let[d,c]of Object.entries(r)){let p=c.split(/(?<!\\),\s*/).map(g=>g.replace(/\\,/g,",").trim()).map(g=>this._processVariables(this._processScriptBlocks(g)));t[s][a][d]=this._compileToFunction(p,!0)}}}return t}};var P=class{static{h(this,"HelperPage")}static _getPage(i,e,t=!0){let o=Object.values(i)[0];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return t===!0&&(o.template=void 0),o}static getPageSync(i,e=!0){let t=require(i);return this._getPage(t,i,e)}static async getPage(i,e=!0){let t=await import(`${i}?t=${Date.now()}`);return this._getPage(t,i,e)}};var L=require("fs/promises"),$=require("chokidar"),f=require("path"),y=require("fs");var F=class{static{h(this,"TemplateManager")}_map=new Map;_engine=C;_watcher=[];_supportedExtensions=new Set([".html",".ts"]);_path;_forceLanguage;_isWatchEnabled;constructor(i){let{path:e,enableWatch:t=!1,forceLanguage:s}=i;this._path=e,this._forceLanguage=s,this._isWatchEnabled=t,this._validatePath(),this._initializeWatcher(),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let i=0;i<this._path.length;i++){let e=this._path[i];if(!(0,y.existsSync)(e))throw new Error(`Template base path is not exists: ${e}`);if(!(0,y.statSync)(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(i){throw new Error(`Failed to validate Template base path: ${i}`)}}_initializeWatcher(){if(this._isWatchEnabled)throw new Error("Watcher already enabled");for(let i=0;i<this._path.length;i++){let e=this._path[i],t=(0,$.watch)(e,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50}});this._watcher[i]=t,t.on("change",this._handleFileChange.bind(this)),t.on("add",this._handleFileAdd.bind(this)),t.on("unlink",this._handleFileDelete.bind(this)),t.on("error",this._handleWatchError.bind(this))}}async _handleFileChange(i){let e=(0,f.basename)(i);this._isValidFile(e)&&await this._loadFile(e,!1)}async _handleFileAdd(i){let e=(0,f.basename)(i);this._isValidFile(e)&&await this._loadFile(e,!1)}_handleFileDelete(i){let e=(0,f.basename)(i),t=this._getKey(e);this._map.has(t)&&this._map.delete(t)}_handleWatchError(i){}_loadAllFiles(){for(let i=0;i<this._path.length;i++){let e=this._path[i],s=(0,y.readdirSync)(e,"utf8").filter(o=>this._isValidFile(o));for(let o of s)this._loadFile(o,!0)}}async _loadFile(i,e=!0){for(let t=0;t<this._path.length;t++){let s=this._path[t],o=(0,f.join)(s,i),n=this._getExtension(i),a=this._getKey(i);if(n==".html"){let r=e?(0,y.readFileSync)(o,"utf8"):await(0,L.readFile)(o,"utf8");this._compile(a,r)}else if(n==".ts"){let r=await P.getPage(o,!1);r?.template!==void 0&&this._compile(a,r.template),r.template=void 0}else throw new Error(`File ${i} is not support`)}}_getExtension(i){return(0,f.extname)(i).toLowerCase()}_isValidFile(i){return this._supportedExtensions.has(this._getExtension(i))}_getKey(i){return i.replace(/\.[^/.]+$/,"")}_compile(i,e,t){let s=this._map.get(i),o=s||{},n=!1;(t===void 0||t?.media===!1||s?.media===void 0)&&(o.media=C.compileMedia(e),n=!0),(t===void 0||t?.message===!1||s?.message===void 0)&&(o.message=C.compileMessages(e),n=!0),(t===void 0||t?.keyboard===!1||s?.keyboard===void 0)&&(o.keyboard=C.compileKeyboards(e),n=!0),n&&this._map.set(i,o)}getMedia(i,e="default",t="en",s){let n=this._map.get(i)?.media?.[e]?.[this._forceLanguage||t];if(!n)return{};try{return n(s)}catch{return{}}}getMessage(i,e="default",t="en",s){let n=this._map.get(i)?.message?.[e]?.[this._forceLanguage||t];if(!n)return"";try{return n(s)}catch{return""}}getKeyboard(i,e="default",t="en",s="inline",o){let a=this._map.get(i)?.keyboard?.[e]?.[this._forceLanguage||t]?.[s];if(!a)return[];try{return a(o)}catch{return[]}}async write(i,e){if(this._getExtension(i)!=".html")return null;for(let t=0;t<this._path.length;t++){let s=(0,f.join)(this._path[t],i);if((0,y.existsSync)(s))return(0,y.writeFileSync)(s,e,"utf8"),await this._loadFile(i,!1),!0}return null}getAvailable(){return Array.from(this._map.keys())}has(i){return this._map.has(i)}getCacheStats(){return{templateCount:this._map.size,totalSize:JSON.stringify(this._map.entries().toArray(),(i,e)=>typeof e=="function"?e.toString():e).length}}async destroy(){if(this._watcher)for(let i of this._watcher)await i.close();this._map.clear()}};var w=require("fs"),V=require("grammy");var A=class{static{h(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;log;bot;constructor(i){if(!i?.token||i?.token?.length==0)throw new Error("Token is not valid or empty");this.log=i.log===null?void 0:i.log===void 0?new O.LoggingPretty:i.log,this.cacheSession=i.cacheSession||new T("memory","session"),this.cacheKeyboard=i.cacheKeyboard||new Map,this.templateManager=i.templateManager||new F({path:[(0,M.join)(process.cwd(),"src","pages")]}),this.bot=this.createBot(i.token),this.bot.catch(this.onCatch),this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this)),this.bot.on("message:text",this.onMessageText.bind(this)),this.bot.on("message:photo",this.onMessagePhoto.bind(this)),this.bot.on("message:video",this.onMessageVideo.bind(this)),this.bot.on("message:audio",this.onMessageAudio.bind(this)),this.bot.on("message:document",this.onMessageDocument.bind(this)),this.bot.on("message:animation",this.onMessageAnimation.bind(this)),this.bot.on("message:voice",this.onMessageVoice.bind(this)),this.bot.on("message:video_note",this.onMessageVideoNote.bind(this)),this.bot.on("message:sticker",this.onMessageSticker.bind(this)),this.bot.on("message:location",this.onMessageLocation.bind(this)),this.bot.on("message:contact",this.onMessageContact.bind(this)),this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),i.deploy.startsWith("polling")?this.runPolling():i.deploy.startsWith("webhook")&&this.runWebhook(i.deploy.split("webhook:")[1])}onCatch(i){this.log?.error?.(`[Bot.catch]: ${String(i)}`)}onStart(i,e,t){let{username:s}=i;e=="polling"?this.log?.success?.(`Telegram bot polling started: ${s}`):this.log?.success?.(`Telegram bot webhook started: ${s} (${t})`)}createBot(i){return new V.Bot(i)}createCtx(i){return new k({ct:i,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{session:{},data:{}}})}async runPolling(){this.bot.start({onStart:h(async i=>{this.onStart(i,"polling",null)},"onStart")})}async runWebhook(i){let e=(0,V.webhookCallback)(this.bot,"bun"),t="/telegram-webhook";(0,E.serve)({fetch(a){let{pathname:r}=new URL(a.url);if(r===t)return a.method==="POST"?e(a):new Response("OK",{status:200});if(r==="/"&&a.method==="GET"){let d=new Date().toISOString();return new Response(JSON.stringify({timestamp:d}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}});let s=await this.bot.api.getWebhookInfo(),o=i.endsWith("/")?i.slice(0,-1)+t:i+t;s.url!=o&&await this.bot.api.setWebhook(o);let n=await this.bot.api.getMe();this.onStart(n,"webhook",o)}pageBuildData(i,e){i?.data===void 0&&(i.data=i.buildData()),i.data.name=(0,M.parse)(e).name}pageSorts(i,e){let t=i.data.name,s=i.prototype,o="Payload",n="Command",a="Caption",r="Free",d=e.dynamic,c=e.dynamicSpesific,l=h(m=>m.charAt(0).toUpperCase()+m.slice(1),"upFirst"),p=h(m=>m.replace(o,"").replace(n,"").replace(a,"").replace(r,""),"getPureFuncName"),g=h((m,b)=>s[`buildSessionMethod${l(m)}`](b),"buildSessionMethod");e.all[t]=i;for(let m=0;m<e.lenListFuncStaticSession;m++){let b=e.listFuncStaticSession[m],j=e.static[b],Q=e.staticIntent[b],K=e.staticSession[b],_={name:t,func:b},I=j||Q;if(I!==void 0){let z=b.includes(n)?`/${t}`:t;I[s.buildIntent(z,b.startsWith("callback"))]=_}K!==void 0&&(K[g(b,t)]=_),b.toLowerCase().endsWith("free")&&c[p(b)].push(_)}s.free&&d.push(t)}pageLoads(){this.log?.info?.("Load pages..");let i=(0,M.join)(process.cwd(),"src","pages");if(!(0,w.existsSync)(i))throw new Error(`Directory ${i} is not found, please make it manually`);let e=(0,w.readdirSync)(i),t={},s=t,o=t,n=[],a=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand","videoNoteCaption","videoNoteCaptionCommand"],r=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload","videoNoteCaptionPayload","videoNoteCaptionCommandPayload"],d=[...a,...r,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],c=h((p,g)=>Object.fromEntries(p.map(m=>[m,{...g}])),"makeObject"),l={all:{},dynamic:[],dynamicSpesific:{text:n,photo:n,video:n,audio:n,document:n,animation:n,voice:n,videoNote:n,sticker:n,location:n,contact:n},static:c(a,t),staticIntent:c(r,s),staticSession:c(d,o),listFuncStatic:a,listFuncStaticIntent:r,listFuncStaticSession:d,lenListFuncStatic:a.length,lenListFuncStaticIntent:r.length,lenListFuncStaticSession:d.length};for(let p of e){let g=(0,M.join)(i,p),m=P.getPageSync(g,!0);this.pageBuildData(m,g),this.pageSorts(m,l)}return this.log?.info?.(`Finish load pages with total (${Object.keys(l.all).length})`),l}async pageRoutes(i,e){let t,s;if(t===void 0){let n=i.callbackData,a=i.msgText,r=i.msgCaption,d=this.pages.static;for(let c=0;c<this.pages.lenListFuncStatic;c++){let l=this.pages.listFuncStatic[c];if(s=d[l][n||a||r],s)break}s!==void 0&&(t=this.pages.all[s.name])}if(t===void 0){let n=await i.sessionGet();if(n){let a=n.method,r=this.pages.staticSession;for(let d=0;d<this.pages.lenListFuncStaticSession;d++){let c=this.pages.listFuncStaticSession[d];if(s=r[c][a],s)break}s!==void 0&&(t=this.pages.all[s.name])}}if(t===void 0){let n=i.callbackDataIntent,a=i.msgTextIntent,r=i.msgCaptionIntent,d=this.pages.staticIntent;for(let c=0;c<this.pages.lenListFuncStaticIntent;c++){let l=this.pages.listFuncStaticIntent[c];if(s=d[l][n||a||r],s)break}s!==void 0&&(t=this.pages.all[s.name])}if(t!==void 0&&s!==void 0)return await new t(i)[s.func]?.();let o=this.pages.dynamicSpesific[e]||[];for(let n=0;n<o.length;n++){let a=o[n];if(a===void 0)continue;let r=this.pages.all[a.func];if(r===void 0)continue;let c=await new r(i)[a.name]?.();if(c!==null)return c}for(let n=0;n<this.pages.dynamic.length;n++){let a=this.pages.dynamic[n];if(a===void 0)continue;let r=this.pages.all[a];if(r===void 0)continue;let c=await new r(i).free?.();if(c!==null)return c}return null}async hookBeforeRoute(i,e){return!0}async hookErrorPage(i,e,t,s){}async hookErrorInputNotFoundPage(i){}async onMessage(i,e){let t=this.createCtx(i);try{if(await this.hookBeforeRoute(t,e)===!1)return;await this.pageRoutes(t,e)===null&&await this.hookErrorInputNotFoundPage(t)}catch(s){await this.hookErrorPage(t,e,s,!1)}}async onCallbackQueryData(i){let e=this.createCtx(i);try{if(await e.callbackQueryAnswer(),await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(t){await this.hookErrorPage(e,"onCallbackQueryData",t,!0)}}async onMessageText(i){await this.onMessage(i,"onMessageText")}async onMessagePhoto(i){await this.onMessage(i,"onMessagePhoto")}async onMessageVideo(i){await this.onMessage(i,"onMessageVideo")}async onMessageAudio(i){await this.onMessage(i,"onMessageAudio")}async onMessageDocument(i){await this.onMessage(i,"onMessageDocument")}async onMessageAnimation(i){await this.onMessage(i,"onMessageAnimation")}async onMessageVoice(i){await this.onMessage(i,"onMessageVoice")}async onMessageVideoNote(i){await this.onMessage(i,"onMessageVideoNote")}async onMessageSticker(i){await this.onMessage(i,"onMessageSticker")}async onMessageLocation(i){await this.onMessage(i,"onMessageLocation")}async onMessageContact(i){await this.onMessage(i,"onMessageContact")}};0&&(module.exports={BaseGeneral,CacheExternal,Ctx,Gramstax,TemplateEngine,TemplateManager});
@@ -20,6 +20,17 @@ declare class CacheExternal extends Keyv {
20
20
  constructor(url?: string | `memory`, namespace?: string, ttl?: number, more?: IMore);
21
21
  }
22
22
 
23
+ type IMediaBlock = {
24
+ type: `photo` | `video` | `audio` | `document` | `animation` | `voice` | `video_note` | `sticker` | `location` | `contact`;
25
+ src?: string;
26
+ caption?: string;
27
+ latitude?: string;
28
+ longitude?: string;
29
+ phone?: string;
30
+ first_name?: string;
31
+ last_name?: string;
32
+ vcard?: string;
33
+ };
23
34
  declare class TemplateEngine {
24
35
  static _escape(str: string): string;
25
36
  static _processVariables(template: string): string;
@@ -29,6 +40,9 @@ declare class TemplateEngine {
29
40
  static _processScriptBlocks(template: string): string;
30
41
  static _processSpaceBlocks(template: string): string;
31
42
  static _processDivBlocks(template: string): string;
43
+ static _processMediaBlocks(template: string): {
44
+ [lang: string]: IMediaBlock;
45
+ };
32
46
  static _processMessageBlocks(template: string): {
33
47
  [lang: string]: string;
34
48
  };
@@ -39,6 +53,11 @@ declare class TemplateEngine {
39
53
  };
40
54
  };
41
55
  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;
56
+ static compileMedia(template: string): {
57
+ [baseId: string]: {
58
+ [lang: string]: (data?: Record<string, any>) => IMediaBlock;
59
+ };
60
+ };
42
61
  static compileMessages(template: string): {
43
62
  [baseId: string]: {
44
63
  [lang: string]: (data?: Record<string, any>) => string;
@@ -56,49 +75,60 @@ declare class TemplateEngine {
56
75
 
57
76
  /** Template file interface for better type safety */
58
77
  type ICompiledTemplate = {
78
+ media: ReturnType<typeof TemplateEngine.compileMedia>;
59
79
  message: ReturnType<typeof TemplateEngine.compileMessages>;
60
80
  keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>;
61
81
  };
62
82
  /** Template loading options */
63
83
  type ITemplateOptions = {
64
- /** Enable file watching for hot reloading (if have templatePath) */
84
+ /** Base path for template files */
85
+ path: string[];
86
+ /** Enable file watching for hot reloading (only work for persistent type) */
65
87
  enableWatch?: boolean;
66
- /** Base path for template files (set null if dont want read template from file) */
67
- path?: string | undefined | null;
68
88
  /** Force language params to this value */
69
- forceLanguage?: string | undefined | null;
89
+ forceLanguage?: string;
70
90
  };
71
91
  /** Template management system */
72
92
  declare class TemplateManager {
73
93
  _map: Map<string, ICompiledTemplate>;
74
94
  _engine: typeof TemplateEngine;
75
- _watcher: FSWatcher | null;
95
+ _watcher: FSWatcher[];
76
96
  _supportedExtensions: Set<string>;
77
- readonly _path: string | null;
78
- readonly _forceLanguage: string | null;
79
- readonly _isWatchEnabled: boolean;
80
- constructor(options?: ITemplateOptions);
97
+ readonly _path: ITemplateOptions[`path`];
98
+ readonly _forceLanguage: ITemplateOptions[`forceLanguage`];
99
+ readonly _isWatchEnabled: ITemplateOptions[`enableWatch`];
100
+ constructor(options: ITemplateOptions);
81
101
  /** Validate and ensure template directory exists. @returns Void */
82
- _validatePath(): void;
102
+ _validatePath(): boolean;
83
103
  /** Initialize file system watcher for hot reloading. @returns Void */
84
104
  _initializeWatcher(): void;
85
105
  /** Handle file change events */
86
106
  _handleFileChange(filepath: string): Promise<void>;
87
107
  /** Handle file add events */
88
- _handleFileAdd(filePath: string): Promise<void>;
108
+ _handleFileAdd(filepath: string): Promise<void>;
89
109
  /** Handle file delete events */
90
- _handleFileDelete(filePath: string): void;
110
+ _handleFileDelete(filepath: string): void;
91
111
  /** Handle watcher errors */
92
112
  _handleWatchError(error: any): void;
93
113
  /** Load all Template files during initialization */
94
114
  _loadAllFiles(): void;
95
115
  /** Load and compile a single template file */
96
116
  _loadFile(filename: string, useSync?: boolean): Promise<void>;
117
+ _getExtension(filename: string): string;
97
118
  _isValidFile(filename: string): boolean;
98
119
  _getKey(filename: string): string;
99
- compile(key: string, rawTemplate: string, keepIfExist?: Partial<{
120
+ _compile(key: string, template: string, keepIfExist?: Partial<{
100
121
  [K in keyof ICompiledTemplate]: boolean;
101
122
  }>): void;
123
+ /**
124
+ * Get compiled media template
125
+ * @param key Template identifier (filename without extension)
126
+ * @param baseId Base id attr from block
127
+ * @param language Target language code
128
+ * @param data Template variables
129
+ * @returns media object
130
+ */
131
+ getMedia(key: string, baseId?: string, language?: string, data?: Record<string, any>): IMediaBlock | Record<any, any>;
102
132
  /**
103
133
  * Get compiled message template
104
134
  * @param key Template identifier (filename without extension)
@@ -116,26 +146,14 @@ declare class TemplateManager {
116
146
  * @param data Template variables
117
147
  * @returns Array of rendered button labels
118
148
  */
119
- getKeyboard(key: string, baseId?: string, language?: string, display?: `inline` | `default`, data?: Record<string, any>): string[];
120
- /**
121
- * Update message template in memory
122
- * @param key Template identifier (filename without extension)
123
- * @param rawTemplate Raw template string
124
- */
125
- setMessage(key: string, rawTemplate: string): void;
126
- /**
127
- * Update keyboard template in memory
128
- * @param key Template identifier (filename without extension)
129
- * @param rawTemplate Raw template string
130
- */
131
- setKeyboard(key: string, rawTemplate: string): void;
149
+ getKeyboard(key: string, baseId?: string, language?: string, type?: `inline` | `default`, data?: Record<string, any>): string[];
132
150
  /**
133
151
  * Write template to file and update cache
134
152
  * @param filename Target filename (with extension)
135
- * @param rawTemplate Template to write
153
+ * @param template string content to write
136
154
  * @returns Promise that resolves when file is written
137
155
  */
138
- write(filename: string, rawTemplate: string): Promise<void>;
156
+ write(filename: string, template: string): Promise<boolean | null>;
139
157
  /**
140
158
  * Get list of available template
141
159
  * @returns Array of template names
@@ -217,15 +235,37 @@ declare class Ctx extends BaseGeneral {
217
235
  });
218
236
  broadcast(ids: any[], languageCode: any[], keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<void>;
219
237
  reply(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<grammy_types.Message.TextMessage>;
238
+ replyMedia<T extends IMediaBlock[`type`]>(type: T, keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: T extends `photo` ? Parameters<typeof this$1.ct.replyWithPhoto>[1] : T extends `video` ? Parameters<typeof this$1.ct.replyWithVideo>[1] : T extends `audio` ? Parameters<typeof this$1.ct.replyWithAudio>[1] : T extends `document` ? Parameters<typeof this$1.ct.replyWithDocument>[1] : T extends `animation` ? Parameters<typeof this$1.ct.replyWithAnimation>[1] : T extends `voice` ? Parameters<typeof this$1.ct.replyWithVoice>[1] : T extends `video_note` ? Parameters<typeof this$1.ct.replyWithVideoNote>[1] : T extends `sticker` ? Parameters<typeof this$1.ct.replyWithSticker>[1] : T extends `location` ? Parameters<typeof this$1.ct.replyWithLocation>[2] : T extends `contact` ? Parameters<typeof this$1.ct.replyWithContact>[2] : undefined): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
239
+ replyPhoto(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithPhoto>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
240
+ replyVideo(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideo>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
241
+ replyAudio(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithAudio>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
242
+ replyDocument(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithDocument>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
243
+ replyAnimation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithAnimation>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
244
+ replyVoice(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVoice>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
245
+ replyVideoNote(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideoNote>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
246
+ replySticker(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithSticker>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
247
+ replyLocation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithLocation>[2]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
248
+ replyContact(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithContact>[2]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
220
249
  replyAction(type: Parameters<typeof this$1.ct.replyWithChatAction>[0]): Promise<true>;
221
- edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<true | (grammy_types.Update.Edited & grammy_types.Message.CommonMessage & {
250
+ edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.editMessageText>[1]): Promise<true | (grammy_types.Update.Edited & grammy_types.Message.CommonMessage & {
222
251
  text: string;
223
252
  } & Partial<{
224
253
  entities: grammy_types.MessageEntity[];
225
254
  }>) | undefined>;
255
+ editMedia<T extends IMediaBlock[`type`]>(type: T, keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: T extends `voice` ? Parameters<typeof this$1.ct.replyWithVoice>[1] : T extends `video_note` ? Parameters<typeof this$1.ct.replyWithVideoNote>[1] : T extends `sticker` ? Parameters<typeof this$1.ct.replyWithSticker>[1] : T extends `location` ? Parameters<typeof this$1.ct.replyWithLocation>[2] : T extends `contact` ? Parameters<typeof this$1.ct.replyWithContact>[2] : Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
256
+ editPhoto(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
257
+ editVideo(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
258
+ editAudio(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
259
+ editDocument(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
260
+ editAnimation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
261
+ editVoice(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVoice>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
262
+ editVideoNote(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideoNote>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
263
+ editSticker(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithSticker>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
264
+ editLocation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithLocation>[2]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
265
+ editContact(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithContact>[2]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
226
266
  delete(): Promise<true>;
227
267
  callbackQueryAnswer(options?: any): Promise<true | null>;
228
- sessionSet(method: string, params: any, ...moreRoot: any): Promise<boolean | null>;
268
+ sessionSet(method: string, params: any, moreRoot?: Record<any, any>): Promise<boolean | null>;
229
269
  sessionGet(): Promise<{
230
270
  method: string;
231
271
  params: any;
@@ -494,6 +534,7 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
494
534
  token: string;
495
535
  deploy: string;
496
536
  log?: LoggingPretty;
537
+ cacheData?: CacheExternal;
497
538
  cacheSession?: CacheExternal;
498
539
  cacheKeyboard?: Map<any, any>;
499
540
  templateManager?: TemplateManager;
@@ -504,7 +545,6 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
504
545
  createCtx(ct: Context): ICtx;
505
546
  runPolling(): Promise<void>;
506
547
  runWebhook(baseUrl: string): Promise<void>;
507
- pageCompile(Page: typeof Ctx, redacted?: boolean): void;
508
548
  pageBuildData(Page: typeof Ctx, filePath: string): void;
509
549
  pageSorts(Page: typeof Ctx, pages: typeof this.pages): void;
510
550
  pageLoads(): {
@@ -904,4 +944,4 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
904
944
  onMessageContact(ct: Context): Promise<void>;
905
945
  }
906
946
 
907
- export { BaseGeneral, CacheExternal, Ctx, Gramstax, TemplateEngine, TemplateManager };
947
+ export { BaseGeneral, CacheExternal, Ctx, Gramstax, type IMediaBlock, TemplateEngine, TemplateManager };
@@ -20,6 +20,17 @@ declare class CacheExternal extends Keyv {
20
20
  constructor(url?: string | `memory`, namespace?: string, ttl?: number, more?: IMore);
21
21
  }
22
22
 
23
+ type IMediaBlock = {
24
+ type: `photo` | `video` | `audio` | `document` | `animation` | `voice` | `video_note` | `sticker` | `location` | `contact`;
25
+ src?: string;
26
+ caption?: string;
27
+ latitude?: string;
28
+ longitude?: string;
29
+ phone?: string;
30
+ first_name?: string;
31
+ last_name?: string;
32
+ vcard?: string;
33
+ };
23
34
  declare class TemplateEngine {
24
35
  static _escape(str: string): string;
25
36
  static _processVariables(template: string): string;
@@ -29,6 +40,9 @@ declare class TemplateEngine {
29
40
  static _processScriptBlocks(template: string): string;
30
41
  static _processSpaceBlocks(template: string): string;
31
42
  static _processDivBlocks(template: string): string;
43
+ static _processMediaBlocks(template: string): {
44
+ [lang: string]: IMediaBlock;
45
+ };
32
46
  static _processMessageBlocks(template: string): {
33
47
  [lang: string]: string;
34
48
  };
@@ -39,6 +53,11 @@ declare class TemplateEngine {
39
53
  };
40
54
  };
41
55
  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;
56
+ static compileMedia(template: string): {
57
+ [baseId: string]: {
58
+ [lang: string]: (data?: Record<string, any>) => IMediaBlock;
59
+ };
60
+ };
42
61
  static compileMessages(template: string): {
43
62
  [baseId: string]: {
44
63
  [lang: string]: (data?: Record<string, any>) => string;
@@ -56,49 +75,60 @@ declare class TemplateEngine {
56
75
 
57
76
  /** Template file interface for better type safety */
58
77
  type ICompiledTemplate = {
78
+ media: ReturnType<typeof TemplateEngine.compileMedia>;
59
79
  message: ReturnType<typeof TemplateEngine.compileMessages>;
60
80
  keyboard: ReturnType<typeof TemplateEngine.compileKeyboards>;
61
81
  };
62
82
  /** Template loading options */
63
83
  type ITemplateOptions = {
64
- /** Enable file watching for hot reloading (if have templatePath) */
84
+ /** Base path for template files */
85
+ path: string[];
86
+ /** Enable file watching for hot reloading (only work for persistent type) */
65
87
  enableWatch?: boolean;
66
- /** Base path for template files (set null if dont want read template from file) */
67
- path?: string | undefined | null;
68
88
  /** Force language params to this value */
69
- forceLanguage?: string | undefined | null;
89
+ forceLanguage?: string;
70
90
  };
71
91
  /** Template management system */
72
92
  declare class TemplateManager {
73
93
  _map: Map<string, ICompiledTemplate>;
74
94
  _engine: typeof TemplateEngine;
75
- _watcher: FSWatcher | null;
95
+ _watcher: FSWatcher[];
76
96
  _supportedExtensions: Set<string>;
77
- readonly _path: string | null;
78
- readonly _forceLanguage: string | null;
79
- readonly _isWatchEnabled: boolean;
80
- constructor(options?: ITemplateOptions);
97
+ readonly _path: ITemplateOptions[`path`];
98
+ readonly _forceLanguage: ITemplateOptions[`forceLanguage`];
99
+ readonly _isWatchEnabled: ITemplateOptions[`enableWatch`];
100
+ constructor(options: ITemplateOptions);
81
101
  /** Validate and ensure template directory exists. @returns Void */
82
- _validatePath(): void;
102
+ _validatePath(): boolean;
83
103
  /** Initialize file system watcher for hot reloading. @returns Void */
84
104
  _initializeWatcher(): void;
85
105
  /** Handle file change events */
86
106
  _handleFileChange(filepath: string): Promise<void>;
87
107
  /** Handle file add events */
88
- _handleFileAdd(filePath: string): Promise<void>;
108
+ _handleFileAdd(filepath: string): Promise<void>;
89
109
  /** Handle file delete events */
90
- _handleFileDelete(filePath: string): void;
110
+ _handleFileDelete(filepath: string): void;
91
111
  /** Handle watcher errors */
92
112
  _handleWatchError(error: any): void;
93
113
  /** Load all Template files during initialization */
94
114
  _loadAllFiles(): void;
95
115
  /** Load and compile a single template file */
96
116
  _loadFile(filename: string, useSync?: boolean): Promise<void>;
117
+ _getExtension(filename: string): string;
97
118
  _isValidFile(filename: string): boolean;
98
119
  _getKey(filename: string): string;
99
- compile(key: string, rawTemplate: string, keepIfExist?: Partial<{
120
+ _compile(key: string, template: string, keepIfExist?: Partial<{
100
121
  [K in keyof ICompiledTemplate]: boolean;
101
122
  }>): void;
123
+ /**
124
+ * Get compiled media template
125
+ * @param key Template identifier (filename without extension)
126
+ * @param baseId Base id attr from block
127
+ * @param language Target language code
128
+ * @param data Template variables
129
+ * @returns media object
130
+ */
131
+ getMedia(key: string, baseId?: string, language?: string, data?: Record<string, any>): IMediaBlock | Record<any, any>;
102
132
  /**
103
133
  * Get compiled message template
104
134
  * @param key Template identifier (filename without extension)
@@ -116,26 +146,14 @@ declare class TemplateManager {
116
146
  * @param data Template variables
117
147
  * @returns Array of rendered button labels
118
148
  */
119
- getKeyboard(key: string, baseId?: string, language?: string, display?: `inline` | `default`, data?: Record<string, any>): string[];
120
- /**
121
- * Update message template in memory
122
- * @param key Template identifier (filename without extension)
123
- * @param rawTemplate Raw template string
124
- */
125
- setMessage(key: string, rawTemplate: string): void;
126
- /**
127
- * Update keyboard template in memory
128
- * @param key Template identifier (filename without extension)
129
- * @param rawTemplate Raw template string
130
- */
131
- setKeyboard(key: string, rawTemplate: string): void;
149
+ getKeyboard(key: string, baseId?: string, language?: string, type?: `inline` | `default`, data?: Record<string, any>): string[];
132
150
  /**
133
151
  * Write template to file and update cache
134
152
  * @param filename Target filename (with extension)
135
- * @param rawTemplate Template to write
153
+ * @param template string content to write
136
154
  * @returns Promise that resolves when file is written
137
155
  */
138
- write(filename: string, rawTemplate: string): Promise<void>;
156
+ write(filename: string, template: string): Promise<boolean | null>;
139
157
  /**
140
158
  * Get list of available template
141
159
  * @returns Array of template names
@@ -217,15 +235,37 @@ declare class Ctx extends BaseGeneral {
217
235
  });
218
236
  broadcast(ids: any[], languageCode: any[], keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<void>;
219
237
  reply(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<grammy_types.Message.TextMessage>;
238
+ replyMedia<T extends IMediaBlock[`type`]>(type: T, keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: T extends `photo` ? Parameters<typeof this$1.ct.replyWithPhoto>[1] : T extends `video` ? Parameters<typeof this$1.ct.replyWithVideo>[1] : T extends `audio` ? Parameters<typeof this$1.ct.replyWithAudio>[1] : T extends `document` ? Parameters<typeof this$1.ct.replyWithDocument>[1] : T extends `animation` ? Parameters<typeof this$1.ct.replyWithAnimation>[1] : T extends `voice` ? Parameters<typeof this$1.ct.replyWithVoice>[1] : T extends `video_note` ? Parameters<typeof this$1.ct.replyWithVideoNote>[1] : T extends `sticker` ? Parameters<typeof this$1.ct.replyWithSticker>[1] : T extends `location` ? Parameters<typeof this$1.ct.replyWithLocation>[2] : T extends `contact` ? Parameters<typeof this$1.ct.replyWithContact>[2] : undefined): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
239
+ replyPhoto(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithPhoto>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
240
+ replyVideo(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideo>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
241
+ replyAudio(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithAudio>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
242
+ replyDocument(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithDocument>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
243
+ replyAnimation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithAnimation>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
244
+ replyVoice(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVoice>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
245
+ replyVideoNote(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideoNote>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
246
+ replySticker(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithSticker>[1]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
247
+ replyLocation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithLocation>[2]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
248
+ replyContact(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithContact>[2]): Promise<grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | undefined>;
220
249
  replyAction(type: Parameters<typeof this$1.ct.replyWithChatAction>[0]): Promise<true>;
221
- edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: any): Promise<true | (grammy_types.Update.Edited & grammy_types.Message.CommonMessage & {
250
+ edit(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.editMessageText>[1]): Promise<true | (grammy_types.Update.Edited & grammy_types.Message.CommonMessage & {
222
251
  text: string;
223
252
  } & Partial<{
224
253
  entities: grammy_types.MessageEntity[];
225
254
  }>) | undefined>;
255
+ editMedia<T extends IMediaBlock[`type`]>(type: T, keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: T extends `voice` ? Parameters<typeof this$1.ct.replyWithVoice>[1] : T extends `video_note` ? Parameters<typeof this$1.ct.replyWithVideoNote>[1] : T extends `sticker` ? Parameters<typeof this$1.ct.replyWithSticker>[1] : T extends `location` ? Parameters<typeof this$1.ct.replyWithLocation>[2] : T extends `contact` ? Parameters<typeof this$1.ct.replyWithContact>[2] : Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
256
+ editPhoto(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
257
+ editVideo(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
258
+ editAudio(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
259
+ editDocument(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
260
+ editAnimation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options1?: Parameters<typeof this$1.ct.editMessageMedia>[0], options2?: Parameters<typeof this$1.ct.editMessageMedia>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
261
+ editVoice(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVoice>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
262
+ editVideoNote(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithVideoNote>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
263
+ editSticker(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithSticker>[1]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
264
+ editLocation(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithLocation>[2]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
265
+ editContact(keyboard?: Keyboard | InlineKeyboard, data?: Record<string, any>, baseId?: string, options?: Parameters<typeof this$1.ct.replyWithContact>[2]): Promise<true | grammy_types.Message.LocationMessage | grammy_types.Message.ContactMessage | grammy_types.Message.PhotoMessage | grammy_types.Message.VideoMessage | grammy_types.Message.AudioMessage | grammy_types.Message.DocumentMessage | grammy_types.Message.VoiceMessage | grammy_types.Message.VideoNoteMessage | grammy_types.Message.StickerMessage | (grammy_types.Update.Edited & grammy_types.Message) | undefined>;
226
266
  delete(): Promise<true>;
227
267
  callbackQueryAnswer(options?: any): Promise<true | null>;
228
- sessionSet(method: string, params: any, ...moreRoot: any): Promise<boolean | null>;
268
+ sessionSet(method: string, params: any, moreRoot?: Record<any, any>): Promise<boolean | null>;
229
269
  sessionGet(): Promise<{
230
270
  method: string;
231
271
  params: any;
@@ -494,6 +534,7 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
494
534
  token: string;
495
535
  deploy: string;
496
536
  log?: LoggingPretty;
537
+ cacheData?: CacheExternal;
497
538
  cacheSession?: CacheExternal;
498
539
  cacheKeyboard?: Map<any, any>;
499
540
  templateManager?: TemplateManager;
@@ -504,7 +545,6 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
504
545
  createCtx(ct: Context): ICtx;
505
546
  runPolling(): Promise<void>;
506
547
  runWebhook(baseUrl: string): Promise<void>;
507
- pageCompile(Page: typeof Ctx, redacted?: boolean): void;
508
548
  pageBuildData(Page: typeof Ctx, filePath: string): void;
509
549
  pageSorts(Page: typeof Ctx, pages: typeof this.pages): void;
510
550
  pageLoads(): {
@@ -904,4 +944,4 @@ declare class Gramstax<ICtx extends Ctx = Ctx, IBot extends Bot = Bot> {
904
944
  onMessageContact(ct: Context): Promise<void>;
905
945
  }
906
946
 
907
- export { BaseGeneral, CacheExternal, Ctx, Gramstax, TemplateEngine, TemplateManager };
947
+ export { BaseGeneral, CacheExternal, Ctx, Gramstax, type IMediaBlock, TemplateEngine, TemplateManager };
package/dist/src/index.js CHANGED
@@ -1 +1 @@
1
- var B=Object.defineProperty;var c=(h,i)=>B(h,"name",{value:i,configurable:!0}),T=(h=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(h,{get:(i,s)=>(typeof require<"u"?require:i)[s]}):h)(function(h){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+h+'" is not supported')});import{LoggingPretty as L}from"logging-pretty";var f=class{static{c(this,"BaseGeneral")}static log=new L;static logError(i,s){this.log.error(`[${this.toString().match(/class\s+([^\s{]+)/)?.[1]}:${s}]: ${String(i)}`)}logError(i,s,e){this.constructor.log.error(`[${s||this.constructor.name}:${e}] ${String(i)}`)}};import{Keyv as R}from"keyv";import E from"@keyv/redis";var S=class extends R{constructor(s="memory",e,t,o){let n;s.startsWith("redis")&&(n=new E(s)),s==="memory"&&(n=new Map),o?.forceStore&&(n=o.forceStore);super({store:n,namespace:e,ttl:t});this.url=s}static{c(this,"CacheExternal")}};import{setTimeout as O}from"timers/promises";import{InlineKeyboard as V,Keyboard as _}from"grammy";var P=class extends f{static{c(this,"Ctx")}static template;static data;data=this.constructor.data;get isPremium(){return this.ct.from?.is_premium??!1}get isBot(){return this.ct.from?.is_bot??!1}get userid(){return this.ct.from?.id}get username(){return this.ct.from?.username}get fullname(){return`${this.ct.from?.first_name||""}${this.ct.from?.last_name||""}`}get firstname(){return this.ct.from?.first_name}get lastname(){return this.ct.from?.last_name}get msgText(){return this.ct.message?.text}get msgTextIntent(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ")[0]:""}get msgTextPayloads(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ").slice(1):[]}get msgTextPayload(){return this.msgTextPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionIntent(){return this.msgCaption&&this.msgCaption.indexOf(" ")!=-1?this.msgCaption.split(" ")[0]:""}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataIntent(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":")[0]:""}get callbackDataPayloads(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":").slice(1):[]}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}get callbackDataParts(){return this.callbackDataPayload&&this.callbackDataPayload.indexOf("+")!=-1?this.callbackDataPayload.split("+"):[]}get languageCode(){return this.ct.from?.language_code}set languageCode(i){this.ct.from.language_code=i}set session(i){this.temp.session=i}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(i){super(),this.ct=i.ct,this.cacheSession=i.cacheSession,this.cacheKeyboard=i.cacheKeyboard,this.templateManager=i.templateManager,this.temp=i.temp,i?.data&&(this.temp.data=i.data)}async broadcast(i,s,e,t,o,n){let r=s.map(d=>this.templateManager.getMessage(this.data.name,o,d,t));for(let d=0;d<i.length;d++){let l=i[d],u=r[d];await this.ct.api.sendMessage(l,u,{parse_mode:"HTML",reply_markup:e,...n}),d+1==30&&await O(1200)}}async reply(i,s,e,t){let o=this.templateManager.getMessage(this.data.name,e,this.languageCode,s);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:i,...t})}async replyAction(i){return await this.ct.replyWithChatAction(i)}async edit(i,s,e,t){try{let o=this.templateManager.getMessage(this.data.name,e,this.languageCode,s);return await this.ct.editMessageText(o,{parse_mode:"HTML",reply_markup:i,...t})}catch{await this.reply(i,s,e,t)}}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(i){try{return await this.ct.answerCallbackQuery(i)}catch{return null}}async sessionSet(i,s,...e){try{let t={method:i,params:s,...e},o=await this.cacheSession.set(`${this.userid}`,{method:i,params:s,...e});return o&&(this.session=t),o}catch{return null}}async sessionGet(){try{let i=await this.cacheSession.get(`${this.userid}`);return i&&(this.session=i),i||null}catch{return null}}async sessionClear(){try{let i=await this.cacheSession.delete(`${this.userid}`);return i&&(this.session={}),i}catch{return null}}static buildData(i){return{name:"",callbackData:i?function(...s){let e=i(...s);return`${this.name}${e===void 0?"":`:${e}`}`}:function(){return this?.name}}}buildInlineKeyboard(i,s){let e=this.data.name;if(s?.cache===!0){let a=`${e}:${this.languageCode}:inline`,r=this.cacheKeyboard.get(a);if(!r){let d=new V,l=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"inline",s?.data),u=i(d,l);return this.cacheKeyboard.set(a,u),u}return r}let t=new V,o=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"inline",s?.data);return i(t,o)}buildKeyboard(i,s){let e=this.data.name;if(s?.cache===!0){let a=`${e}:${this.languageCode}:default`,r=this.cacheKeyboard.get(a);if(!r){let d=new _,l=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"default",s?.data),u=i(d,l);return u.resized(!0),this.cacheKeyboard.set(a,u),u}return r}let t=new _,o=this.templateManager.getKeyboard(e,s?.baseId,this.languageCode,"default",s?.data),n=i(t,o);return n.resized(),n}validateSessionCallback(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallback(s)}validateSessionCallbackPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallbackPayload(s)}validateSessionText(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodText(s)}validateSessionTextPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextPayload(s)}validateSessionTextCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommand(s)}validateSessionTextCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommandPayload(s)}validateSessionTextFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextFree(s)}validateSessionPhotoCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaption(s)}validateSessionPhotoCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionPayload(s)}validateSessionPhotoCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommand(s)}validateSessionPhotoCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommandPayload(s)}validateSessionPhotoFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoFree(s)}validateSessionVideoCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaption(s)}validateSessionVideoCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionPayload(s)}validateSessionVideoCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommand(s)}validateSessionVideoCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommandPayload(s)}validateSessionVideoFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoFree(s)}validateSessionAudioCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaption(s)}validateSessionAudioCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionPayload(s)}validateSessionAudioCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommand(s)}validateSessionAudioCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommandPayload(s)}validateSessionAudioFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioFree(s)}validateSessionDocumentCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaption(s)}validateSessionDocumentCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionPayload(s)}validateSessionDocumentCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommand(s)}validateSessionDocumentCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommandPayload(s)}validateSessionDocumentFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentFree(s)}validateSessionAnimationCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaption(s)}validateSessionAnimationCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionPayload(s)}validateSessionAnimationCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommand(s)}validateSessionAnimationCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommandPayload(s)}validateSessionAnimationFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationFree(s)}validateSessionVoiceCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaption(s)}validateSessionVoiceCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionPayload(s)}validateSessionVoiceCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommand(s)}validateSessionVoiceCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommandPayload(s)}validateSessionVoiceFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceFree(s)}validateSessionVideoNoteCaption(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaption(s)}validateSessionVideoNoteCaptionPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionPayload(s)}validateSessionVideoNoteCaptionCommand(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommand(s)}validateSessionVideoNoteCaptionCommandPayload(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommandPayload(s)}validateSessionVideoNoteFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteFree(s)}validateSessionStickerFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodStickerFree(s)}validateSessionLocationFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodLocationFree(s)}validateSessionContactFree(i,s){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodContactFree(s)}sessionCallback(i,s){return this.sessionSet(this.buildSessionMethodCallback(s),i)}sessionCallbackPayload(i,s){return this.sessionSet(this.buildSessionMethodCallbackPayload(s),i)}sessionText(i,s){return this.sessionSet(this.buildSessionMethodText(s),i)}sessionTextPayload(i,s){return this.sessionSet(this.buildSessionMethodTextPayload(s),i)}sessionTextCommand(i,s){return this.sessionSet(this.buildSessionMethodTextCommand(s),i)}sessionTextCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodTextCommandPayload(s),i)}sessionTextFree(i,s){return this.sessionSet(this.buildSessionMethodTextFree(s),i)}sessionPhotoCaption(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaption(s),i)}sessionPhotoCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(s),i)}sessionPhotoCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(s),i)}sessionPhotoCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(s),i)}sessionPhotoFree(i,s){return this.sessionSet(this.buildSessionMethodPhotoFree(s),i)}sessionVideoCaption(i,s){return this.sessionSet(this.buildSessionMethodVideoCaption(s),i)}sessionVideoCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(s),i)}sessionVideoCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(s),i)}sessionVideoCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(s),i)}sessionVideoFree(i,s){return this.sessionSet(this.buildSessionMethodVideoFree(s),i)}sessionAudioCaption(i,s){return this.sessionSet(this.buildSessionMethodAudioCaption(s),i)}sessionAudioCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(s),i)}sessionAudioCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(s),i)}sessionAudioCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(s),i)}sessionAudioFree(i,s){return this.sessionSet(this.buildSessionMethodAudioFree(s),i)}sessionDocumentCaption(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaption(s),i)}sessionDocumentCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(s),i)}sessionDocumentCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(s),i)}sessionDocumentCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(s),i)}sessionDocumentFree(i,s){return this.sessionSet(this.buildSessionMethodDocumentFree(s),i)}sessionAnimationCaption(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaption(s),i)}sessionAnimationCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(s),i)}sessionAnimationCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(s),i)}sessionAnimationCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(s),i)}sessionAnimationFree(i,s){return this.sessionSet(this.buildSessionMethodAnimationFree(s),i)}sessionVoiceCaption(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaption(s),i)}sessionVoiceCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(s),i)}sessionVoiceCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(s),i)}sessionVoiceCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(s),i)}sessionVoiceFree(i,s){return this.sessionSet(this.buildSessionMethodVoiceFree(s),i)}sessionVideoNoteCaption(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaption(s),i)}sessionVideoNoteCaptionPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(s),i)}sessionVideoNoteCaptionCommand(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(s),i)}sessionVideoNoteCaptionCommandPayload(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(s),i)}sessionVideoNoteFree(i,s){return this.sessionSet(this.buildSessionMethodVideoNoteFree(s),i)}sessionStickerFree(i,s){return this.sessionSet(this.buildSessionMethodStickerFree(s),i)}sessionLocationFree(i,s){return this.sessionSet(this.buildSessionMethodLocationFree(s),i)}sessionContactFree(i,s){return this.sessionSet(this.buildSessionMethodContactFree(s),i)}sessionToCallback(i,s){return this.sessionCallback({...this.session.params,...i},s)}sessionToCallbackPayload(i,s){return this.sessionCallbackPayload({...this.session.params,...i},s)}sessionToText(i,s){return this.sessionText({...this.session.params,...i},s)}sessionToTextPayload(i,s){return this.sessionTextPayload({...this.session.params,...i},s)}sessionToTextCommand(i,s){return this.sessionTextCommand({...this.session.params,...i},s)}sessionToTextCommandPayload(i,s){return this.sessionTextCommandPayload({...this.session.params,...i},s)}sessionToTextFree(i,s){return this.sessionTextFree({...this.session.params,...i},s)}sessionToPhotoCaption(i,s){return this.sessionPhotoCaption({...this.session.params,...i},s)}sessionToPhotoCaptionPayload(i,s){return this.sessionPhotoCaptionPayload({...this.session.params,...i},s)}sessionToPhotoCaptionCommand(i,s){return this.sessionPhotoCaptionCommand({...this.session.params,...i},s)}sessionToPhotoCaptionCommandPayload(i,s){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...i},s)}sessionToPhotoFree(i,s){return this.sessionPhotoFree({...this.session.params,...i},s)}sessionToVideoCaption(i,s){return this.sessionVideoCaption({...this.session.params,...i},s)}sessionToVideoCaptionPayload(i,s){return this.sessionVideoCaptionPayload({...this.session.params,...i},s)}sessionToVideoCaptionCommand(i,s){return this.sessionVideoCaptionCommand({...this.session.params,...i},s)}sessionToVideoCaptionCommandPayload(i,s){return this.sessionVideoCaptionCommandPayload({...this.session.params,...i},s)}sessionToVideoFree(i,s){return this.sessionVideoFree({...this.session.params,...i},s)}sessionToAudioCaption(i,s){return this.sessionAudioCaption({...this.session.params,...i},s)}sessionToAudioCaptionPayload(i,s){return this.sessionAudioCaptionPayload({...this.session.params,...i},s)}sessionToAudioCaptionCommand(i,s){return this.sessionAudioCaptionCommand({...this.session.params,...i},s)}sessionToAudioCaptionCommandPayload(i,s){return this.sessionAudioCaptionCommandPayload({...this.session.params,...i},s)}sessionToAudioFree(i,s){return this.sessionAudioFree({...this.session.params,...i},s)}sessionToDocumentCaption(i,s){return this.sessionDocumentCaption({...this.session.params,...i},s)}sessionToDocumentCaptionPayload(i,s){return this.sessionDocumentCaptionPayload({...this.session.params,...i},s)}sessionToDocumentCaptionCommand(i,s){return this.sessionDocumentCaptionCommand({...this.session.params,...i},s)}sessionToDocumentCaptionCommandPayload(i,s){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...i},s)}sessionToDocumentFree(i,s){return this.sessionDocumentFree({...this.session.params,...i},s)}sessionToAnimationCaption(i,s){return this.sessionAnimationCaption({...this.session.params,...i},s)}sessionToAnimationCaptionPayload(i,s){return this.sessionAnimationCaptionPayload({...this.session.params,...i},s)}sessionToAnimationCaptionCommand(i,s){return this.sessionAnimationCaptionCommand({...this.session.params,...i},s)}sessionToAnimationCaptionCommandPayload(i,s){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...i},s)}sessionToAnimationFree(i,s){return this.sessionAnimationFree({...this.session.params,...i},s)}sessionToVoiceCaption(i,s){return this.sessionVoiceCaption({...this.session.params,...i},s)}sessionToVoiceCaptionPayload(i,s){return this.sessionVoiceCaptionPayload({...this.session.params,...i},s)}sessionToVoiceCaptionCommand(i,s){return this.sessionVoiceCaptionCommand({...this.session.params,...i},s)}sessionToVoiceCaptionCommandPayload(i,s){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...i},s)}sessionToVoiceFree(i,s){return this.sessionVoiceFree({...this.session.params,...i},s)}sessionToVideoNoteCaption(i,s){return this.sessionVideoNoteCaption({...this.session.params,...i},s)}sessionToVideoNoteCaptionPayload(i,s){return this.sessionVideoNoteCaptionPayload({...this.session.params,...i},s)}sessionToVideoNoteCaptionCommand(i,s){return this.sessionVideoNoteCaptionCommand({...this.session.params,...i},s)}sessionToVideoNoteCaptionCommandPayload(i,s){return this.sessionVideoNoteCaptionCommandPayload({...this.session.params,...i},s)}sessionToVideoNoteFree(i,s){return this.sessionVideoNoteFree({...this.session.params,...i},s)}sessionToStickerFree(i,s){return this.sessionStickerFree({...this.session.params,...i},s)}sessionToLocationFree(i,s){return this.sessionLocationFree({...this.session.params,...i},s)}sessionToContactFree(i,s){return this.sessionContactFree({...this.session.params,...i},s)}buildIntent(i,s=!0){i||(i=s?this.data.callbackData():this.data.name);let e=s?":":" ";return i?.indexOf?.(e)!=-1?i?.split?.(e)?.[0]:i}buildSessionMethod(i,s){return`${i}-${s||this.data.name}`}buildSessionMethodCallback(i){return this.buildSessionMethod("1",i)}buildSessionMethodCallbackPayload(i){return this.buildSessionMethod("2",i)}buildSessionMethodText(i){return this.buildSessionMethod("3",i)}buildSessionMethodTextPayload(i){return this.buildSessionMethod("4",i)}buildSessionMethodTextCommand(i){return this.buildSessionMethod("5",i)}buildSessionMethodTextCommandPayload(i){return this.buildSessionMethod("6",i)}buildSessionMethodTextFree(i){return this.buildSessionMethod("7",i)}buildSessionMethodPhotoCaption(i){return this.buildSessionMethod("8",i)}buildSessionMethodPhotoCaptionPayload(i){return this.buildSessionMethod("9",i)}buildSessionMethodPhotoCaptionCommand(i){return this.buildSessionMethod("10",i)}buildSessionMethodPhotoCaptionCommandPayload(i){return this.buildSessionMethod("11",i)}buildSessionMethodPhotoFree(i){return this.buildSessionMethod("12",i)}buildSessionMethodVideoCaption(i){return this.buildSessionMethod("13",i)}buildSessionMethodVideoCaptionPayload(i){return this.buildSessionMethod("14",i)}buildSessionMethodVideoCaptionCommand(i){return this.buildSessionMethod("15",i)}buildSessionMethodVideoCaptionCommandPayload(i){return this.buildSessionMethod("16",i)}buildSessionMethodVideoFree(i){return this.buildSessionMethod("17",i)}buildSessionMethodAudioCaption(i){return this.buildSessionMethod("18",i)}buildSessionMethodAudioCaptionPayload(i){return this.buildSessionMethod("19",i)}buildSessionMethodAudioCaptionCommand(i){return this.buildSessionMethod("20",i)}buildSessionMethodAudioCaptionCommandPayload(i){return this.buildSessionMethod("21",i)}buildSessionMethodAudioFree(i){return this.buildSessionMethod("22",i)}buildSessionMethodDocumentCaption(i){return this.buildSessionMethod("23",i)}buildSessionMethodDocumentCaptionPayload(i){return this.buildSessionMethod("24",i)}buildSessionMethodDocumentCaptionCommand(i){return this.buildSessionMethod("25",i)}buildSessionMethodDocumentCaptionCommandPayload(i){return this.buildSessionMethod("26",i)}buildSessionMethodDocumentFree(i){return this.buildSessionMethod("27",i)}buildSessionMethodAnimationCaption(i){return this.buildSessionMethod("28",i)}buildSessionMethodAnimationCaptionPayload(i){return this.buildSessionMethod("29",i)}buildSessionMethodAnimationCaptionCommand(i){return this.buildSessionMethod("30",i)}buildSessionMethodAnimationCaptionCommandPayload(i){return this.buildSessionMethod("31",i)}buildSessionMethodAnimationFree(i){return this.buildSessionMethod("32",i)}buildSessionMethodVoiceCaption(i){return this.buildSessionMethod("33",i)}buildSessionMethodVoiceCaptionPayload(i){return this.buildSessionMethod("34",i)}buildSessionMethodVoiceCaptionCommand(i){return this.buildSessionMethod("35",i)}buildSessionMethodVoiceCaptionCommandPayload(i){return this.buildSessionMethod("36",i)}buildSessionMethodVoiceFree(i){return this.buildSessionMethod("37",i)}buildSessionMethodVideoNoteCaption(i){return this.buildSessionMethod("38",i)}buildSessionMethodVideoNoteCaptionPayload(i){return this.buildSessionMethod("39",i)}buildSessionMethodVideoNoteCaptionCommand(i){return this.buildSessionMethod("40",i)}buildSessionMethodVideoNoteCaptionCommandPayload(i){return this.buildSessionMethod("41",i)}buildSessionMethodVideoNoteFree(i){return this.buildSessionMethod("42",i)}buildSessionMethodStickerFree(i){return this.buildSessionMethod("43",i)}buildSessionMethodLocationFree(i){return this.buildSessionMethod("44",i)}buildSessionMethodContactFree(i){return this.buildSessionMethod("45",i)}};import{serve as q}from"bun";import{join as D,parse as I}from"path";import{LoggingPretty as X}from"logging-pretty";var C=class{static{c(this,"TemplateEngine")}static _escape(i){return i.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(i){return i.replace(/\{\{(\w+)\}\}/g,(s,e)=>`\${(data && data["${e}"]) ?? ""}`)}static _processBaseBlocks(i){let s=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,e={};for(let t of i.matchAll(s)){let o=t[2]??"default",a=(t[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();e[o]=a}return e}static _processScriptBlocks(i){return i.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(s,e)=>{let t=e.trim();return t?`\${(() => { if (!data) return ''; try { with(data) { ${t} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(i){return i.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(i){return i.replace(/<div>([\s\S]*?)<\/div>/gi,(s,e)=>e.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processMessageBlocks(i){let s=/<message\s+lang="([^"]+)"\s*>([\s\S]*?)<\/message>/gi,e={};for(let[,t,o]of i.matchAll(s)){let n=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();e[t]=n}return e}static _processKeyboardBlocks(i){let s=/<keyboard\b[^>]*\blang="([^"]*)"[^>]*?(?:\sfor="([^"]*)")?[^>]*>([\s\S]*?)<\/keyboard>/gi,e={};for(let[,t,o,n]of i.matchAll(s)){let a=o==="default"?"default":"inline",r=n.trim();e[t]||(e[t]={}),e[t][a]=r}return e}static _compileToFunction(i,s){let e;s?e=i.map(n=>`\`${n}\``).join(","):e=`\`${i}\``;let t=e;if(t=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(t))),s){let o=`return [${t}]`;return new Function("data",o)}else{let o=`return ${t}`;return new Function("data",o)}}static compileMessages(i){let s=this._processBaseBlocks(i),e={};for(let[t,o]of Object.entries(s)){let n=this._processMessageBlocks(o);e[t]={};for(let[a,r]of Object.entries(n)){let d=this._processVariables(this._processScriptBlocks(r));e[t][a]=this._compileToFunction(d,!1)}}return e}static compileKeyboards(i){let s=this._processBaseBlocks(i),e={};for(let[t,o]of Object.entries(s)){let n=this._processKeyboardBlocks(o);e[t]={};for(let[a,r]of Object.entries(n)){e[t][a]={};for(let[d,l]of Object.entries(r)){let g=l.split(/(?<!\\),\s*/).map(m=>m.replace(/\\,/g,",").trim()).map(m=>this._processVariables(this._processScriptBlocks(m)));e[t][a][d]=this._compileToFunction(g,!0)}}}return e}};import{readFile as W,mkdir as j}from"fs/promises";import{watch as Q}from"chokidar";import{basename as F,join as w,extname as z}from"path";import{readdirSync as G,readFileSync as U,existsSync as A,statSync as H,writeFileSync as J}from"fs";var M=class{static{c(this,"TemplateManager")}_map=new Map;_engine=C;_watcher=null;_supportedExtensions=new Set([".html"]);_path;_forceLanguage;_isWatchEnabled;constructor(i={}){let{enableWatch:s=!1,path:e=null,forceLanguage:t=null}=i;this._path=e,this._forceLanguage=t,this._isWatchEnabled=s,this._validatePath(),this._initializeWatcher(),this._loadAllFiles()}_validatePath(){try{if(this._path===null||!A(this._path))return;if(!H(this._path).isDirectory())throw new Error(`Template path is not a directory: ${this._path}`)}catch(i){throw new Error(`Failed to validate Template path: ${i}`)}}_initializeWatcher(){this._path===null||!this._isWatchEnabled||(this._watcher=Q(this._path,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50}}),this._watcher.on("change",this._handleFileChange.bind(this)),this._watcher.on("add",this._handleFileAdd.bind(this)),this._watcher.on("unlink",this._handleFileDelete.bind(this)),this._watcher.on("error",this._handleWatchError.bind(this)))}async _handleFileChange(i){let s=F(i);this._isValidFile(s)&&await this._loadFile(s,!1)}async _handleFileAdd(i){let s=F(i);this._isValidFile(s)&&await this._loadFile(s,!1)}_handleFileDelete(i){let s=F(i),e=this._getKey(s);this._map.has(e)&&this._map.delete(e)}_handleWatchError(i){}_loadAllFiles(){if(this._path===null||!A(this._path))return;let s=G(this._path,{encoding:"utf8"}).filter(e=>this._isValidFile(e));for(let e of s)this._loadFile(e,!0)}async _loadFile(i,s=!0){if(this._path===null)return;let e=w(this._path,i),t=this._getKey(i),o=s?U(e,{encoding:"utf8"}):await W(e,{encoding:"utf8"});this.compile(t,o)}_isValidFile(i){let s=z(i).toLowerCase();return this._supportedExtensions.has(s)}_getKey(i){return i.replace(/\.[^/.]+$/,"")}compile(i,s,e){let t=this._map.get(i),o=t||{},n=!1;(e===void 0||e?.message===!1||t?.message===void 0)&&(o.message=C.compileMessages(s),n=!0),(e===void 0||e?.keyboard===!1||t?.keyboard===void 0)&&(o.keyboard=C.compileKeyboards(s),n=!0),n&&this._map.set(i,o)}getMessage(i,s="default",e="en",t){let n=this._map.get(i)?.message?.[s]?.[this._forceLanguage||e];if(!n)return"";try{return n(t)}catch{return""}}getKeyboard(i,s="default",e="en",t="inline",o){let a=this._map.get(i)?.keyboard?.[s]?.[this._forceLanguage||e]?.[t];if(!a)return[];try{return a(o)}catch{return[]}}setMessage(i,s){this.compile(i,s,{keyboard:!0})}setKeyboard(i,s){this.compile(i,s,{message:!0})}async write(i,s){if(this._path===null)return;let e=w(this._path,i);await j(this._path,{recursive:!0}),J(e,s,{encoding:"utf8"}),await this._loadFile(i,!1)}getAvailable(){return Array.from(this._map.keys())}has(i){return this._map.has(i)}getCacheStats(){return{templateCount:this._map.size,totalSize:JSON.stringify(this._map.entries().toArray(),(i,s)=>typeof s=="function"?s.toString():s).length}}async destroy(){this._watcher&&await this._watcher.close(),this._map.clear()}};import{existsSync as Y,readdirSync as Z}from"fs";import{Bot as ii,webhookCallback as si}from"grammy";var N=class{static{c(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;log;bot;constructor(i){this.log=i.log===null?void 0:i.log===void 0?new X:i.log,this.cacheSession=i.cacheSession||new S("memory","session"),this.cacheKeyboard=i.cacheKeyboard||new Map,this.templateManager=i.templateManager||new M({path:null}),this.bot=this.createBot(i.token),this.bot.catch(this.onCatch),this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this)),this.bot.on("message:text",this.onMessageText.bind(this)),this.bot.on("message:photo",this.onMessagePhoto.bind(this)),this.bot.on("message:video",this.onMessageVideo.bind(this)),this.bot.on("message:audio",this.onMessageAudio.bind(this)),this.bot.on("message:document",this.onMessageDocument.bind(this)),this.bot.on("message:animation",this.onMessageAnimation.bind(this)),this.bot.on("message:voice",this.onMessageVoice.bind(this)),this.bot.on("message:video_note",this.onMessageVideoNote.bind(this)),this.bot.on("message:sticker",this.onMessageSticker.bind(this)),this.bot.on("message:location",this.onMessageLocation.bind(this)),this.bot.on("message:contact",this.onMessageContact.bind(this)),this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),i.deploy.startsWith("polling")?this.runPolling():i.deploy.startsWith("webhook")&&this.runWebhook(i.deploy.split("webhook:")[1])}onCatch(i){this.log?.error?.(`[Bot.catch]: ${String(i)}`)}onStart(i,s,e){let{username:t}=i;s=="polling"?this.log?.success?.(`Telegram bot polling started: ${t}`):this.log?.success?.(`Telegram bot webhook started: ${t} (${e})`)}createBot(i){return new ii(i)}createCtx(i){return new P({ct:i,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{session:{},data:{}}})}async runPolling(){this.bot.start({onStart:c(async i=>{this.onStart(i,"polling",null)},"onStart")})}async runWebhook(i){let s=si(this.bot,"bun"),e="/telegram-webhook";q({fetch(a){let{pathname:r}=new URL(a.url);if(r===e)return a.method==="POST"?s(a):new Response("OK",{status:200});if(r==="/"&&a.method==="GET"){let d=new Date().toISOString();return new Response(JSON.stringify({timestamp:d}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}});let t=await this.bot.api.getWebhookInfo(),o=i.endsWith("/")?i.slice(0,-1)+e:i+e;t.url!=o&&await this.bot.api.setWebhook(o);let n=await this.bot.api.getMe();this.onStart(n,"webhook",o)}pageCompile(i,s=!0){i?.template!==void 0?(this.templateManager.compile(i.data.name,i.template),s&&(i.template=void 0)):i.template=void 0}pageBuildData(i,s){i?.data===void 0&&(i.data=i.buildData()),i.data.name=I(s).name}pageSorts(i,s){let e=i.data.name,t=i.prototype,o="Payload",n="Command",a="Caption",r="Free",d=s.dynamic,l=s.dynamicSpesific,u=c(p=>p.charAt(0).toUpperCase()+p.slice(1),"upFirst"),g=c(p=>p.replace(o,"").replace(n,"").replace(a,"").replace(r,""),"getPureFuncName"),m=c((p,b)=>t[`buildSessionMethod${u(p)}`](b),"buildSessionMethod");s.all[e]=i;for(let p=0;p<s.lenListFuncStaticSession;p++){let b=s.listFuncStaticSession[p],y=s.static[b],K=s.staticIntent[b],x=s.staticSession[b],v={name:e,func:b},k=y||K;if(k!==void 0){let $=b.includes(n)?`/${e}`:e;k[t.buildIntent($,b.startsWith("callback"))]=v}x!==void 0&&(x[m(b,e)]=v),b.toLowerCase().endsWith("free")&&l[g(b)].push(v)}t.free&&d.push(e)}pageLoads(){this.log?.info?.("Load pages..");let i=D(process.cwd(),"src","pages");if(!Y(i))throw new Error(`Folder ${i} is not found, please make it manually`);let s=Z(i),e={},t=e,o=e,n=[],a=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand","videoNoteCaption","videoNoteCaptionCommand"],r=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload","videoNoteCaptionPayload","videoNoteCaptionCommandPayload"],d=[...a,...r,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],l=c((g,m)=>Object.fromEntries(g.map(p=>[p,{...m}])),"makeObject"),u={all:{},dynamic:[],dynamicSpesific:{text:n,photo:n,video:n,audio:n,document:n,animation:n,voice:n,videoNote:n,sticker:n,location:n,contact:n},static:l(a,e),staticIntent:l(r,t),staticSession:l(d,o),listFuncStatic:a,listFuncStaticIntent:r,listFuncStaticSession:d,lenListFuncStatic:a.length,lenListFuncStaticIntent:r.length,lenListFuncStaticSession:d.length};for(let g of s){let m=D(i,g),p=T(m),y=Object.values(p)[0];if(y===void 0)throw`file ${I(m).name} must have export (not default) class page`;this.pageBuildData(y,m),this.pageCompile(y),this.pageSorts(y,u)}return this.log?.info?.(`Finish load pages with total (${Object.keys(u.all).length})`),u}async pageRoutes(i,s){let e,t;if(e===void 0){let n=i.callbackData,a=i.msgText,r=i.msgCaption,d=this.pages.static;for(let l=0;l<this.pages.lenListFuncStatic;l++){let u=this.pages.listFuncStatic[l];if(t=d[u][n||a||r],t)break}t!==void 0&&(e=this.pages.all[t.name])}if(e===void 0){let n=await i.sessionGet();if(n){let a=n.method,r=this.pages.staticSession;for(let d=0;d<this.pages.lenListFuncStaticSession;d++){let l=this.pages.listFuncStaticSession[d];if(t=r[l][a],t)break}t!==void 0&&(e=this.pages.all[t.name])}}if(e===void 0){let n=i.callbackDataIntent,a=i.msgTextIntent,r=i.msgCaptionIntent,d=this.pages.staticIntent;for(let l=0;l<this.pages.lenListFuncStaticIntent;l++){let u=this.pages.listFuncStaticIntent[l];if(t=d[u][n||a||r],t)break}t!==void 0&&(e=this.pages.all[t.name])}if(e!==void 0&&t!==void 0)return await new e(i)[t.func]?.();let o=this.pages.dynamicSpesific[s]||[];for(let n=0;n<o.length;n++){let a=o[n];if(a===void 0)continue;let r=this.pages.all[a.func];if(r===void 0)continue;let l=await new r(i)[a.name]?.();if(l!==null)return l}for(let n=0;n<this.pages.dynamic.length;n++){let a=this.pages.dynamic[n];if(a===void 0)continue;let r=this.pages.all[a];if(r===void 0)continue;let l=await new r(i).free?.();if(l!==null)return l}return null}async hookBeforeRoute(i,s){return!0}async hookErrorPage(i,s,e,t){}async hookErrorInputNotFoundPage(i){}async onMessage(i,s){let e=this.createCtx(i);try{if(await this.hookBeforeRoute(e,s)===!1)return;await this.pageRoutes(e,s)===null&&await this.hookErrorInputNotFoundPage(e)}catch(t){await this.hookErrorPage(e,s,t,!1)}}async onCallbackQueryData(i){let s=this.createCtx(i);try{if(await s.callbackQueryAnswer(),await this.hookBeforeRoute(s,"onCallbackQueryData")===!1)return;await this.pageRoutes(s,"callback")}catch(e){await this.hookErrorPage(s,"onCallbackQueryData",e,!0)}}async onMessageText(i){await this.onMessage(i,"onMessageText")}async onMessagePhoto(i){await this.onMessage(i,"onMessagePhoto")}async onMessageVideo(i){await this.onMessage(i,"onMessageVideo")}async onMessageAudio(i){await this.onMessage(i,"onMessageAudio")}async onMessageDocument(i){await this.onMessage(i,"onMessageDocument")}async onMessageAnimation(i){await this.onMessage(i,"onMessageAnimation")}async onMessageVoice(i){await this.onMessage(i,"onMessageVoice")}async onMessageVideoNote(i){await this.onMessage(i,"onMessageVideoNote")}async onMessageSticker(i){await this.onMessage(i,"onMessageSticker")}async onMessageLocation(i){await this.onMessage(i,"onMessageLocation")}async onMessageContact(i){await this.onMessage(i,"onMessageContact")}};export{f as BaseGeneral,S as CacheExternal,P as Ctx,N as Gramstax,C as TemplateEngine,M as TemplateManager};
1
+ var W=Object.defineProperty;var p=(m,i)=>W(m,"name",{value:i,configurable:!0}),w=(m=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(m,{get:(i,e)=>(typeof require<"u"?require:i)[e]}):m)(function(m){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+m+'" is not supported')});import{LoggingPretty as B}from"logging-pretty";var C=class{static{p(this,"BaseGeneral")}static log=new B;static logError(i,e){this.log.error(`[${this.toString().match(/class\s+([^\s{]+)/)?.[1]}:${e}]: ${String(i)}`)}logError(i,e,t){this.constructor.log.error(`[${e||this.constructor.name}:${t}] ${String(i)}`)}};import{Keyv as L}from"keyv";import $ from"@keyv/redis";var S=class extends L{constructor(e="memory",t,s,o){let n;e.startsWith("redis")&&(n=new $(e)),e==="memory"&&(n=new Map),o?.forceStore&&(n=o.forceStore);super({store:n,namespace:t,ttl:s});this.url=e}static{p(this,"CacheExternal")}};import{setTimeout as E}from"timers/promises";import{InlineKeyboard as V,Keyboard as _}from"grammy";var P=class extends C{static{p(this,"Ctx")}static template;static data;data=this.constructor.data;get isPremium(){return this.ct.from?.is_premium??!1}get isBot(){return this.ct.from?.is_bot??!1}get userid(){return this.ct.from?.id}get username(){return this.ct.from?.username}get fullname(){return`${this.ct.from?.first_name||""}${this.ct.from?.last_name||""}`}get firstname(){return this.ct.from?.first_name}get lastname(){return this.ct.from?.last_name}get msgText(){return this.ct.message?.text}get msgTextIntent(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ")[0]:""}get msgTextPayloads(){return this.msgText&&this.msgText.indexOf(" ")!=-1?this.msgText.split(" ").slice(1):[]}get msgTextPayload(){return this.msgTextPayloads[0]}get msgCaption(){return this.ct.message?.caption}get msgCaptionIntent(){return this.msgCaption&&this.msgCaption.indexOf(" ")!=-1?this.msgCaption.split(" ")[0]:""}get msgPhoto(){return this.ct.message?.photo}get msgVideo(){return this.ct.message?.video}get msgAudio(){return this.ct.message?.audio}get callbackData(){return this.ct.callbackQuery?.data}get callbackDataIntent(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":")[0]:""}get callbackDataPayloads(){return this.callbackData&&this.callbackData.indexOf(":")!=-1?this.callbackData.split(":").slice(1):[]}get callbackDataPayload(){return this.callbackDataPayloads?.[0]}get callbackDataParts(){return this.callbackDataPayload&&this.callbackDataPayload.indexOf("+")!=-1?this.callbackDataPayload.split("+"):[]}get languageCode(){return this.ct.from?.language_code}set languageCode(i){this.ct.from.language_code=i}set session(i){this.temp.session=i}get session(){return this.temp.session}ct;cacheSession;cacheKeyboard;templateManager;temp;constructor(i){super(),this.ct=i.ct,this.cacheSession=i.cacheSession,this.cacheKeyboard=i.cacheKeyboard,this.templateManager=i.templateManager,this.temp=i.temp,i?.data&&(this.temp.data=i.data)}async broadcast(i,e,t,s,o,n){let r=e.map(d=>this.templateManager.getMessage(this.data.name,o,d,s));for(let d=0;d<i.length;d++){let c=i[d],l=r[d];await this.ct.api.sendMessage(c,l,{parse_mode:"HTML",reply_markup:t,...n}),d+1==30&&await E(1200)}}async reply(i,e,t,s){let o=this.templateManager.getMessage(this.data.name,t,this.languageCode,e);return await this.ct.reply(o,{parse_mode:"HTML",reply_markup:i,...s})}async replyMedia(i,e,t,s,o){let n=this.templateManager.getMedia(this.data.name,s,this.languageCode,t),a={parse_mode:"HTML",reply_markup:e,...o};if(i=="photo")return await this.ct.replyWithPhoto(n.src,{caption:n.caption,...a});if(i=="video")return await this.ct.replyWithVideo(n.src,{caption:n.caption,...a});if(i=="audio")return await this.ct.replyWithAudio(n.src,{caption:n.caption,...a});if(i=="document")return await this.ct.replyWithDocument(n.src,{caption:n.caption,...a});if(i=="animation")return await this.ct.replyWithAnimation(n.src,{caption:n.caption,...a});if(i=="voice")return await this.ct.replyWithVoice(n.src,a);if(i=="video_note")return await this.ct.replyWithVideoNote(n.src,a);if(i=="sticker")return await this.ct.replyWithSticker(n.src,a);if(i=="location")return await this.ct.replyWithLocation(n.latitude,n.longitude,a);if(i=="contact")return await this.ct.replyWithContact(n.phone,n.first_name,{vcard:n.vcard,...a})}async replyPhoto(i,e,t,s){return this.replyMedia("photo",i,e,t,s)}async replyVideo(i,e,t,s){return this.replyMedia("video",i,e,t,s)}async replyAudio(i,e,t,s){return this.replyMedia("audio",i,e,t,s)}async replyDocument(i,e,t,s){return this.replyMedia("document",i,e,t,s)}async replyAnimation(i,e,t,s){return this.replyMedia("animation",i,e,t,s)}async replyVoice(i,e,t,s){return this.replyMedia("voice",i,e,t,s)}async replyVideoNote(i,e,t,s){return this.replyMedia("video_note",i,e,t,s)}async replySticker(i,e,t,s){return this.replyMedia("sticker",i,e,t,s)}async replyLocation(i,e,t,s){return this.replyMedia("location",i,e,t,s)}async replyContact(i,e,t,s){return this.replyMedia("contact",i,e,t,s)}async replyAction(i){return await this.ct.replyWithChatAction(i)}async edit(i,e,t,s){try{let o=this.templateManager.getMessage(this.data.name,t,this.languageCode,e);return await this.ct.editMessageText(o,{parse_mode:"HTML",reply_markup:i,...s})}catch{await this.reply(i,e,t,s)}}async editMedia(i,e,t,s,o,n){try{let{src:a,caption:r}=this.templateManager.getMedia(this.data.name,s,this.languageCode,t);return i=="voice"?(await this.delete(),await this.replyVoice(e,t,s,o)):i=="video_note"?(await this.delete(),await this.replyVoice(e,t,s,o)):i=="sticker"?(await this.delete(),await this.replySticker(e,t,s,o)):i=="location"?(await this.delete(),await this.replyLocation(e,t,s,o)):i=="contact"?(await this.delete(),await this.replyContact(e,t,s,o)):await this.ct.editMessageMedia({media:a,caption:r,type:i,parse_mode:"HTML",...o},{reply_markup:e,...n})}catch{await this.reply(e,t,s,n)}}async editPhoto(i,e,t,s,o){return await this.editMedia("photo",i,e,t,s,o)}async editVideo(i,e,t,s,o){return await this.editMedia("video",i,e,t,s,o)}async editAudio(i,e,t,s,o){return await this.editMedia("audio",i,e,t,s,o)}async editDocument(i,e,t,s,o){return await this.editMedia("document",i,e,t,s,o)}async editAnimation(i,e,t,s,o){return await this.editMedia("animation",i,e,t,s,o)}async editVoice(i,e,t,s){return await this.editMedia("voice",i,e,t,s)}async editVideoNote(i,e,t,s){return await this.editMedia("video_note",i,e,t,s)}async editSticker(i,e,t,s){return await this.editMedia("sticker",i,e,t,s)}async editLocation(i,e,t,s){return await this.editMedia("location",i,e,t,s)}async editContact(i,e,t,s){return await this.editMedia("contact",i,e,t,s)}async delete(){return await this.ct.deleteMessage()}async callbackQueryAnswer(i){try{return await this.ct.answerCallbackQuery(i)}catch{return null}}async sessionSet(i,e,t){try{let s={method:i,params:e,...t},o=await this.cacheSession.set(`${this.userid}`,s);return o&&(this.session=s),o}catch{return null}}async sessionGet(){try{let i=await this.cacheSession.get(`${this.userid}`);return i&&(this.session=i),i||null}catch{return null}}async sessionClear(){try{let i=await this.cacheSession.delete(`${this.userid}`);return i&&(this.session={}),i}catch{return null}}static buildData(i){return{name:"",callbackData:i?function(...e){let t=i(...e);return`${this.name}${t===void 0?"":`:${t}`}`}:function(){return this?.name}}}buildInlineKeyboard(i,e){let t=this.data.name;if(e?.cache===!0){let a=`${t}:${this.languageCode}:inline`,r=this.cacheKeyboard.get(a);if(!r){let d=new V,c=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"inline",e?.data),l=i(d,c);return this.cacheKeyboard.set(a,l),l}return r}let s=new V,o=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"inline",e?.data);return i(s,o)}buildKeyboard(i,e){let t=this.data.name;if(e?.cache===!0){let a=`${t}:${this.languageCode}:default`,r=this.cacheKeyboard.get(a);if(!r){let d=new _,c=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"default",e?.data),l=i(d,c);return l.resized(!0),this.cacheKeyboard.set(a,l),l}return r}let s=new _,o=this.templateManager.getKeyboard(t,e?.baseId,this.languageCode,"default",e?.data),n=i(s,o);return n.resized(),n}validateSessionCallback(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallback(e)}validateSessionCallbackPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodCallbackPayload(e)}validateSessionText(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodText(e)}validateSessionTextPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextPayload(e)}validateSessionTextCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommand(e)}validateSessionTextCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextCommandPayload(e)}validateSessionTextFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodTextFree(e)}validateSessionPhotoCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaption(e)}validateSessionPhotoCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionPayload(e)}validateSessionPhotoCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommand(e)}validateSessionPhotoCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoCaptionCommandPayload(e)}validateSessionPhotoFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodPhotoFree(e)}validateSessionVideoCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaption(e)}validateSessionVideoCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionPayload(e)}validateSessionVideoCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommand(e)}validateSessionVideoCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoCaptionCommandPayload(e)}validateSessionVideoFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoFree(e)}validateSessionAudioCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaption(e)}validateSessionAudioCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionPayload(e)}validateSessionAudioCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommand(e)}validateSessionAudioCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioCaptionCommandPayload(e)}validateSessionAudioFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAudioFree(e)}validateSessionDocumentCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaption(e)}validateSessionDocumentCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionPayload(e)}validateSessionDocumentCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommand(e)}validateSessionDocumentCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentCaptionCommandPayload(e)}validateSessionDocumentFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodDocumentFree(e)}validateSessionAnimationCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaption(e)}validateSessionAnimationCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionPayload(e)}validateSessionAnimationCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommand(e)}validateSessionAnimationCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationCaptionCommandPayload(e)}validateSessionAnimationFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodAnimationFree(e)}validateSessionVoiceCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaption(e)}validateSessionVoiceCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionPayload(e)}validateSessionVoiceCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommand(e)}validateSessionVoiceCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceCaptionCommandPayload(e)}validateSessionVoiceFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVoiceFree(e)}validateSessionVideoNoteCaption(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaption(e)}validateSessionVideoNoteCaptionPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionPayload(e)}validateSessionVideoNoteCaptionCommand(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommand(e)}validateSessionVideoNoteCaptionCommandPayload(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteCaptionCommandPayload(e)}validateSessionVideoNoteFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodVideoNoteFree(e)}validateSessionStickerFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodStickerFree(e)}validateSessionLocationFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodLocationFree(e)}validateSessionContactFree(i,e){return i===void 0&&(i=this.session.method),i===void 0?!1:i===this.buildSessionMethodContactFree(e)}sessionCallback(i,e){return this.sessionSet(this.buildSessionMethodCallback(e),i)}sessionCallbackPayload(i,e){return this.sessionSet(this.buildSessionMethodCallbackPayload(e),i)}sessionText(i,e){return this.sessionSet(this.buildSessionMethodText(e),i)}sessionTextPayload(i,e){return this.sessionSet(this.buildSessionMethodTextPayload(e),i)}sessionTextCommand(i,e){return this.sessionSet(this.buildSessionMethodTextCommand(e),i)}sessionTextCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodTextCommandPayload(e),i)}sessionTextFree(i,e){return this.sessionSet(this.buildSessionMethodTextFree(e),i)}sessionPhotoCaption(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaption(e),i)}sessionPhotoCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionPayload(e),i)}sessionPhotoCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommand(e),i)}sessionPhotoCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodPhotoCaptionCommandPayload(e),i)}sessionPhotoFree(i,e){return this.sessionSet(this.buildSessionMethodPhotoFree(e),i)}sessionVideoCaption(i,e){return this.sessionSet(this.buildSessionMethodVideoCaption(e),i)}sessionVideoCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionPayload(e),i)}sessionVideoCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionCommand(e),i)}sessionVideoCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoCaptionCommandPayload(e),i)}sessionVideoFree(i,e){return this.sessionSet(this.buildSessionMethodVideoFree(e),i)}sessionAudioCaption(i,e){return this.sessionSet(this.buildSessionMethodAudioCaption(e),i)}sessionAudioCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionPayload(e),i)}sessionAudioCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionCommand(e),i)}sessionAudioCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodAudioCaptionCommandPayload(e),i)}sessionAudioFree(i,e){return this.sessionSet(this.buildSessionMethodAudioFree(e),i)}sessionDocumentCaption(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaption(e),i)}sessionDocumentCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionPayload(e),i)}sessionDocumentCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommand(e),i)}sessionDocumentCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodDocumentCaptionCommandPayload(e),i)}sessionDocumentFree(i,e){return this.sessionSet(this.buildSessionMethodDocumentFree(e),i)}sessionAnimationCaption(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaption(e),i)}sessionAnimationCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionPayload(e),i)}sessionAnimationCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommand(e),i)}sessionAnimationCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodAnimationCaptionCommandPayload(e),i)}sessionAnimationFree(i,e){return this.sessionSet(this.buildSessionMethodAnimationFree(e),i)}sessionVoiceCaption(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaption(e),i)}sessionVoiceCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionPayload(e),i)}sessionVoiceCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommand(e),i)}sessionVoiceCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVoiceCaptionCommandPayload(e),i)}sessionVoiceFree(i,e){return this.sessionSet(this.buildSessionMethodVoiceFree(e),i)}sessionVideoNoteCaption(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaption(e),i)}sessionVideoNoteCaptionPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionPayload(e),i)}sessionVideoNoteCaptionCommand(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommand(e),i)}sessionVideoNoteCaptionCommandPayload(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteCaptionCommandPayload(e),i)}sessionVideoNoteFree(i,e){return this.sessionSet(this.buildSessionMethodVideoNoteFree(e),i)}sessionStickerFree(i,e){return this.sessionSet(this.buildSessionMethodStickerFree(e),i)}sessionLocationFree(i,e){return this.sessionSet(this.buildSessionMethodLocationFree(e),i)}sessionContactFree(i,e){return this.sessionSet(this.buildSessionMethodContactFree(e),i)}sessionToCallback(i,e){return this.sessionCallback({...this.session.params,...i},e)}sessionToCallbackPayload(i,e){return this.sessionCallbackPayload({...this.session.params,...i},e)}sessionToText(i,e){return this.sessionText({...this.session.params,...i},e)}sessionToTextPayload(i,e){return this.sessionTextPayload({...this.session.params,...i},e)}sessionToTextCommand(i,e){return this.sessionTextCommand({...this.session.params,...i},e)}sessionToTextCommandPayload(i,e){return this.sessionTextCommandPayload({...this.session.params,...i},e)}sessionToTextFree(i,e){return this.sessionTextFree({...this.session.params,...i},e)}sessionToPhotoCaption(i,e){return this.sessionPhotoCaption({...this.session.params,...i},e)}sessionToPhotoCaptionPayload(i,e){return this.sessionPhotoCaptionPayload({...this.session.params,...i},e)}sessionToPhotoCaptionCommand(i,e){return this.sessionPhotoCaptionCommand({...this.session.params,...i},e)}sessionToPhotoCaptionCommandPayload(i,e){return this.sessionPhotoCaptionCommandPayload({...this.session.params,...i},e)}sessionToPhotoFree(i,e){return this.sessionPhotoFree({...this.session.params,...i},e)}sessionToVideoCaption(i,e){return this.sessionVideoCaption({...this.session.params,...i},e)}sessionToVideoCaptionPayload(i,e){return this.sessionVideoCaptionPayload({...this.session.params,...i},e)}sessionToVideoCaptionCommand(i,e){return this.sessionVideoCaptionCommand({...this.session.params,...i},e)}sessionToVideoCaptionCommandPayload(i,e){return this.sessionVideoCaptionCommandPayload({...this.session.params,...i},e)}sessionToVideoFree(i,e){return this.sessionVideoFree({...this.session.params,...i},e)}sessionToAudioCaption(i,e){return this.sessionAudioCaption({...this.session.params,...i},e)}sessionToAudioCaptionPayload(i,e){return this.sessionAudioCaptionPayload({...this.session.params,...i},e)}sessionToAudioCaptionCommand(i,e){return this.sessionAudioCaptionCommand({...this.session.params,...i},e)}sessionToAudioCaptionCommandPayload(i,e){return this.sessionAudioCaptionCommandPayload({...this.session.params,...i},e)}sessionToAudioFree(i,e){return this.sessionAudioFree({...this.session.params,...i},e)}sessionToDocumentCaption(i,e){return this.sessionDocumentCaption({...this.session.params,...i},e)}sessionToDocumentCaptionPayload(i,e){return this.sessionDocumentCaptionPayload({...this.session.params,...i},e)}sessionToDocumentCaptionCommand(i,e){return this.sessionDocumentCaptionCommand({...this.session.params,...i},e)}sessionToDocumentCaptionCommandPayload(i,e){return this.sessionDocumentCaptionCommandPayload({...this.session.params,...i},e)}sessionToDocumentFree(i,e){return this.sessionDocumentFree({...this.session.params,...i},e)}sessionToAnimationCaption(i,e){return this.sessionAnimationCaption({...this.session.params,...i},e)}sessionToAnimationCaptionPayload(i,e){return this.sessionAnimationCaptionPayload({...this.session.params,...i},e)}sessionToAnimationCaptionCommand(i,e){return this.sessionAnimationCaptionCommand({...this.session.params,...i},e)}sessionToAnimationCaptionCommandPayload(i,e){return this.sessionAnimationCaptionCommandPayload({...this.session.params,...i},e)}sessionToAnimationFree(i,e){return this.sessionAnimationFree({...this.session.params,...i},e)}sessionToVoiceCaption(i,e){return this.sessionVoiceCaption({...this.session.params,...i},e)}sessionToVoiceCaptionPayload(i,e){return this.sessionVoiceCaptionPayload({...this.session.params,...i},e)}sessionToVoiceCaptionCommand(i,e){return this.sessionVoiceCaptionCommand({...this.session.params,...i},e)}sessionToVoiceCaptionCommandPayload(i,e){return this.sessionVoiceCaptionCommandPayload({...this.session.params,...i},e)}sessionToVoiceFree(i,e){return this.sessionVoiceFree({...this.session.params,...i},e)}sessionToVideoNoteCaption(i,e){return this.sessionVideoNoteCaption({...this.session.params,...i},e)}sessionToVideoNoteCaptionPayload(i,e){return this.sessionVideoNoteCaptionPayload({...this.session.params,...i},e)}sessionToVideoNoteCaptionCommand(i,e){return this.sessionVideoNoteCaptionCommand({...this.session.params,...i},e)}sessionToVideoNoteCaptionCommandPayload(i,e){return this.sessionVideoNoteCaptionCommandPayload({...this.session.params,...i},e)}sessionToVideoNoteFree(i,e){return this.sessionVideoNoteFree({...this.session.params,...i},e)}sessionToStickerFree(i,e){return this.sessionStickerFree({...this.session.params,...i},e)}sessionToLocationFree(i,e){return this.sessionLocationFree({...this.session.params,...i},e)}sessionToContactFree(i,e){return this.sessionContactFree({...this.session.params,...i},e)}buildIntent(i,e=!0){i||(i=e?this.data.callbackData():this.data.name);let t=e?":":" ";return i?.indexOf?.(t)!=-1?i?.split?.(t)?.[0]:i}buildSessionMethod(i,e){return`${i}-${e||this.data.name}`}buildSessionMethodCallback(i){return this.buildSessionMethod("1",i)}buildSessionMethodCallbackPayload(i){return this.buildSessionMethod("2",i)}buildSessionMethodText(i){return this.buildSessionMethod("3",i)}buildSessionMethodTextPayload(i){return this.buildSessionMethod("4",i)}buildSessionMethodTextCommand(i){return this.buildSessionMethod("5",i)}buildSessionMethodTextCommandPayload(i){return this.buildSessionMethod("6",i)}buildSessionMethodTextFree(i){return this.buildSessionMethod("7",i)}buildSessionMethodPhotoCaption(i){return this.buildSessionMethod("8",i)}buildSessionMethodPhotoCaptionPayload(i){return this.buildSessionMethod("9",i)}buildSessionMethodPhotoCaptionCommand(i){return this.buildSessionMethod("10",i)}buildSessionMethodPhotoCaptionCommandPayload(i){return this.buildSessionMethod("11",i)}buildSessionMethodPhotoFree(i){return this.buildSessionMethod("12",i)}buildSessionMethodVideoCaption(i){return this.buildSessionMethod("13",i)}buildSessionMethodVideoCaptionPayload(i){return this.buildSessionMethod("14",i)}buildSessionMethodVideoCaptionCommand(i){return this.buildSessionMethod("15",i)}buildSessionMethodVideoCaptionCommandPayload(i){return this.buildSessionMethod("16",i)}buildSessionMethodVideoFree(i){return this.buildSessionMethod("17",i)}buildSessionMethodAudioCaption(i){return this.buildSessionMethod("18",i)}buildSessionMethodAudioCaptionPayload(i){return this.buildSessionMethod("19",i)}buildSessionMethodAudioCaptionCommand(i){return this.buildSessionMethod("20",i)}buildSessionMethodAudioCaptionCommandPayload(i){return this.buildSessionMethod("21",i)}buildSessionMethodAudioFree(i){return this.buildSessionMethod("22",i)}buildSessionMethodDocumentCaption(i){return this.buildSessionMethod("23",i)}buildSessionMethodDocumentCaptionPayload(i){return this.buildSessionMethod("24",i)}buildSessionMethodDocumentCaptionCommand(i){return this.buildSessionMethod("25",i)}buildSessionMethodDocumentCaptionCommandPayload(i){return this.buildSessionMethod("26",i)}buildSessionMethodDocumentFree(i){return this.buildSessionMethod("27",i)}buildSessionMethodAnimationCaption(i){return this.buildSessionMethod("28",i)}buildSessionMethodAnimationCaptionPayload(i){return this.buildSessionMethod("29",i)}buildSessionMethodAnimationCaptionCommand(i){return this.buildSessionMethod("30",i)}buildSessionMethodAnimationCaptionCommandPayload(i){return this.buildSessionMethod("31",i)}buildSessionMethodAnimationFree(i){return this.buildSessionMethod("32",i)}buildSessionMethodVoiceCaption(i){return this.buildSessionMethod("33",i)}buildSessionMethodVoiceCaptionPayload(i){return this.buildSessionMethod("34",i)}buildSessionMethodVoiceCaptionCommand(i){return this.buildSessionMethod("35",i)}buildSessionMethodVoiceCaptionCommandPayload(i){return this.buildSessionMethod("36",i)}buildSessionMethodVoiceFree(i){return this.buildSessionMethod("37",i)}buildSessionMethodVideoNoteCaption(i){return this.buildSessionMethod("38",i)}buildSessionMethodVideoNoteCaptionPayload(i){return this.buildSessionMethod("39",i)}buildSessionMethodVideoNoteCaptionCommand(i){return this.buildSessionMethod("40",i)}buildSessionMethodVideoNoteCaptionCommandPayload(i){return this.buildSessionMethod("41",i)}buildSessionMethodVideoNoteFree(i){return this.buildSessionMethod("42",i)}buildSessionMethodStickerFree(i){return this.buildSessionMethod("43",i)}buildSessionMethodLocationFree(i){return this.buildSessionMethod("44",i)}buildSessionMethodContactFree(i){return this.buildSessionMethod("45",i)}};import{serve as J}from"bun";import{join as T,parse as q}from"path";import{LoggingPretty as X}from"logging-pretty";var y=class{static{p(this,"TemplateEngine")}static _escape(i){return i.replace(/\\/g,"\\\\").replace(/`/g,"\\`")}static _processVariables(i){return i.replace(/\{\{(\w+)\}\}/g,(e,t)=>`\${(data && data["${t}"]) ?? ""}`)}static _processBaseBlocks(i){let e=/<base\b[^>]*?(?:\sid=(["']?)([^"'\s>]+)\1)?[^>]*?>([\s\S]*?)<\/base>/g,t={};for(let s of i.matchAll(e)){let o=s[2]??"default",a=(s[3]??"").replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();t[o]=a}return t}static _processScriptBlocks(i){return i.replace(/<script\b[^>]*>([\s\S]*?)<\/script>/gi,(e,t)=>{let s=t.trim();return s?`\${(() => { if (!data) return ''; try { with(data) { ${s} } } catch(e) { return '' } })()}`:""})}static _processSpaceBlocks(i){return i.replace(/^[ \t]*<space\s*\/>[ \t]*$/gim,"")}static _processDivBlocks(i){return i.replace(/<div>([\s\S]*?)<\/div>/gi,(e,t)=>t.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,""))}static _processMediaBlocks(i){let e=/<media\s+([^>]+)>([\s\S]*?)<\/media>/gi,t={};for(let s of i.matchAll(e)){let o=s[1],n=s[2],a={},r=/(\w+)="([^"]*)"/g;for(let g of o.matchAll(r))a[g[1]]=g[2];if(!a.lang)continue;let d=a.lang,c=a.type,l=n.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim(),u={type:c};a.src&&(u.src=a.src),l&&c!=="video_note"&&c!=="sticker"&&(u.caption=l),c==="location"&&(a.latitude&&(u.latitude=a.latitude),a.longitude&&(u.longitude=a.longitude),l&&(u.caption=l)),c==="contact"&&(a.phone&&(u.phone=a.phone),a.first_name&&(u.first_name=a.first_name),a.last_name&&(u.last_name=a.last_name),a.vcard&&(u.vcard=a.vcard),l&&(u.caption=l)),t[d]=u}return t}static _processMessageBlocks(i){let e=/<message\s+lang="([^"]+)"\s*>([\s\S]*?)<\/message>/gi,t={};for(let[,s,o]of i.matchAll(e)){let n=o.replace(/^[\t ]+/gm,"").replace(/^\n+/,"").replace(/\n+$/,"").trim();t[s]=n}return t}static _processKeyboardBlocks(i){let e=/<keyboard\b[^>]*\blang="([^"]*)"[^>]*?(?:\stype="([^"]*)")?[^>]*>([\s\S]*?)<\/keyboard>/gi,t={};for(let[,s,o,n]of i.matchAll(e)){let a=o==="default"?"default":"inline",r=n.trim();t[s]||(t[s]={}),t[s][a]=r}return t}static _compileToFunction(i,e){let t;e?t=i.map(n=>`\`${n}\``).join(","):t=`\`${i}\``;let s=t;if(s=this._processScriptBlocks(this._processDivBlocks(this._processSpaceBlocks(s))),e){let o=`return [${s}]`;return new Function("data",o)}else{let o=`return ${s}`;return new Function("data",o)}}static compileMedia(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processMediaBlocks(o);t[s]={};for(let[a,r]of Object.entries(n))if(r.caption){let d=this._processVariables(this._processScriptBlocks(r.caption)),c=this._compileToFunction(d,!1);t[s][a]=l=>({...r,caption:c(l)})}else t[s][a]=()=>r}return t}static compileMessages(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processMessageBlocks(o);t[s]={};for(let[a,r]of Object.entries(n)){let d=this._processVariables(this._processScriptBlocks(r));t[s][a]=this._compileToFunction(d,!1)}}return t}static compileKeyboards(i){let e=this._processBaseBlocks(i),t={};for(let[s,o]of Object.entries(e)){let n=this._processKeyboardBlocks(o);t[s]={};for(let[a,r]of Object.entries(n)){t[s][a]={};for(let[d,c]of Object.entries(r)){let u=c.split(/(?<!\\),\s*/).map(g=>g.replace(/\\,/g,",").trim()).map(g=>this._processVariables(this._processScriptBlocks(g)));t[s][a][d]=this._compileToFunction(u,!0)}}}return t}};var f=class{static{p(this,"HelperPage")}static _getPage(i,e,t=!0){let o=Object.values(i)[0];if(o===void 0)throw new Error(`File ${e} must have export (not default) class page`);return t===!0&&(o.template=void 0),o}static getPageSync(i,e=!0){let t=w(i);return this._getPage(t,i,e)}static async getPage(i,e=!0){let t=await import(`${i}?t=${Date.now()}`);return this._getPage(t,i,e)}};import{readFile as O}from"fs/promises";import{watch as j}from"chokidar";import{basename as x,join as A,extname as Q}from"path";import{readdirSync as z,readFileSync as G,existsSync as K,statSync as H,writeFileSync as U}from"fs";var M=class{static{p(this,"TemplateManager")}_map=new Map;_engine=y;_watcher=[];_supportedExtensions=new Set([".html",".ts"]);_path;_forceLanguage;_isWatchEnabled;constructor(i){let{path:e,enableWatch:t=!1,forceLanguage:s}=i;this._path=e,this._forceLanguage=s,this._isWatchEnabled=t,this._validatePath(),this._initializeWatcher(),this._loadAllFiles()}_validatePath(){try{if(!this._path||!Array.isArray(this._path))throw new Error("Path must be set as string array");for(let i=0;i<this._path.length;i++){let e=this._path[i];if(!K(e))throw new Error(`Template base path is not exists: ${e}`);if(!H(e).isDirectory())throw new Error(`Template base path is not a directory: ${e}`)}return!0}catch(i){throw new Error(`Failed to validate Template base path: ${i}`)}}_initializeWatcher(){if(this._isWatchEnabled)throw new Error("Watcher already enabled");for(let i=0;i<this._path.length;i++){let e=this._path[i],t=j(e,{persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:100,pollInterval:50}});this._watcher[i]=t,t.on("change",this._handleFileChange.bind(this)),t.on("add",this._handleFileAdd.bind(this)),t.on("unlink",this._handleFileDelete.bind(this)),t.on("error",this._handleWatchError.bind(this))}}async _handleFileChange(i){let e=x(i);this._isValidFile(e)&&await this._loadFile(e,!1)}async _handleFileAdd(i){let e=x(i);this._isValidFile(e)&&await this._loadFile(e,!1)}_handleFileDelete(i){let e=x(i),t=this._getKey(e);this._map.has(t)&&this._map.delete(t)}_handleWatchError(i){}_loadAllFiles(){for(let i=0;i<this._path.length;i++){let e=this._path[i],s=z(e,"utf8").filter(o=>this._isValidFile(o));for(let o of s)this._loadFile(o,!0)}}async _loadFile(i,e=!0){for(let t=0;t<this._path.length;t++){let s=this._path[t],o=A(s,i),n=this._getExtension(i),a=this._getKey(i);if(n==".html"){let r=e?G(o,"utf8"):await O(o,"utf8");this._compile(a,r)}else if(n==".ts"){let r=await f.getPage(o,!1);r?.template!==void 0&&this._compile(a,r.template),r.template=void 0}else throw new Error(`File ${i} is not support`)}}_getExtension(i){return Q(i).toLowerCase()}_isValidFile(i){return this._supportedExtensions.has(this._getExtension(i))}_getKey(i){return i.replace(/\.[^/.]+$/,"")}_compile(i,e,t){let s=this._map.get(i),o=s||{},n=!1;(t===void 0||t?.media===!1||s?.media===void 0)&&(o.media=y.compileMedia(e),n=!0),(t===void 0||t?.message===!1||s?.message===void 0)&&(o.message=y.compileMessages(e),n=!0),(t===void 0||t?.keyboard===!1||s?.keyboard===void 0)&&(o.keyboard=y.compileKeyboards(e),n=!0),n&&this._map.set(i,o)}getMedia(i,e="default",t="en",s){let n=this._map.get(i)?.media?.[e]?.[this._forceLanguage||t];if(!n)return{};try{return n(s)}catch{return{}}}getMessage(i,e="default",t="en",s){let n=this._map.get(i)?.message?.[e]?.[this._forceLanguage||t];if(!n)return"";try{return n(s)}catch{return""}}getKeyboard(i,e="default",t="en",s="inline",o){let a=this._map.get(i)?.keyboard?.[e]?.[this._forceLanguage||t]?.[s];if(!a)return[];try{return a(o)}catch{return[]}}async write(i,e){if(this._getExtension(i)!=".html")return null;for(let t=0;t<this._path.length;t++){let s=A(this._path[t],i);if(K(s))return U(s,e,"utf8"),await this._loadFile(i,!1),!0}return null}getAvailable(){return Array.from(this._map.keys())}has(i){return this._map.has(i)}getCacheStats(){return{templateCount:this._map.size,totalSize:JSON.stringify(this._map.entries().toArray(),(i,e)=>typeof e=="function"?e.toString():e).length}}async destroy(){if(this._watcher)for(let i of this._watcher)await i.close();this._map.clear()}};import{existsSync as Y,readdirSync as Z}from"fs";import{Bot as ii,webhookCallback as ei}from"grammy";var I=class{static{p(this,"Gramstax")}templateManager;cacheKeyboard;cacheSession;pages;log;bot;constructor(i){if(!i?.token||i?.token?.length==0)throw new Error("Token is not valid or empty");this.log=i.log===null?void 0:i.log===void 0?new X:i.log,this.cacheSession=i.cacheSession||new S("memory","session"),this.cacheKeyboard=i.cacheKeyboard||new Map,this.templateManager=i.templateManager||new M({path:[T(process.cwd(),"src","pages")]}),this.bot=this.createBot(i.token),this.bot.catch(this.onCatch),this.bot.on("callback_query:data",this.onCallbackQueryData.bind(this)),this.bot.on("message:text",this.onMessageText.bind(this)),this.bot.on("message:photo",this.onMessagePhoto.bind(this)),this.bot.on("message:video",this.onMessageVideo.bind(this)),this.bot.on("message:audio",this.onMessageAudio.bind(this)),this.bot.on("message:document",this.onMessageDocument.bind(this)),this.bot.on("message:animation",this.onMessageAnimation.bind(this)),this.bot.on("message:voice",this.onMessageVoice.bind(this)),this.bot.on("message:video_note",this.onMessageVideoNote.bind(this)),this.bot.on("message:sticker",this.onMessageSticker.bind(this)),this.bot.on("message:location",this.onMessageLocation.bind(this)),this.bot.on("message:contact",this.onMessageContact.bind(this)),this.pages=this.pageLoads(),process.once("SIGINT",()=>this.bot.stop()),process.once("SIGTERM",()=>this.bot.stop()),i.deploy.startsWith("polling")?this.runPolling():i.deploy.startsWith("webhook")&&this.runWebhook(i.deploy.split("webhook:")[1])}onCatch(i){this.log?.error?.(`[Bot.catch]: ${String(i)}`)}onStart(i,e,t){let{username:s}=i;e=="polling"?this.log?.success?.(`Telegram bot polling started: ${s}`):this.log?.success?.(`Telegram bot webhook started: ${s} (${t})`)}createBot(i){return new ii(i)}createCtx(i){return new P({ct:i,cacheSession:this.cacheSession,cacheKeyboard:this.cacheKeyboard,templateManager:this.templateManager,temp:{session:{},data:{}}})}async runPolling(){this.bot.start({onStart:p(async i=>{this.onStart(i,"polling",null)},"onStart")})}async runWebhook(i){let e=ei(this.bot,"bun"),t="/telegram-webhook";J({fetch(a){let{pathname:r}=new URL(a.url);if(r===t)return a.method==="POST"?e(a):new Response("OK",{status:200});if(r==="/"&&a.method==="GET"){let d=new Date().toISOString();return new Response(JSON.stringify({timestamp:d}),{status:200,headers:{"Content-Type":"application/json"}})}return new Response("Not found",{status:404})}});let s=await this.bot.api.getWebhookInfo(),o=i.endsWith("/")?i.slice(0,-1)+t:i+t;s.url!=o&&await this.bot.api.setWebhook(o);let n=await this.bot.api.getMe();this.onStart(n,"webhook",o)}pageBuildData(i,e){i?.data===void 0&&(i.data=i.buildData()),i.data.name=q(e).name}pageSorts(i,e){let t=i.data.name,s=i.prototype,o="Payload",n="Command",a="Caption",r="Free",d=e.dynamic,c=e.dynamicSpesific,l=p(h=>h.charAt(0).toUpperCase()+h.slice(1),"upFirst"),u=p(h=>h.replace(o,"").replace(n,"").replace(a,"").replace(r,""),"getPureFuncName"),g=p((h,b)=>s[`buildSessionMethod${l(h)}`](b),"buildSessionMethod");e.all[t]=i;for(let h=0;h<e.lenListFuncStaticSession;h++){let b=e.listFuncStaticSession[h],D=e.static[b],R=e.staticIntent[b],k=e.staticSession[b],v={name:t,func:b},F=D||R;if(F!==void 0){let N=b.includes(n)?`/${t}`:t;F[s.buildIntent(N,b.startsWith("callback"))]=v}k!==void 0&&(k[g(b,t)]=v),b.toLowerCase().endsWith("free")&&c[u(b)].push(v)}s.free&&d.push(t)}pageLoads(){this.log?.info?.("Load pages..");let i=T(process.cwd(),"src","pages");if(!Y(i))throw new Error(`Directory ${i} is not found, please make it manually`);let e=Z(i),t={},s=t,o=t,n=[],a=["callback","text","textCommand","photoCaption","photoCaptionCommand","videoCaption","videoCaptionCommand","audioCaption","audioCaptionCommand","documentCaption","documentCaptionCommand","animationCaption","animationCaptionCommand","voiceCaption","voiceCaptionCommand","videoNoteCaption","videoNoteCaptionCommand"],r=["callbackPayload","textPayload","textCommandPayload","photoCaptionPayload","photoCaptionCommandPayload","videoCaptionPayload","videoCaptionCommandPayload","audioCaptionPayload","audioCaptionCommandPayload","documentCaptionPayload","documentCaptionCommandPayload","animationCaptionPayload","animationCaptionCommandPayload","voiceCaptionPayload","voiceCaptionCommandPayload","videoNoteCaptionPayload","videoNoteCaptionCommandPayload"],d=[...a,...r,"textFree","photoFree","videoFree","audioFree","documentFree","animationFree","voiceFree","videoNoteFree","stickerFree","locationFree","contactFree"],c=p((u,g)=>Object.fromEntries(u.map(h=>[h,{...g}])),"makeObject"),l={all:{},dynamic:[],dynamicSpesific:{text:n,photo:n,video:n,audio:n,document:n,animation:n,voice:n,videoNote:n,sticker:n,location:n,contact:n},static:c(a,t),staticIntent:c(r,s),staticSession:c(d,o),listFuncStatic:a,listFuncStaticIntent:r,listFuncStaticSession:d,lenListFuncStatic:a.length,lenListFuncStaticIntent:r.length,lenListFuncStaticSession:d.length};for(let u of e){let g=T(i,u),h=f.getPageSync(g,!0);this.pageBuildData(h,g),this.pageSorts(h,l)}return this.log?.info?.(`Finish load pages with total (${Object.keys(l.all).length})`),l}async pageRoutes(i,e){let t,s;if(t===void 0){let n=i.callbackData,a=i.msgText,r=i.msgCaption,d=this.pages.static;for(let c=0;c<this.pages.lenListFuncStatic;c++){let l=this.pages.listFuncStatic[c];if(s=d[l][n||a||r],s)break}s!==void 0&&(t=this.pages.all[s.name])}if(t===void 0){let n=await i.sessionGet();if(n){let a=n.method,r=this.pages.staticSession;for(let d=0;d<this.pages.lenListFuncStaticSession;d++){let c=this.pages.listFuncStaticSession[d];if(s=r[c][a],s)break}s!==void 0&&(t=this.pages.all[s.name])}}if(t===void 0){let n=i.callbackDataIntent,a=i.msgTextIntent,r=i.msgCaptionIntent,d=this.pages.staticIntent;for(let c=0;c<this.pages.lenListFuncStaticIntent;c++){let l=this.pages.listFuncStaticIntent[c];if(s=d[l][n||a||r],s)break}s!==void 0&&(t=this.pages.all[s.name])}if(t!==void 0&&s!==void 0)return await new t(i)[s.func]?.();let o=this.pages.dynamicSpesific[e]||[];for(let n=0;n<o.length;n++){let a=o[n];if(a===void 0)continue;let r=this.pages.all[a.func];if(r===void 0)continue;let c=await new r(i)[a.name]?.();if(c!==null)return c}for(let n=0;n<this.pages.dynamic.length;n++){let a=this.pages.dynamic[n];if(a===void 0)continue;let r=this.pages.all[a];if(r===void 0)continue;let c=await new r(i).free?.();if(c!==null)return c}return null}async hookBeforeRoute(i,e){return!0}async hookErrorPage(i,e,t,s){}async hookErrorInputNotFoundPage(i){}async onMessage(i,e){let t=this.createCtx(i);try{if(await this.hookBeforeRoute(t,e)===!1)return;await this.pageRoutes(t,e)===null&&await this.hookErrorInputNotFoundPage(t)}catch(s){await this.hookErrorPage(t,e,s,!1)}}async onCallbackQueryData(i){let e=this.createCtx(i);try{if(await e.callbackQueryAnswer(),await this.hookBeforeRoute(e,"onCallbackQueryData")===!1)return;await this.pageRoutes(e,"callback")}catch(t){await this.hookErrorPage(e,"onCallbackQueryData",t,!0)}}async onMessageText(i){await this.onMessage(i,"onMessageText")}async onMessagePhoto(i){await this.onMessage(i,"onMessagePhoto")}async onMessageVideo(i){await this.onMessage(i,"onMessageVideo")}async onMessageAudio(i){await this.onMessage(i,"onMessageAudio")}async onMessageDocument(i){await this.onMessage(i,"onMessageDocument")}async onMessageAnimation(i){await this.onMessage(i,"onMessageAnimation")}async onMessageVoice(i){await this.onMessage(i,"onMessageVoice")}async onMessageVideoNote(i){await this.onMessage(i,"onMessageVideoNote")}async onMessageSticker(i){await this.onMessage(i,"onMessageSticker")}async onMessageLocation(i){await this.onMessage(i,"onMessageLocation")}async onMessageContact(i){await this.onMessage(i,"onMessageContact")}};export{C as BaseGeneral,S as CacheExternal,P as Ctx,I as Gramstax,y as TemplateEngine,M as TemplateManager};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gramstax",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "private": false,
5
5
  "description": "A powerful Telegram bot framework with page-based routing and template system",
6
6
  "keywords": [
@@ -13,7 +13,7 @@
13
13
  ],
14
14
  "repository": {
15
15
  "type": "git",
16
- "url": "https://github.com/gramstax/gramstax"
16
+ "url": "git+https://github.com/gramstax/gramstax.git"
17
17
  },
18
18
  "bugs": {
19
19
  "url": "https://github.com/gramstax/gramstax/issues"