telemeister 0.1.21 → 0.2.8

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.
Files changed (130) hide show
  1. package/README.md +55 -13
  2. package/bin/telemeister-cli.js +1220 -0
  3. package/bin/telemeister.js +2 -1
  4. package/dist/bot/index.d.ts +10 -0
  5. package/dist/bot/index.d.ts.map +1 -0
  6. package/dist/bot/index.js +9 -0
  7. package/dist/bot/index.js.map +1 -0
  8. package/dist/bot/polling.d.ts +20 -0
  9. package/dist/bot/polling.d.ts.map +1 -0
  10. package/dist/bot/polling.js +129 -0
  11. package/dist/bot/polling.js.map +1 -0
  12. package/dist/bot/session.d.ts +54 -0
  13. package/dist/bot/session.d.ts.map +1 -0
  14. package/dist/bot/session.js +89 -0
  15. package/dist/bot/session.js.map +1 -0
  16. package/dist/bot/webhook.d.ts +36 -0
  17. package/dist/bot/webhook.d.ts.map +1 -0
  18. package/dist/bot/webhook.js +213 -0
  19. package/dist/bot/webhook.js.map +1 -0
  20. package/dist/bot-state-types.d.ts.map +1 -0
  21. package/dist/bot-state-types.js +3 -0
  22. package/dist/bot-state-types.js.map +1 -0
  23. package/dist/cli/create-bot.d.ts.map +1 -1
  24. package/dist/cli/create-bot.js +32 -10
  25. package/dist/cli/create-bot.js.map +1 -1
  26. package/dist/cli/state-manager.d.ts.map +1 -1
  27. package/dist/cli/state-manager.js +14 -1
  28. package/dist/cli/state-manager.js.map +1 -1
  29. package/dist/core/app-states.d.ts +8 -0
  30. package/dist/core/app-states.d.ts.map +1 -0
  31. package/dist/core/app-states.js +8 -0
  32. package/dist/core/app-states.js.map +1 -0
  33. package/dist/core/bot/polling.d.ts.map +1 -1
  34. package/dist/core/bot/polling.js +4 -7
  35. package/dist/core/bot/polling.js.map +1 -1
  36. package/dist/core/bot/webhook.d.ts.map +1 -1
  37. package/dist/core/bot/webhook.js +28 -9
  38. package/dist/core/bot/webhook.js.map +1 -1
  39. package/dist/core/builder.d.ts +1 -1
  40. package/dist/core/builder.d.ts.map +1 -1
  41. package/dist/core/builder.js +2 -2
  42. package/dist/core/builder.js.map +1 -1
  43. package/dist/core/index.d.ts +1 -0
  44. package/dist/core/index.d.ts.map +1 -1
  45. package/dist/core/index.js.map +1 -1
  46. package/dist/core/types.d.ts +3 -2
  47. package/dist/core/types.d.ts.map +1 -1
  48. package/dist/core/types.js.map +1 -1
  49. package/dist/database.d.ts +43 -0
  50. package/dist/database.d.ts.map +1 -0
  51. package/dist/database.js +127 -0
  52. package/dist/database.js.map +1 -0
  53. package/dist/generated/prisma/browser.d.ts +15 -0
  54. package/dist/generated/prisma/browser.d.ts.map +1 -0
  55. package/dist/generated/prisma/browser.js +18 -0
  56. package/dist/generated/prisma/browser.js.map +1 -0
  57. package/dist/generated/prisma/client.d.ts +32 -0
  58. package/dist/generated/prisma/client.d.ts.map +1 -0
  59. package/dist/generated/prisma/client.js +33 -0
  60. package/dist/generated/prisma/client.js.map +1 -0
  61. package/dist/generated/prisma/commonInputTypes.d.ts +166 -0
  62. package/dist/generated/prisma/commonInputTypes.d.ts.map +1 -0
  63. package/dist/generated/prisma/commonInputTypes.js +11 -0
  64. package/dist/generated/prisma/commonInputTypes.js.map +1 -0
  65. package/dist/generated/prisma/enums.d.ts +2 -0
  66. package/dist/generated/prisma/enums.d.ts.map +1 -0
  67. package/dist/generated/prisma/enums.js +11 -0
  68. package/dist/generated/prisma/enums.js.map +1 -0
  69. package/dist/generated/prisma/internal/class.d.ts +138 -0
  70. package/dist/generated/prisma/internal/class.d.ts.map +1 -0
  71. package/dist/generated/prisma/internal/class.js +50 -0
  72. package/dist/generated/prisma/internal/class.js.map +1 -0
  73. package/dist/generated/prisma/internal/prismaNamespace.d.ts +591 -0
  74. package/dist/generated/prisma/internal/prismaNamespace.d.ts.map +1 -0
  75. package/dist/generated/prisma/internal/prismaNamespace.js +96 -0
  76. package/dist/generated/prisma/internal/prismaNamespace.js.map +1 -0
  77. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts +56 -0
  78. package/dist/generated/prisma/internal/prismaNamespaceBrowser.d.ts.map +1 -0
  79. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js +67 -0
  80. package/dist/generated/prisma/internal/prismaNamespaceBrowser.js.map +1 -0
  81. package/dist/generated/prisma/models/User.d.ts +1169 -0
  82. package/dist/generated/prisma/models/User.d.ts.map +1 -0
  83. package/dist/generated/prisma/models/User.js +2 -0
  84. package/dist/generated/prisma/models/User.js.map +1 -0
  85. package/dist/generated/prisma/models/UserInfo.d.ts +1101 -0
  86. package/dist/generated/prisma/models/UserInfo.d.ts.map +1 -0
  87. package/dist/generated/prisma/models/UserInfo.js +2 -0
  88. package/dist/generated/prisma/models/UserInfo.js.map +1 -0
  89. package/dist/generated/prisma/models.d.ts +4 -0
  90. package/dist/generated/prisma/models.d.ts.map +1 -0
  91. package/dist/generated/prisma/models.js +2 -0
  92. package/dist/generated/prisma/models.js.map +1 -0
  93. package/dist/handlers/idle/index.d.ts +2 -0
  94. package/dist/handlers/idle/index.d.ts.map +1 -0
  95. package/dist/handlers/idle/index.js +22 -0
  96. package/dist/handlers/idle/index.js.map +1 -0
  97. package/dist/handlers/index.d.ts +12 -0
  98. package/dist/handlers/index.d.ts.map +1 -0
  99. package/dist/handlers/index.js +14 -0
  100. package/dist/handlers/index.js.map +1 -0
  101. package/dist/handlers/menu/index.d.ts +2 -0
  102. package/dist/handlers/menu/index.d.ts.map +1 -0
  103. package/dist/handlers/menu/index.js +35 -0
  104. package/dist/handlers/menu/index.js.map +1 -0
  105. package/dist/handlers/menu.d.ts +2 -0
  106. package/dist/handlers/menu.d.ts.map +1 -0
  107. package/dist/handlers/menu.js +37 -0
  108. package/dist/handlers/menu.js.map +1 -0
  109. package/dist/handlers/welcome/index.d.ts +2 -0
  110. package/dist/handlers/welcome/index.d.ts.map +1 -0
  111. package/dist/handlers/welcome/index.js +22 -0
  112. package/dist/handlers/welcome/index.js.map +1 -0
  113. package/dist/handlers/welcome.d.ts +2 -0
  114. package/dist/handlers/welcome.d.ts.map +1 -0
  115. package/dist/handlers/welcome.js +30 -0
  116. package/dist/handlers/welcome.js.map +1 -0
  117. package/dist/index.d.ts +3 -0
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +39 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/templates/README.md.ejs +6 -5
  122. package/dist/templates/handler.ts.ejs +71 -8
  123. package/dist/templates/package.json.ejs +7 -0
  124. package/dist/templates/templates/README.md.ejs +12 -11
  125. package/dist/templates/templates/handler.ts.ejs +70 -8
  126. package/dist/templates/templates/package.json.ejs +7 -0
  127. package/package.json +17 -38
  128. package/src/templates/README.md.ejs +12 -11
  129. package/src/templates/handler.ts.ejs +70 -8
  130. package/src/templates/package.json.ejs +7 -0
