telemeister 0.3.6 → 0.3.10
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.
- package/README.md +23 -3
- package/bin/telemeister-cli.js +38 -10
- package/dist/cli/cli.d.ts +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +25 -4
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/create-bot.d.ts +1 -1
- package/dist/cli/create-bot.d.ts.map +1 -1
- package/dist/cli/create-bot.js +17 -7
- package/dist/cli/create-bot.js.map +1 -1
- package/dist/core/bot/polling.d.ts.map +1 -1
- package/dist/core/bot/polling.js +10 -11
- package/dist/core/bot/polling.js.map +1 -1
- package/dist/core/bot/session.d.ts.map +1 -1
- package/dist/core/bot/session.js +0 -8
- package/dist/core/bot/session.js.map +1 -1
- package/dist/core/bot/webhook.d.ts.map +1 -1
- package/dist/core/bot/webhook.js +12 -12
- package/dist/core/bot/webhook.js.map +1 -1
- package/dist/core/builder.d.ts +8 -4
- package/dist/core/builder.d.ts.map +1 -1
- package/dist/core/builder.js +22 -3
- package/dist/core/builder.js.map +1 -1
- package/dist/core/types.d.ts +7 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/templates/database.ts.ejs +28 -40
- package/dist/templates/env.example.ejs +10 -1
- package/dist/templates/package.json.ejs +6 -1
- package/dist/templates/prisma-schema.prisma.ejs +1 -1
- package/package.json +14 -12
- package/src/templates/database.ts.ejs +28 -40
- package/src/templates/env.example.ejs +10 -1
- package/src/templates/package.json.ejs +6 -1
- package/src/templates/prisma-schema.prisma.ejs +1 -1
package/README.md
CHANGED
|
@@ -282,10 +282,30 @@ The `ctx` property provides full access to Grammy's Context API:
|
|
|
282
282
|
inline_keyboard: [[{ text: 'Click', callback_data: 'click' }]]
|
|
283
283
|
}
|
|
284
284
|
});
|
|
285
|
+
|
|
286
|
+
// Reply with Markdown formatting
|
|
287
|
+
await context.reply("*Bold*, _italic_, `code`, [link](https://example.com)", {
|
|
288
|
+
parse_mode: "Markdown",
|
|
289
|
+
});
|
|
290
|
+
|
|
285
291
|
// Optionally return a state for immediate transition
|
|
286
292
|
return "anotherState";
|
|
287
293
|
})
|
|
288
294
|
|
|
295
|
+
// Called when user sends a bot command (e.g. /start, /help)
|
|
296
|
+
.onCommand("start", async (context) => {
|
|
297
|
+
await context.reply("*Welcome!* Use /help to see available commands.", {
|
|
298
|
+
parse_mode: "Markdown",
|
|
299
|
+
});
|
|
300
|
+
return "welcome";
|
|
301
|
+
})
|
|
302
|
+
.onCommand("help", async (context) => {
|
|
303
|
+
await context.reply(
|
|
304
|
+
"*Available commands:*\n/start – Start the bot\n/help – Show this message",
|
|
305
|
+
{ parse_mode: "Markdown" }
|
|
306
|
+
);
|
|
307
|
+
})
|
|
308
|
+
|
|
289
309
|
// Called when user sends any update (message, callback, poll, etc.)
|
|
290
310
|
.onResponse(async (context) => {
|
|
291
311
|
// Text message
|
|
@@ -300,18 +320,18 @@ The `ctx` property provides full access to Grammy's Context API:
|
|
|
300
320
|
await context.reply("Button clicked!");
|
|
301
321
|
return "clicked";
|
|
302
322
|
}
|
|
303
|
-
|
|
323
|
+
|
|
304
324
|
// Photo message
|
|
305
325
|
if (context.ctx.message?.photo) {
|
|
306
326
|
await context.ctx.replyWithPhoto(context.ctx.message.photo[0].file_id);
|
|
307
327
|
}
|
|
308
|
-
|
|
328
|
+
|
|
309
329
|
// Poll response
|
|
310
330
|
if (context.ctx.pollAnswer) {
|
|
311
331
|
const optionIds = context.ctx.pollAnswer.option_ids;
|
|
312
332
|
await context.reply(`You selected options: ${optionIds.join(', ')}`);
|
|
313
333
|
}
|
|
314
|
-
|
|
334
|
+
|
|
315
335
|
// Return void to stay in current state
|
|
316
336
|
})
|
|
317
337
|
```
|
package/bin/telemeister-cli.js
CHANGED
|
@@ -1087,10 +1087,15 @@ function renderTemplate(templateName, data = {}) {
|
|
|
1087
1087
|
function getPackageManager() {
|
|
1088
1088
|
return "npm";
|
|
1089
1089
|
}
|
|
1090
|
-
async function createBot(botName) {
|
|
1090
|
+
async function createBot(botName, database) {
|
|
1091
1091
|
if (!botName) {
|
|
1092
1092
|
console.error("\u274C Error: Bot name is required");
|
|
1093
|
-
console.error("Usage: telemeister create-bot <bot-name>");
|
|
1093
|
+
console.error("Usage: telemeister create-bot <bot-name> --with-database=sqlite|mysql");
|
|
1094
|
+
process.exit(1);
|
|
1095
|
+
}
|
|
1096
|
+
if (!database) {
|
|
1097
|
+
console.error("\u274C Error: --with-database flag is required");
|
|
1098
|
+
console.error("Usage: telemeister create-bot <bot-name> --with-database=sqlite|mysql");
|
|
1094
1099
|
process.exit(1);
|
|
1095
1100
|
}
|
|
1096
1101
|
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(botName)) {
|
|
@@ -1112,15 +1117,19 @@ async function createBot(botName) {
|
|
|
1112
1117
|
fs3.mkdirSync(path3.join(targetDir, "prisma"), { recursive: true });
|
|
1113
1118
|
fs3.writeFileSync(path3.join(targetDir, ".gitignore"), loadTemplate("gitignore.ejs"));
|
|
1114
1119
|
fs3.writeFileSync(path3.join(targetDir, "tsconfig.json"), loadTemplate("tsconfig.json.ejs"));
|
|
1115
|
-
fs3.writeFileSync(path3.join(targetDir, ".env.example"),
|
|
1120
|
+
fs3.writeFileSync(path3.join(targetDir, ".env.example"), renderTemplate("env.example.ejs", { database }));
|
|
1116
1121
|
fs3.writeFileSync(path3.join(targetDir, "bot.json"), loadTemplate("bot.json.ejs"));
|
|
1117
1122
|
fs3.writeFileSync(path3.join(targetDir, "src", "index.ts"), loadTemplate("index.ts.ejs"));
|
|
1118
|
-
fs3.writeFileSync(path3.join(targetDir, "prisma", "schema.prisma"),
|
|
1123
|
+
fs3.writeFileSync(path3.join(targetDir, "prisma", "schema.prisma"), renderTemplate("prisma-schema.prisma.ejs", { database }));
|
|
1119
1124
|
fs3.writeFileSync(path3.join(targetDir, "prisma.config.ts"), loadTemplate("prisma.config.ts.ejs"));
|
|
1120
1125
|
fs3.mkdirSync(path3.join(targetDir, "src", "lib"), { recursive: true });
|
|
1121
|
-
fs3.writeFileSync(path3.join(targetDir, "src", "lib", "database.ts"),
|
|
1126
|
+
fs3.writeFileSync(path3.join(targetDir, "src", "lib", "database.ts"), renderTemplate("database.ts.ejs", { database }));
|
|
1122
1127
|
fs3.writeFileSync(path3.join(targetDir, "README.md"), renderTemplate("README.md.ejs", { botName }));
|
|
1123
|
-
fs3.writeFileSync(path3.join(targetDir, "package.json"), renderTemplate("package.json.ejs", {
|
|
1128
|
+
fs3.writeFileSync(path3.join(targetDir, "package.json"), renderTemplate("package.json.ejs", {
|
|
1129
|
+
botName,
|
|
1130
|
+
telemeisterVersion: getPackageVersion(),
|
|
1131
|
+
database
|
|
1132
|
+
}));
|
|
1124
1133
|
process.chdir(targetDir);
|
|
1125
1134
|
await stateSync();
|
|
1126
1135
|
console.log("\n\u{1F4E6} Installing dependencies...");
|
|
@@ -1132,7 +1141,7 @@ async function createBot(botName) {
|
|
|
1132
1141
|
`);
|
|
1133
1142
|
process.exit(1);
|
|
1134
1143
|
}
|
|
1135
|
-
const tempDbUrl = "file:./dev.db";
|
|
1144
|
+
const tempDbUrl = database === "mysql" ? "mysql://root:root@localhost:3306/temp_db" : "file:./dev.db";
|
|
1136
1145
|
console.log("\u{1F5C4}\uFE0F Generating Prisma client...");
|
|
1137
1146
|
try {
|
|
1138
1147
|
execSync(`${pmRun} db:generate`, {
|
|
@@ -1169,11 +1178,30 @@ async function createBot(botName) {
|
|
|
1169
1178
|
var command = process.argv[2];
|
|
1170
1179
|
var arg1 = process.argv[3];
|
|
1171
1180
|
var arg2 = process.argv[4];
|
|
1181
|
+
function parseCreateBotArgs() {
|
|
1182
|
+
const botName = arg1;
|
|
1183
|
+
let database;
|
|
1184
|
+
for (let i = 3; i < process.argv.length; i++) {
|
|
1185
|
+
const arg = process.argv[i];
|
|
1186
|
+
if (arg.startsWith("--with-database=")) {
|
|
1187
|
+
const value = arg.split("=")[1];
|
|
1188
|
+
if (value === "mysql" || value === "sqlite") {
|
|
1189
|
+
database = value;
|
|
1190
|
+
} else {
|
|
1191
|
+
console.error(`\u274C Error: Invalid database "${value}". Must be "mysql" or "sqlite"`);
|
|
1192
|
+
process.exit(1);
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
return { botName, database };
|
|
1197
|
+
}
|
|
1172
1198
|
async function runCLI() {
|
|
1173
1199
|
switch (command) {
|
|
1174
|
-
case "create-bot":
|
|
1175
|
-
|
|
1200
|
+
case "create-bot": {
|
|
1201
|
+
const { botName, database } = parseCreateBotArgs();
|
|
1202
|
+
await createBot(botName, database);
|
|
1176
1203
|
break;
|
|
1204
|
+
}
|
|
1177
1205
|
case "state:add":
|
|
1178
1206
|
await stateAdd(arg1);
|
|
1179
1207
|
break;
|
|
@@ -1193,7 +1221,7 @@ async function runCLI() {
|
|
|
1193
1221
|
console.error("\u274C Unknown command:", command);
|
|
1194
1222
|
console.error("");
|
|
1195
1223
|
console.error("Available commands:");
|
|
1196
|
-
console.error(" create-bot <name>
|
|
1224
|
+
console.error(" create-bot <name> --with-database=sqlite|mysql - Create a new bot project");
|
|
1197
1225
|
console.error(" state:add <name> - Add a new state + create handler");
|
|
1198
1226
|
console.error(" state:delete <name> - Delete a state (with safety checks)");
|
|
1199
1227
|
console.error(" state:sync - Sync types and create missing handlers");
|
package/dist/cli/cli.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Telemeister CLI
|
|
4
4
|
*
|
|
5
5
|
* Available commands:
|
|
6
|
-
* create-bot <name>
|
|
6
|
+
* create-bot <name> --with-database=sqlite|mysql - Create a new bot project
|
|
7
7
|
* state:add <name> - Add a new state + create handler
|
|
8
8
|
* state:delete <name> - Delete a state (with safety checks)
|
|
9
9
|
* state:sync - Sync types and create missing handlers
|
package/dist/cli/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAuCH,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAoC5C"}
|
package/dist/cli/cli.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Telemeister CLI
|
|
4
4
|
*
|
|
5
5
|
* Available commands:
|
|
6
|
-
* create-bot <name>
|
|
6
|
+
* create-bot <name> --with-database=sqlite|mysql - Create a new bot project
|
|
7
7
|
* state:add <name> - Add a new state + create handler
|
|
8
8
|
* state:delete <name> - Delete a state (with safety checks)
|
|
9
9
|
* state:sync - Sync types and create missing handlers
|
|
@@ -15,11 +15,32 @@ import { createBot } from './create-bot.js';
|
|
|
15
15
|
const command = process.argv[2];
|
|
16
16
|
const arg1 = process.argv[3];
|
|
17
17
|
const arg2 = process.argv[4];
|
|
18
|
+
function parseCreateBotArgs() {
|
|
19
|
+
const botName = arg1;
|
|
20
|
+
let database;
|
|
21
|
+
// Check for --with-database flag in any position after bot name
|
|
22
|
+
for (let i = 3; i < process.argv.length; i++) {
|
|
23
|
+
const arg = process.argv[i];
|
|
24
|
+
if (arg.startsWith('--with-database=')) {
|
|
25
|
+
const value = arg.split('=')[1];
|
|
26
|
+
if (value === 'mysql' || value === 'sqlite') {
|
|
27
|
+
database = value;
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error(`❌ Error: Invalid database "${value}". Must be "mysql" or "sqlite"`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { botName, database };
|
|
36
|
+
}
|
|
18
37
|
export async function runCLI() {
|
|
19
38
|
switch (command) {
|
|
20
|
-
case 'create-bot':
|
|
21
|
-
|
|
39
|
+
case 'create-bot': {
|
|
40
|
+
const { botName, database } = parseCreateBotArgs();
|
|
41
|
+
await createBot(botName, database);
|
|
22
42
|
break;
|
|
43
|
+
}
|
|
23
44
|
case 'state:add':
|
|
24
45
|
await stateAdd(arg1);
|
|
25
46
|
break;
|
|
@@ -39,7 +60,7 @@ export async function runCLI() {
|
|
|
39
60
|
console.error('❌ Unknown command:', command);
|
|
40
61
|
console.error('');
|
|
41
62
|
console.error('Available commands:');
|
|
42
|
-
console.error(' create-bot <name>
|
|
63
|
+
console.error(' create-bot <name> --with-database=sqlite|mysql - Create a new bot project');
|
|
43
64
|
console.error(' state:add <name> - Add a new state + create handler');
|
|
44
65
|
console.error(' state:delete <name> - Delete a state (with safety checks)');
|
|
45
66
|
console.error(' state:sync - Sync types and create missing handlers');
|
package/dist/cli/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,aAAa,EACb,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAChC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAE7B,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,YAAY;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/create-bot.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Create Bot Project scaffolding
|
|
3
3
|
*/
|
|
4
|
-
export declare function createBot(botName: string | undefined): Promise<void>;
|
|
4
|
+
export declare function createBot(botName: string | undefined, database: 'mysql' | 'sqlite' | undefined): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=create-bot.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-bot.d.ts","sourceRoot":"","sources":["../../src/cli/create-bot.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,wBAAsB,SAAS,
|
|
1
|
+
{"version":3,"file":"create-bot.d.ts","sourceRoot":"","sources":["../../src/cli/create-bot.ts"],"names":[],"mappings":"AAAA;;GAEG;AA2CH,wBAAsB,SAAS,CAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,GACvC,OAAO,CAAC,IAAI,CAAC,CA4Hf"}
|
package/dist/cli/create-bot.js
CHANGED
|
@@ -35,10 +35,15 @@ function getPackageManager() {
|
|
|
35
35
|
// Always use npm for native dependency compilation (better-sqlite3)
|
|
36
36
|
return 'npm';
|
|
37
37
|
}
|
|
38
|
-
export async function createBot(botName) {
|
|
38
|
+
export async function createBot(botName, database) {
|
|
39
39
|
if (!botName) {
|
|
40
40
|
console.error('❌ Error: Bot name is required');
|
|
41
|
-
console.error('Usage: telemeister create-bot <bot-name>');
|
|
41
|
+
console.error('Usage: telemeister create-bot <bot-name> --with-database=sqlite|mysql');
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
if (!database) {
|
|
45
|
+
console.error('❌ Error: --with-database flag is required');
|
|
46
|
+
console.error('Usage: telemeister create-bot <bot-name> --with-database=sqlite|mysql');
|
|
42
47
|
process.exit(1);
|
|
43
48
|
}
|
|
44
49
|
if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(botName)) {
|
|
@@ -61,18 +66,22 @@ export async function createBot(botName) {
|
|
|
61
66
|
// Create files from templates
|
|
62
67
|
fs.writeFileSync(path.join(targetDir, '.gitignore'), loadTemplate('gitignore.ejs'));
|
|
63
68
|
fs.writeFileSync(path.join(targetDir, 'tsconfig.json'), loadTemplate('tsconfig.json.ejs'));
|
|
64
|
-
fs.writeFileSync(path.join(targetDir, '.env.example'),
|
|
69
|
+
fs.writeFileSync(path.join(targetDir, '.env.example'), renderTemplate('env.example.ejs', { database }));
|
|
65
70
|
fs.writeFileSync(path.join(targetDir, 'bot.json'), loadTemplate('bot.json.ejs'));
|
|
66
71
|
fs.writeFileSync(path.join(targetDir, 'src', 'index.ts'), loadTemplate('index.ts.ejs'));
|
|
67
|
-
fs.writeFileSync(path.join(targetDir, 'prisma', 'schema.prisma'),
|
|
72
|
+
fs.writeFileSync(path.join(targetDir, 'prisma', 'schema.prisma'), renderTemplate('prisma-schema.prisma.ejs', { database }));
|
|
68
73
|
fs.writeFileSync(path.join(targetDir, 'prisma.config.ts'), loadTemplate('prisma.config.ts.ejs'));
|
|
69
74
|
// Create database file
|
|
70
75
|
fs.mkdirSync(path.join(targetDir, 'src', 'lib'), { recursive: true });
|
|
71
|
-
fs.writeFileSync(path.join(targetDir, 'src', 'lib', 'database.ts'),
|
|
76
|
+
fs.writeFileSync(path.join(targetDir, 'src', 'lib', 'database.ts'), renderTemplate('database.ts.ejs', { database }));
|
|
72
77
|
// Note: Bot runtime files (session.ts, polling.ts, webhook.ts) are now provided by the framework
|
|
73
78
|
// in 'telemeister/core/bot' and don't need to be generated
|
|
74
79
|
fs.writeFileSync(path.join(targetDir, 'README.md'), renderTemplate('README.md.ejs', { botName }));
|
|
75
|
-
fs.writeFileSync(path.join(targetDir, 'package.json'), renderTemplate('package.json.ejs', {
|
|
80
|
+
fs.writeFileSync(path.join(targetDir, 'package.json'), renderTemplate('package.json.ejs', {
|
|
81
|
+
botName,
|
|
82
|
+
telemeisterVersion: getPackageVersion(),
|
|
83
|
+
database,
|
|
84
|
+
}));
|
|
76
85
|
// Sync handlers and types from bot.json
|
|
77
86
|
process.chdir(targetDir);
|
|
78
87
|
await stateSync();
|
|
@@ -86,7 +95,8 @@ export async function createBot(botName) {
|
|
|
86
95
|
console.error(`❌ Failed to install dependencies. Please run "${pmInstall}" manually.\n`);
|
|
87
96
|
process.exit(1);
|
|
88
97
|
}
|
|
89
|
-
|
|
98
|
+
// Use appropriate temp database URL based on database type
|
|
99
|
+
const tempDbUrl = database === 'mysql' ? 'mysql://root:root@localhost:3306/temp_db' : 'file:./dev.db';
|
|
90
100
|
console.log('🗄️ Generating Prisma client...');
|
|
91
101
|
try {
|
|
92
102
|
execSync(`${pmRun} db:generate`, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-bot.js","sourceRoot":"","sources":["../../src/cli/create-bot.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,SAAS,cAAc;IACrB,MAAM,UAAU,GAAG,SAAS,CAAC;IAC7B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC3C,IAAI,QAAQ,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1E,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,YAAoB;IACxC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC/E,OAAO,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB,EAAE,OAAgC,EAAE;IAC9E,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,iBAAiB;IACxB,oEAAoE;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,
|
|
1
|
+
{"version":3,"file":"create-bot.js","sourceRoot":"","sources":["../../src/cli/create-bot.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../../src/core/bot/polling.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,UAAU,UAAW,SAAQ,OAAO;IAClC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../../src/core/bot/polling.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEpD,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,UAAU,UAAW,SAAQ,OAAO;IAClC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,UAAU,CAAC,CAoGhE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAW3E"}
|
package/dist/core/bot/polling.js
CHANGED
|
@@ -33,14 +33,6 @@ export function createBot(config) {
|
|
|
33
33
|
const telegramIdStr = telegramId.toString();
|
|
34
34
|
const chatId = ctx.chat?.id.toString() ?? ctx.session?.chatId;
|
|
35
35
|
const username = ctx.from?.username;
|
|
36
|
-
// Debug logging
|
|
37
|
-
console.log('[Telemeister Debug] Polling middleware:', {
|
|
38
|
-
telegramId: telegramIdStr,
|
|
39
|
-
chatId,
|
|
40
|
-
username,
|
|
41
|
-
hasFrom: !!ctx.from,
|
|
42
|
-
fromKeys: ctx.from ? Object.keys(ctx.from) : null,
|
|
43
|
-
});
|
|
44
36
|
if (!chatId) {
|
|
45
37
|
return next();
|
|
46
38
|
}
|
|
@@ -73,12 +65,19 @@ export function createBot(config) {
|
|
|
73
65
|
// Check for commands first
|
|
74
66
|
const text = ctx.message?.text?.trim();
|
|
75
67
|
let nextState = undefined;
|
|
68
|
+
let commandHandled = false;
|
|
76
69
|
if (text && text.startsWith('/')) {
|
|
77
70
|
const command = text.split(' ')[0].slice(1).toLowerCase(); // Remove leading slash
|
|
78
|
-
|
|
71
|
+
const result = await appBuilder.executeCommand(command, session.currentState, handlerContext);
|
|
72
|
+
if (result.handled) {
|
|
73
|
+
// Command was handled - use nextState if provided, otherwise stop processing
|
|
74
|
+
nextState = result.nextState;
|
|
75
|
+
commandHandled = true;
|
|
76
|
+
}
|
|
77
|
+
// If not handled, fall through to onResponse
|
|
79
78
|
}
|
|
80
|
-
// If no command handled
|
|
81
|
-
if (nextState === undefined) {
|
|
79
|
+
// If no command handled, execute onResponse handler
|
|
80
|
+
if (!commandHandled && nextState === undefined) {
|
|
82
81
|
nextState = await appBuilder.executeOnResponse(session.currentState, handlerContext);
|
|
83
82
|
}
|
|
84
83
|
// Handle state transition (call onEnter even for same state)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polling.js","sourceRoot":"","sources":["../../../src/core/bot/polling.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,EAAgB,MAAM,QAAQ,CAAC;AACpD,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,cAAc,CAAC;AAa3F,SAAS,aAAa,CAAC,GAAY;IACjC,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAqB;IAC7C,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAa,KAAK,CAAC,CAAC;IAEvC,kDAAkD;IAClD,GAAG,CAAC,GAAG,CACL,OAAO,CAAC;QACN,OAAO,EAAE,GAAgB,EAAE,CAAC,CAAC;YAC3B,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,OAAO,EAAE,IAAI,qBAAqB,CAAC,QAAQ,CAAC;QAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;KACvD,CAAC,CACH,CAAC;IAEF,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QAEpC,
|
|
1
|
+
{"version":3,"file":"polling.js","sourceRoot":"","sources":["../../../src/core/bot/polling.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/core/bot/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9E,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAE3C;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc,CAAC,WAAW,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,EAAE,eAAe;IAIrC;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAgBzD;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzC;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/core/bot/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9E,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;AAE3C;;GAEG;AACH,qBAAa,qBAAsB,YAAW,cAAc,CAAC,WAAW,CAAC;IACvE,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,QAAQ,EAAE,eAAe;IAIrC;;;OAGG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAgBzD;;;;OAIG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAIzC;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,eAAe,GACxB,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
|
package/dist/core/bot/session.js
CHANGED
|
@@ -57,16 +57,8 @@ export async function getOrCreateSession(telegramId, username, chatId, database)
|
|
|
57
57
|
const stateData = existing.info?.stateData
|
|
58
58
|
? JSON.parse(existing.info.stateData)
|
|
59
59
|
: {};
|
|
60
|
-
// Debug logging
|
|
61
|
-
console.log('[Telemeister Debug] getOrCreateSession:', {
|
|
62
|
-
telegramId,
|
|
63
|
-
usernameFromCtx: username,
|
|
64
|
-
usernameInDb: existing.username,
|
|
65
|
-
willUpdate: username !== undefined && existing.username !== username,
|
|
66
|
-
});
|
|
67
60
|
// Update username if it has changed
|
|
68
61
|
if (username !== undefined && existing.username !== username) {
|
|
69
|
-
console.log('[Telemeister Debug] Updating username from', existing.username, 'to', username);
|
|
70
62
|
await database.createOrUpdateUser({
|
|
71
63
|
telegramId,
|
|
72
64
|
username,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/core/bot/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACxB,QAAQ,CAAkB;IAElC,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,MAAM,SAAS,GAA4B,IAAI,CAAC,IAAI,EAAE,SAAS;YAC7D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,KAAkB;QACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,0CAA0C;QAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,QAA4B,EAC5B,MAAc,EACd,QAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GAA4B,QAAQ,CAAC,IAAI,EAAE,SAAS;YACjE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;QAEP,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/core/bot/session.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACxB,QAAQ,CAAkB;IAElC,YAAY,QAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAC;QAE5B,MAAM,SAAS,GAA4B,IAAI,CAAC,IAAI,EAAE,SAAS;YAC7D,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;YACjC,CAAC,CAAC,EAAE,CAAC;QAEP,OAAO;YACL,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,EAAE;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK,CAAC,GAAW,EAAE,KAAkB;QACzC,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAChF,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,0CAA0C;QAC1C,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IACvD,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,QAA4B,EAC5B,MAAc,EACd,QAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IAEhE,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,SAAS,GAA4B,QAAQ,CAAC,IAAI,EAAE,SAAS;YACjE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACrC,CAAC,CAAC,EAAE,CAAC;QAEP,oCAAoC;QACpC,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC7D,MAAM,QAAQ,CAAC,kBAAkB,CAAC;gBAChC,UAAU;gBACV,QAAQ;gBACR,MAAM;gBACN,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,SAAS;aACV,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,YAAY,EAAE,QAAQ,CAAC,YAAY;gBACnC,SAAS;gBACT,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,MAAM,EAAE,QAAQ,CAAC,MAAM;aACxB;YACD,KAAK,EAAE,KAAK;SACb,CAAC;IACJ,CAAC;IAED,kBAAkB;IAClB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,kBAAkB,CAAC;QAChD,UAAU;QACV,QAAQ;QACR,MAAM;QACN,YAAY,EAAE,MAAM;QACpB,SAAS,EAAE,EAAE;KACd,CAAC,CAAC;IAEH,OAAO;QACL,OAAO,EAAE;YACP,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,OAAO,CAAC,EAAE;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB;QACD,KAAK,EAAE,IAAI;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/core/bot/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,GAAG,EAA4B,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,UAAU,UAAW,SAAQ,OAAO;IAClC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/core/bot/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,GAAG,EAA4B,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAA6C,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGlD,UAAU,UAAW,SAAQ,OAAO;IAClC,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,YAAY,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAoG7F;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgD3E;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBjF;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAUhE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUpE"}
|
package/dist/core/bot/webhook.js
CHANGED
|
@@ -34,14 +34,6 @@ export function createBot(config) {
|
|
|
34
34
|
const telegramIdStr = telegramId.toString();
|
|
35
35
|
const chatId = ctx.chat?.id.toString() ?? ctx.session?.chatId;
|
|
36
36
|
const username = ctx.from?.username;
|
|
37
|
-
// Debug logging
|
|
38
|
-
console.log('[Telemeister Debug] Webhook middleware:', {
|
|
39
|
-
telegramId: telegramIdStr,
|
|
40
|
-
chatId,
|
|
41
|
-
username,
|
|
42
|
-
hasFrom: !!ctx.from,
|
|
43
|
-
fromKeys: ctx.from ? Object.keys(ctx.from) : null,
|
|
44
|
-
});
|
|
45
37
|
if (!chatId) {
|
|
46
38
|
return next();
|
|
47
39
|
}
|
|
@@ -74,12 +66,19 @@ export function createBot(config) {
|
|
|
74
66
|
// Check for commands first
|
|
75
67
|
const text = ctx.message?.text?.trim();
|
|
76
68
|
let nextState = undefined;
|
|
69
|
+
let commandHandled = false;
|
|
77
70
|
if (text && text.startsWith('/')) {
|
|
78
71
|
const command = text.split(' ')[0].slice(1).toLowerCase(); // Remove leading slash
|
|
79
|
-
|
|
72
|
+
const result = await appBuilder.executeCommand(command, session.currentState, handlerContext);
|
|
73
|
+
if (result.handled) {
|
|
74
|
+
// Command was handled - use nextState if provided, otherwise stop processing
|
|
75
|
+
nextState = result.nextState;
|
|
76
|
+
commandHandled = true;
|
|
77
|
+
}
|
|
78
|
+
// If not handled, fall through to onResponse
|
|
80
79
|
}
|
|
81
|
-
// If no command handled
|
|
82
|
-
if (nextState === undefined) {
|
|
80
|
+
// If no command handled, execute onResponse handler
|
|
81
|
+
if (!commandHandled && nextState === undefined) {
|
|
83
82
|
nextState = await appBuilder.executeOnResponse(session.currentState, handlerContext);
|
|
84
83
|
}
|
|
85
84
|
// Handle state transition (call onEnter even for same state)
|
|
@@ -111,7 +110,8 @@ export async function startWebhookMode(config) {
|
|
|
111
110
|
});
|
|
112
111
|
});
|
|
113
112
|
// Set up webhook endpoint using Grammy's webhookCallback
|
|
114
|
-
|
|
113
|
+
// Note: express.json() is required for webhookCallback to parse request body
|
|
114
|
+
app.use('/webhook', express.json(), webhookCallback(bot, 'express'));
|
|
115
115
|
// Start server
|
|
116
116
|
app.listen(port, async () => {
|
|
117
117
|
console.log(`🤖 Bot started in webhook mode`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/core/bot/webhook.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAA8B,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAgB,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,UAAU,EAA0B,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,cAAc,CAAC;AAe3F,SAAS,aAAa,CAAC,GAAY;IACjC,OAAO,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkD;IAC1E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAa,KAAK,CAAC,CAAC;IAEvC,kDAAkD;IAClD,GAAG,CAAC,GAAG,CACL,OAAO,CAAC;QACN,OAAO,EAAE,GAAgB,EAAE,CAAC,CAAC;YAC3B,YAAY,EAAE,MAAM;YACpB,SAAS,EAAE,EAAE;SACd,CAAC;QACF,OAAO,EAAE,IAAI,qBAAqB,CAAC,QAAQ,CAAC;QAC5C,aAAa,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE;KACvD,CAAC,CACH,CAAC;IAEF,gDAAgD;IAChD,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,IAAI,EAAE,CAAC;QAChB,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;QAEpC,
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../../src/core/bot/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/core/builder.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BotHandlerContext, BotState, EnterHandler, ResponseHandler, StateHandlers, CommandHandler } from './types.js';
|
|
1
|
+
import type { BotHandlerContext, BotState, EnterHandler, ResponseHandler, StateHandlers, CommandHandler, CommandResult } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* State Builder - Fluent API for configuring a single state
|
|
4
4
|
*
|
|
@@ -169,14 +169,18 @@ export declare class BotBuilder<TState extends BotState = BotState> {
|
|
|
169
169
|
/**
|
|
170
170
|
* Execute a command handler
|
|
171
171
|
* @internal Called by the bot handlers
|
|
172
|
-
* @returns
|
|
172
|
+
* @returns CommandResult indicating if command was handled and next state
|
|
173
173
|
*
|
|
174
174
|
* Priority order:
|
|
175
175
|
* 1. State-specific command handler (if exists)
|
|
176
176
|
* 2. Global command handler (if exists)
|
|
177
177
|
* 3. None - let state onResponse handle it
|
|
178
178
|
*/
|
|
179
|
-
executeCommand(command: string, currentState: TState, context: BotHandlerContext<TState>): Promise<TState
|
|
179
|
+
executeCommand(command: string, currentState: TState, context: BotHandlerContext<TState>): Promise<CommandResult<TState>>;
|
|
180
|
+
/**
|
|
181
|
+
* Normalize command handler return value to CommandResult
|
|
182
|
+
*/
|
|
183
|
+
private normalizeCommandResult;
|
|
180
184
|
/**
|
|
181
185
|
* Check if a command has a registered handler (global or for specific state)
|
|
182
186
|
*/
|
|
@@ -191,5 +195,5 @@ export declare class BotBuilder<TState extends BotState = BotState> {
|
|
|
191
195
|
* ```
|
|
192
196
|
*/
|
|
193
197
|
export declare const botBuilder: BotBuilder<string>;
|
|
194
|
-
export type { BotHandlerContext, BotState, EnterHandler, ResponseHandler, CommandHandler, } from './types.js';
|
|
198
|
+
export type { BotHandlerContext, BotState, EnterHandler, ResponseHandler, CommandHandler, CommandResult, } from './types.js';
|
|
195
199
|
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,eAAe,EACf,aAAa,EACb,cAAc,
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/core/builder.js
CHANGED
|
@@ -256,7 +256,7 @@ export class BotBuilder {
|
|
|
256
256
|
/**
|
|
257
257
|
* Execute a command handler
|
|
258
258
|
* @internal Called by the bot handlers
|
|
259
|
-
* @returns
|
|
259
|
+
* @returns CommandResult indicating if command was handled and next state
|
|
260
260
|
*
|
|
261
261
|
* Priority order:
|
|
262
262
|
* 1. State-specific command handler (if exists)
|
|
@@ -269,13 +269,32 @@ export class BotBuilder {
|
|
|
269
269
|
const stateHandlers = this.handlers.get(currentState);
|
|
270
270
|
const stateCommandHandler = stateHandlers?.onCommand?.get(normalizedCommand);
|
|
271
271
|
if (stateCommandHandler) {
|
|
272
|
-
|
|
272
|
+
const result = await stateCommandHandler(context);
|
|
273
|
+
return this.normalizeCommandResult(result);
|
|
273
274
|
}
|
|
274
275
|
// Fall back to global command handler
|
|
275
276
|
const globalHandler = this.globalCommandHandlers.get(normalizedCommand);
|
|
276
277
|
if (globalHandler) {
|
|
277
|
-
|
|
278
|
+
const result = await globalHandler(context);
|
|
279
|
+
return this.normalizeCommandResult(result);
|
|
280
|
+
}
|
|
281
|
+
// No handler found
|
|
282
|
+
return { handled: false };
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Normalize command handler return value to CommandResult
|
|
286
|
+
*/
|
|
287
|
+
normalizeCommandResult(result) {
|
|
288
|
+
if (result === undefined || result === null) {
|
|
289
|
+
// Handler returned void - treat as handled with no state change
|
|
290
|
+
return { handled: true };
|
|
291
|
+
}
|
|
292
|
+
if (typeof result === 'object' && 'handled' in result) {
|
|
293
|
+
// Already a CommandResult
|
|
294
|
+
return result;
|
|
278
295
|
}
|
|
296
|
+
// Handler returned a state string - treat as handled with state transition
|
|
297
|
+
return { handled: true, nextState: result };
|
|
279
298
|
}
|
|
280
299
|
/**
|
|
281
300
|
* Check if a command has a registered handler (global or for specific state)
|
package/dist/core/builder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../src/core/builder.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types.d.ts
CHANGED
|
@@ -16,7 +16,13 @@ export interface BotHandlerContext<TState extends BotState = BotState> {
|
|
|
16
16
|
}
|
|
17
17
|
export type EnterHandler<TState extends BotState = BotState> = (context: BotHandlerContext<TState>) => Promise<TState | void>;
|
|
18
18
|
export type ResponseHandler<TState extends BotState = BotState> = (context: BotHandlerContext<TState>) => Promise<TState | void>;
|
|
19
|
-
export type
|
|
19
|
+
export type CommandResult<TState extends BotState = BotState> = {
|
|
20
|
+
handled: true;
|
|
21
|
+
nextState?: TState;
|
|
22
|
+
} | {
|
|
23
|
+
handled: false;
|
|
24
|
+
};
|
|
25
|
+
export type CommandHandler<TState extends BotState = BotState> = (context: BotHandlerContext<TState>) => Promise<CommandResult<TState> | TState | void>;
|
|
20
26
|
export interface StateHandlers<TState extends BotState = BotState> {
|
|
21
27
|
onEnter?: EnterHandler<TState>;
|
|
22
28
|
onResponse?: ResponseHandler<TState>;
|
package/dist/core/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,eAAO,MAAM,UAAU,oBAA2B,CAAC;AAEnD,MAAM,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AAEnD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,MAAM,WAAW,iBAAiB,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG,SAAS,CAAC;IAC3C,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAChG;AAED,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAC7D,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAChE,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;AAE5B,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ,IAAI,CAC/D,OAAO,EAAE,iBAAiB,CAAC,MAAM,CAAC,KAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,36 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Implements DatabaseAdapter interface for the Telemeister framework.
|
|
5
5
|
* Uses Prisma ORM 7.x with driver adapters for database operations.
|
|
6
|
-
*
|
|
7
|
-
* Switch between SQLite and MySQL by changing DATABASE_URL in .env:
|
|
8
|
-
* - SQLite: DATABASE_URL="file:./dev.db"
|
|
9
|
-
* - MySQL: DATABASE_URL="mysql://user:password@localhost:3306/dbname"
|
|
10
|
-
*
|
|
11
|
-
* Note: When switching providers, update the provider in prisma/schema.prisma:
|
|
12
|
-
* - SQLite: provider = "sqlite"
|
|
13
|
-
* - MySQL: provider = "mysql"
|
|
14
6
|
*/
|
|
15
7
|
|
|
16
8
|
import 'dotenv/config';
|
|
9
|
+
<% if (database === 'mysql') { -%>
|
|
10
|
+
import { PrismaMariaDB } from '@prisma/adapter-mariadb';
|
|
11
|
+
import mariadb from 'mariadb';
|
|
12
|
+
<% } else { -%>
|
|
17
13
|
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
14
|
+
<% } -%>
|
|
18
15
|
import { PrismaClient, User, UserInfo } from '../generated/prisma/client.js';
|
|
19
16
|
import type { DatabaseAdapter, UserData } from 'telemeister/core/bot';
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
<% if (database === 'mysql') { -%>
|
|
19
|
+
// MySQL connection pool
|
|
20
|
+
const pool = mariadb.createPool({
|
|
21
|
+
host: process.env.DB_HOST || 'localhost',
|
|
22
|
+
port: parseInt(process.env.DB_PORT || '3306', 10),
|
|
23
|
+
user: process.env.DB_USER || 'root',
|
|
24
|
+
password: process.env.DB_PASSWORD || 'root',
|
|
25
|
+
database: process.env.DB_NAME || 'telemeister',
|
|
26
|
+
connectionLimit: 10,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Create MariaDB adapter
|
|
30
|
+
const adapter = new PrismaMariaDB(pool);
|
|
31
|
+
<% } else { -%>
|
|
32
|
+
// SQLite adapter
|
|
22
33
|
const databaseUrl = process.env.DATABASE_URL || 'file:./dev.db';
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const adapter = isMysql
|
|
28
|
-
? (() => {
|
|
29
|
-
throw new Error(
|
|
30
|
-
'MySQL adapter not yet configured. Please configure @prisma/adapter-mariadb in src/lib/database.ts'
|
|
31
|
-
);
|
|
32
|
-
})()
|
|
33
|
-
: new PrismaBetterSqlite3({
|
|
34
|
-
url: databaseUrl,
|
|
35
|
-
});
|
|
34
|
+
const adapter = new PrismaBetterSqlite3({
|
|
35
|
+
url: databaseUrl,
|
|
36
|
+
});
|
|
37
|
+
<% } -%>
|
|
36
38
|
|
|
37
39
|
// Prisma client instance with adapter
|
|
38
40
|
const prisma = new PrismaClient({ adapter });
|
|
@@ -67,21 +69,9 @@ export async function createOrUpdateUser(data: {
|
|
|
67
69
|
currentState?: string;
|
|
68
70
|
stateData?: Record<string, unknown>;
|
|
69
71
|
}): Promise<UserWithInfo> {
|
|
70
|
-
console.log('[Telemeister Debug] createOrUpdateUser called:', {
|
|
71
|
-
telegramId: data.telegramId,
|
|
72
|
-
username: data.username,
|
|
73
|
-
chatId: data.chatId,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
72
|
const existingUser = await getUserByTelegramId(data.telegramId);
|
|
77
73
|
|
|
78
74
|
if (existingUser) {
|
|
79
|
-
console.log('[Telemeister Debug] Existing user found:', {
|
|
80
|
-
id: existingUser.id,
|
|
81
|
-
username: existingUser.username,
|
|
82
|
-
willUpdateUsername: data.username !== undefined,
|
|
83
|
-
});
|
|
84
|
-
|
|
85
75
|
// Update existing user
|
|
86
76
|
const updatedUser = await prisma.user.update({
|
|
87
77
|
where: { telegramId: data.telegramId },
|
|
@@ -93,11 +83,6 @@ export async function createOrUpdateUser(data: {
|
|
|
93
83
|
include: { info: true },
|
|
94
84
|
});
|
|
95
85
|
|
|
96
|
-
console.log('[Telemeister Debug] User updated:', {
|
|
97
|
-
id: updatedUser.id,
|
|
98
|
-
username: updatedUser.username,
|
|
99
|
-
});
|
|
100
|
-
|
|
101
86
|
// Update or create user info if stateData provided
|
|
102
87
|
if (data.stateData) {
|
|
103
88
|
await prisma.userInfo.upsert({
|
|
@@ -178,6 +163,9 @@ export async function updateUserState(
|
|
|
178
163
|
*/
|
|
179
164
|
export async function disconnectDB(): Promise<void> {
|
|
180
165
|
await prisma.$disconnect();
|
|
166
|
+
<% if (database === 'mysql') { -%>
|
|
167
|
+
await pool.end();
|
|
168
|
+
<% } -%>
|
|
181
169
|
}
|
|
182
170
|
|
|
183
171
|
/**
|
|
@@ -188,7 +176,7 @@ export const databaseAdapter: DatabaseAdapter = {
|
|
|
188
176
|
getUserByTelegramId: async (telegramId: string): Promise<UserData | null> => {
|
|
189
177
|
const user = await getUserByTelegramId(telegramId);
|
|
190
178
|
if (!user) return null;
|
|
191
|
-
|
|
179
|
+
|
|
192
180
|
return {
|
|
193
181
|
id: user.id,
|
|
194
182
|
telegramId: user.telegramId,
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Telegram Bot Configuration
|
|
2
2
|
BOT_TOKEN=your_bot_token_here
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
<% if (database === 'mysql') { -%>
|
|
5
|
+
# Database (MySQL)
|
|
6
|
+
DB_HOST=localhost
|
|
7
|
+
DB_PORT=3306
|
|
8
|
+
DB_USER=root
|
|
9
|
+
DB_PASSWORD=root
|
|
10
|
+
DB_NAME=telemeister
|
|
11
|
+
<% } else { -%>
|
|
12
|
+
# Database (SQLite)
|
|
5
13
|
DATABASE_URL=file:./dev.db
|
|
14
|
+
<% } -%>
|
|
@@ -23,9 +23,14 @@
|
|
|
23
23
|
"state:transition:delete": "telemeister state:transition:delete"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
+
<% if (database === 'mysql') { -%>
|
|
27
|
+
"@prisma/adapter-mariadb": "^7.0.0",
|
|
28
|
+
"mariadb": "^3.4.0",
|
|
29
|
+
<% } else { -%>
|
|
26
30
|
"@prisma/adapter-better-sqlite3": "^7.0.0",
|
|
27
|
-
"@prisma/client": "^7.4.0",
|
|
28
31
|
"better-sqlite3": "^12.6.2",
|
|
32
|
+
<% } -%>
|
|
33
|
+
"@prisma/client": "^7.4.0",
|
|
29
34
|
"dotenv": "^16.4.7",
|
|
30
35
|
"express": "^4.21.2",
|
|
31
36
|
"grammy": "^1.35.1",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "telemeister",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"description": "TypeScript Telegram Bot Boilerplate with XState",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/core/index.js",
|
|
@@ -33,6 +33,18 @@
|
|
|
33
33
|
"README.md",
|
|
34
34
|
"LICENSE"
|
|
35
35
|
],
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc && rm -rf dist/templates && cp -r src/templates dist/templates && pnpm run build:cli",
|
|
38
|
+
"build:cli": "esbuild dist/cli/cli.js --bundle --platform=node --format=esm --outfile=bin/telemeister-cli.js --external:typescript --external:tsx --external:prisma",
|
|
39
|
+
"example:recreate": "rm -rf examples/demo-bot && tsx src/cli/cli.ts create-bot demo-bot && mv demo-bot examples/demo-bot && npm pkg set --prefix examples/demo-bot dependencies.telemeister='workspace:*' && rm -rf examples/demo-bot/node_modules examples/demo-bot/pnpm-lock.yaml examples/demo-bot/dev.db examples/demo-bot/.env",
|
|
40
|
+
"prepublishOnly": "pnpm run build",
|
|
41
|
+
"prepare": "husky",
|
|
42
|
+
"lint": "eslint src/ scripts/",
|
|
43
|
+
"lint:fix": "eslint src/ scripts/ --fix",
|
|
44
|
+
"format": "prettier --write .",
|
|
45
|
+
"format:check": "prettier --check .",
|
|
46
|
+
"release": "./scripts/release.sh"
|
|
47
|
+
},
|
|
36
48
|
"workspaces": [
|
|
37
49
|
"examples/*"
|
|
38
50
|
],
|
|
@@ -88,15 +100,5 @@
|
|
|
88
100
|
"tsx": "^4.21.0",
|
|
89
101
|
"typescript": "^5.9.3",
|
|
90
102
|
"typescript-eslint": "^8.39.0"
|
|
91
|
-
},
|
|
92
|
-
"scripts": {
|
|
93
|
-
"build": "tsc && rm -rf dist/templates && cp -r src/templates dist/templates && pnpm run build:cli",
|
|
94
|
-
"build:cli": "esbuild dist/cli/cli.js --bundle --platform=node --format=esm --outfile=bin/telemeister-cli.js --external:typescript --external:tsx --external:prisma",
|
|
95
|
-
"example:recreate": "rm -rf examples/demo-bot && tsx src/cli/cli.ts create-bot demo-bot && mv demo-bot examples/demo-bot && npm pkg set --prefix examples/demo-bot dependencies.telemeister='workspace:*' && rm -rf examples/demo-bot/node_modules examples/demo-bot/pnpm-lock.yaml examples/demo-bot/dev.db examples/demo-bot/.env",
|
|
96
|
-
"lint": "eslint src/ scripts/",
|
|
97
|
-
"lint:fix": "eslint src/ scripts/ --fix",
|
|
98
|
-
"format": "prettier --write .",
|
|
99
|
-
"format:check": "prettier --check .",
|
|
100
|
-
"release": "./scripts/release.sh"
|
|
101
103
|
}
|
|
102
|
-
}
|
|
104
|
+
}
|
|
@@ -3,36 +3,38 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Implements DatabaseAdapter interface for the Telemeister framework.
|
|
5
5
|
* Uses Prisma ORM 7.x with driver adapters for database operations.
|
|
6
|
-
*
|
|
7
|
-
* Switch between SQLite and MySQL by changing DATABASE_URL in .env:
|
|
8
|
-
* - SQLite: DATABASE_URL="file:./dev.db"
|
|
9
|
-
* - MySQL: DATABASE_URL="mysql://user:password@localhost:3306/dbname"
|
|
10
|
-
*
|
|
11
|
-
* Note: When switching providers, update the provider in prisma/schema.prisma:
|
|
12
|
-
* - SQLite: provider = "sqlite"
|
|
13
|
-
* - MySQL: provider = "mysql"
|
|
14
6
|
*/
|
|
15
7
|
|
|
16
8
|
import 'dotenv/config';
|
|
9
|
+
<% if (database === 'mysql') { -%>
|
|
10
|
+
import { PrismaMariaDB } from '@prisma/adapter-mariadb';
|
|
11
|
+
import mariadb from 'mariadb';
|
|
12
|
+
<% } else { -%>
|
|
17
13
|
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
|
|
14
|
+
<% } -%>
|
|
18
15
|
import { PrismaClient, User, UserInfo } from '../generated/prisma/client.js';
|
|
19
16
|
import type { DatabaseAdapter, UserData } from 'telemeister/core/bot';
|
|
20
17
|
|
|
21
|
-
|
|
18
|
+
<% if (database === 'mysql') { -%>
|
|
19
|
+
// MySQL connection pool
|
|
20
|
+
const pool = mariadb.createPool({
|
|
21
|
+
host: process.env.DB_HOST || 'localhost',
|
|
22
|
+
port: parseInt(process.env.DB_PORT || '3306', 10),
|
|
23
|
+
user: process.env.DB_USER || 'root',
|
|
24
|
+
password: process.env.DB_PASSWORD || 'root',
|
|
25
|
+
database: process.env.DB_NAME || 'telemeister',
|
|
26
|
+
connectionLimit: 10,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
// Create MariaDB adapter
|
|
30
|
+
const adapter = new PrismaMariaDB(pool);
|
|
31
|
+
<% } else { -%>
|
|
32
|
+
// SQLite adapter
|
|
22
33
|
const databaseUrl = process.env.DATABASE_URL || 'file:./dev.db';
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const adapter = isMysql
|
|
28
|
-
? (() => {
|
|
29
|
-
throw new Error(
|
|
30
|
-
'MySQL adapter not yet configured. Please configure @prisma/adapter-mariadb in src/lib/database.ts'
|
|
31
|
-
);
|
|
32
|
-
})()
|
|
33
|
-
: new PrismaBetterSqlite3({
|
|
34
|
-
url: databaseUrl,
|
|
35
|
-
});
|
|
34
|
+
const adapter = new PrismaBetterSqlite3({
|
|
35
|
+
url: databaseUrl,
|
|
36
|
+
});
|
|
37
|
+
<% } -%>
|
|
36
38
|
|
|
37
39
|
// Prisma client instance with adapter
|
|
38
40
|
const prisma = new PrismaClient({ adapter });
|
|
@@ -67,21 +69,9 @@ export async function createOrUpdateUser(data: {
|
|
|
67
69
|
currentState?: string;
|
|
68
70
|
stateData?: Record<string, unknown>;
|
|
69
71
|
}): Promise<UserWithInfo> {
|
|
70
|
-
console.log('[Telemeister Debug] createOrUpdateUser called:', {
|
|
71
|
-
telegramId: data.telegramId,
|
|
72
|
-
username: data.username,
|
|
73
|
-
chatId: data.chatId,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
72
|
const existingUser = await getUserByTelegramId(data.telegramId);
|
|
77
73
|
|
|
78
74
|
if (existingUser) {
|
|
79
|
-
console.log('[Telemeister Debug] Existing user found:', {
|
|
80
|
-
id: existingUser.id,
|
|
81
|
-
username: existingUser.username,
|
|
82
|
-
willUpdateUsername: data.username !== undefined,
|
|
83
|
-
});
|
|
84
|
-
|
|
85
75
|
// Update existing user
|
|
86
76
|
const updatedUser = await prisma.user.update({
|
|
87
77
|
where: { telegramId: data.telegramId },
|
|
@@ -93,11 +83,6 @@ export async function createOrUpdateUser(data: {
|
|
|
93
83
|
include: { info: true },
|
|
94
84
|
});
|
|
95
85
|
|
|
96
|
-
console.log('[Telemeister Debug] User updated:', {
|
|
97
|
-
id: updatedUser.id,
|
|
98
|
-
username: updatedUser.username,
|
|
99
|
-
});
|
|
100
|
-
|
|
101
86
|
// Update or create user info if stateData provided
|
|
102
87
|
if (data.stateData) {
|
|
103
88
|
await prisma.userInfo.upsert({
|
|
@@ -178,6 +163,9 @@ export async function updateUserState(
|
|
|
178
163
|
*/
|
|
179
164
|
export async function disconnectDB(): Promise<void> {
|
|
180
165
|
await prisma.$disconnect();
|
|
166
|
+
<% if (database === 'mysql') { -%>
|
|
167
|
+
await pool.end();
|
|
168
|
+
<% } -%>
|
|
181
169
|
}
|
|
182
170
|
|
|
183
171
|
/**
|
|
@@ -188,7 +176,7 @@ export const databaseAdapter: DatabaseAdapter = {
|
|
|
188
176
|
getUserByTelegramId: async (telegramId: string): Promise<UserData | null> => {
|
|
189
177
|
const user = await getUserByTelegramId(telegramId);
|
|
190
178
|
if (!user) return null;
|
|
191
|
-
|
|
179
|
+
|
|
192
180
|
return {
|
|
193
181
|
id: user.id,
|
|
194
182
|
telegramId: user.telegramId,
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Telegram Bot Configuration
|
|
2
2
|
BOT_TOKEN=your_bot_token_here
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
<% if (database === 'mysql') { -%>
|
|
5
|
+
# Database (MySQL)
|
|
6
|
+
DB_HOST=localhost
|
|
7
|
+
DB_PORT=3306
|
|
8
|
+
DB_USER=root
|
|
9
|
+
DB_PASSWORD=root
|
|
10
|
+
DB_NAME=telemeister
|
|
11
|
+
<% } else { -%>
|
|
12
|
+
# Database (SQLite)
|
|
5
13
|
DATABASE_URL=file:./dev.db
|
|
14
|
+
<% } -%>
|
|
@@ -23,9 +23,14 @@
|
|
|
23
23
|
"state:transition:delete": "telemeister state:transition:delete"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
+
<% if (database === 'mysql') { -%>
|
|
27
|
+
"@prisma/adapter-mariadb": "^7.0.0",
|
|
28
|
+
"mariadb": "^3.4.0",
|
|
29
|
+
<% } else { -%>
|
|
26
30
|
"@prisma/adapter-better-sqlite3": "^7.0.0",
|
|
27
|
-
"@prisma/client": "^7.4.0",
|
|
28
31
|
"better-sqlite3": "^12.6.2",
|
|
32
|
+
<% } -%>
|
|
33
|
+
"@prisma/client": "^7.4.0",
|
|
29
34
|
"dotenv": "^16.4.7",
|
|
30
35
|
"express": "^4.21.2",
|
|
31
36
|
"grammy": "^1.35.1",
|