package/README.md CHANGED
@@ -218,13 +218,21 @@ import type { MenuTransitions } from './bot-state-types.js';
218
218
  appBuilder
219
219
  .forState('menu')
220
220
  .onEnter(async (context: AppContext): MenuTransitions => {
221
- await context.send('Welcome to menu!');
221
+ await context.ctx.reply('Welcome to menu!');
222
222
  // Can only return 'idle', 'welcome', or void
223
223
  })
224
- .onResponse(async (context: AppContext, response): MenuTransitions => {
225
- if (response === 'back') return 'welcome'; // ✅ Valid
226
- if (response === 'exit') return 'idle'; // ✅ Valid
227
- return 'invalid'; // Type error - not in transitions
224
+ .onResponse(async (context: AppContext): MenuTransitions => {
225
+ // Handle text messages
226
+ if (context.ctx.message?.text === 'back') return 'welcome'; // ✅ Valid
227
+ if (context.ctx.message?.text === 'exit') return 'idle'; // Valid
228
+
229
+ // Handle inline button callbacks
230
+ if (context.ctx.callbackQuery?.data === 'go_back') {
231
+ await context.ctx.answerCallbackQuery();
232
+ return 'welcome';
233
+ }
234
+
235
+ // return 'invalid'; // ❌ Type error - not in transitions
228
236
  });
229
237
  ```
230
238
 
@@ -238,8 +246,8 @@ interface BotHandlerContext<TState> {
238
246
  chatId: number;
239
247
  currentState: TState;
240
248
 
241
- // Messaging
242
- send: (text: string) => Promise<unknown>;
249
+ // Grammy context - full Telegram API access
250
+ ctx: Context; // See https://grammy.dev/guide/context
243
251
 
244
252
  // Data persistence (per-user)
245
253
  setData: <T>(key: string, value: T) => void;
@@ -250,21 +258,55 @@ interface BotHandlerContext<TState> {
250
258
  }
251
259
  ```
252
260
 
261
+ The `ctx` property provides full access to Grammy's Context API:
262
+ - `ctx.reply()`, `ctx.replyWithPhoto()`, `ctx.replyWithPoll()`, etc.
263
+ - `ctx.message?.text` - Text messages
264
+ - `ctx.callbackQuery?.data` - Inline button callbacks
265
+ - `ctx.message?.photo` - Photo messages
266
+ - `ctx.pollAnswer` - Poll responses
267
+ - See [Grammy docs](https://grammy.dev/guide/context) for full API
268
+
253
269
  ### Handler Types
254
270
 
255
271
  ```typescript
256
272
  // Called when entering a state
257
273
  .onEnter(async (context) => {
258
- await context.send("Welcome!");
274
+ // Access Grammy via context.ctx
275
+ await context.ctx.reply("Welcome!", {
276
+ reply_markup: {
277
+ inline_keyboard: [[{ text: 'Click', callback_data: 'click' }]]
278
+ }
279
+ });
259
280
  // Optionally return a state for immediate transition
260
281
  return "anotherState";
261
282
  })
262
283
 
263
- // Called when user sends a message
264
- .onResponse(async (context, response) => {
265
- // Return state name to transition, or void/undefined to stay
266
- if (response === "yes") return "confirmed";
267
- return "cancelled";
284
+ // Called when user sends any update (message, callback, poll, etc.)
285
+ .onResponse(async (context) => {
286
+ // Text message
287
+ if (context.ctx.message?.text === "yes") {
288
+ await context.ctx.reply("Confirmed!");
289
+ return "confirmed";
290
+ }
291
+
292
+ // Inline button callback
293
+ if (context.ctx.callbackQuery?.data === "click") {
294
+ await context.ctx.answerCallbackQuery();
295
+ await context.ctx.reply("Button clicked!");
296
+ return "clicked";
297
+ }
298
+
299
+ // Photo message
300
+ if (context.ctx.message?.photo) {
301
+ await context.ctx.replyWithPhoto(context.ctx.message.photo[0].file_id);
302
+ }
303
+
304
+ // Poll response
305
+ if (context.ctx.pollAnswer) {
306
+ // Handle poll answer
307
+ }
308
+
309
+ // Return void to stay in current state
268
310
  })
269
311
  ```
270
312