@timmeck/brain-core 2.36.39 → 2.36.41
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/dist/agent-training/agent-trainer.d.ts +85 -0
- package/dist/agent-training/agent-trainer.js +149 -0
- package/dist/agent-training/agent-trainer.js.map +1 -0
- package/dist/agent-training/benchmark-suite.d.ts +112 -0
- package/dist/agent-training/benchmark-suite.js +248 -0
- package/dist/agent-training/benchmark-suite.js.map +1 -0
- package/dist/agent-training/index.d.ts +4 -0
- package/dist/agent-training/index.js +3 -0
- package/dist/agent-training/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/messaging/discord-bot.d.ts +51 -0
- package/dist/messaging/discord-bot.js +152 -0
- package/dist/messaging/discord-bot.js.map +1 -0
- package/dist/messaging/index.d.ts +6 -0
- package/dist/messaging/index.js +4 -0
- package/dist/messaging/index.js.map +1 -0
- package/dist/messaging/message-router.d.ts +67 -0
- package/dist/messaging/message-router.js +249 -0
- package/dist/messaging/message-router.js.map +1 -0
- package/dist/messaging/telegram-bot.d.ts +48 -0
- package/dist/messaging/telegram-bot.js +133 -0
- package/dist/messaging/telegram-bot.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Telegram Bot — Bidirektionaler Message-Handler
|
|
3
|
+
*
|
|
4
|
+
* Empfängt Nachrichten via grammy Long Polling, routet sie durch
|
|
5
|
+
* den MessageRouter und sendet die Antwort zurück.
|
|
6
|
+
*
|
|
7
|
+
* Voraussetzungen:
|
|
8
|
+
* npm install grammy (optional dependency)
|
|
9
|
+
* TELEGRAM_BOT_TOKEN in .env
|
|
10
|
+
* TELEGRAM_CHAT_ID in .env (optional: beschränkt auf einen Chat)
|
|
11
|
+
*/
|
|
12
|
+
import { getLogger } from '../utils/logger.js';
|
|
13
|
+
export class TelegramBot {
|
|
14
|
+
log = getLogger();
|
|
15
|
+
botToken;
|
|
16
|
+
chatId;
|
|
17
|
+
allowedUsers;
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
bot = null;
|
|
20
|
+
router = null;
|
|
21
|
+
running = false;
|
|
22
|
+
stats = {
|
|
23
|
+
messagesReceived: 0,
|
|
24
|
+
messagesSent: 0,
|
|
25
|
+
errors: 0,
|
|
26
|
+
startedAt: null,
|
|
27
|
+
};
|
|
28
|
+
constructor(config = {}) {
|
|
29
|
+
this.botToken = config.botToken ?? process.env.TELEGRAM_BOT_TOKEN ?? null;
|
|
30
|
+
this.chatId = config.chatId ?? process.env.TELEGRAM_CHAT_ID ?? null;
|
|
31
|
+
this.allowedUsers = new Set(config.allowedUsers ?? []);
|
|
32
|
+
}
|
|
33
|
+
/** Set the message router for dispatching incoming messages. */
|
|
34
|
+
setRouter(router) {
|
|
35
|
+
this.router = router;
|
|
36
|
+
}
|
|
37
|
+
/** Check if Telegram bot can start. */
|
|
38
|
+
isConfigured() {
|
|
39
|
+
return !!this.botToken;
|
|
40
|
+
}
|
|
41
|
+
/** Start listening for messages. */
|
|
42
|
+
async start() {
|
|
43
|
+
if (!this.botToken) {
|
|
44
|
+
this.log.debug('[TelegramBot] No TELEGRAM_BOT_TOKEN set, skipping');
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (this.running)
|
|
48
|
+
return;
|
|
49
|
+
try {
|
|
50
|
+
const modulePath = 'grammy';
|
|
51
|
+
const { Bot } = await import(/* webpackIgnore: true */ modulePath);
|
|
52
|
+
this.bot = new Bot(this.botToken);
|
|
53
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
54
|
+
this.bot.on('message:text', async (ctx) => {
|
|
55
|
+
try {
|
|
56
|
+
const senderId = String(ctx.from?.id ?? '');
|
|
57
|
+
const senderName = ctx.from?.first_name ?? ctx.from?.username ?? 'unknown';
|
|
58
|
+
const chatId = String(ctx.chat?.id ?? '');
|
|
59
|
+
// Chat filter
|
|
60
|
+
if (this.chatId && chatId !== this.chatId)
|
|
61
|
+
return;
|
|
62
|
+
// User filter
|
|
63
|
+
if (this.allowedUsers.size > 0 && !this.allowedUsers.has(senderId)) {
|
|
64
|
+
await ctx.reply('Zugriff verweigert.');
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
this.stats.messagesReceived++;
|
|
68
|
+
if (!this.router) {
|
|
69
|
+
await ctx.reply('MessageRouter nicht konfiguriert.');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const response = await this.router.route({
|
|
73
|
+
text: ctx.message.text,
|
|
74
|
+
senderId,
|
|
75
|
+
senderName,
|
|
76
|
+
platform: 'telegram',
|
|
77
|
+
channelId: chatId,
|
|
78
|
+
});
|
|
79
|
+
if (response.code) {
|
|
80
|
+
await ctx.reply(`<pre>${this.escapeHtml(response.text)}</pre>`, { parse_mode: 'HTML' });
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
await ctx.reply(response.text);
|
|
84
|
+
}
|
|
85
|
+
this.stats.messagesSent++;
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
this.stats.errors++;
|
|
89
|
+
this.log.warn(`[TelegramBot] Error handling message: ${err.message}`);
|
|
90
|
+
try {
|
|
91
|
+
await ctx.reply('Interner Fehler.');
|
|
92
|
+
}
|
|
93
|
+
catch { /* best effort */ }
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// Start polling (non-blocking)
|
|
97
|
+
this.bot.start({
|
|
98
|
+
onStart: () => {
|
|
99
|
+
this.log.info('[TelegramBot] Bot started, listening for messages');
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
this.running = true;
|
|
103
|
+
this.stats.startedAt = Date.now();
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
this.log.warn(`[TelegramBot] Failed to start: ${err.message}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Stop the bot. */
|
|
110
|
+
async stop() {
|
|
111
|
+
if (this.bot && this.running) {
|
|
112
|
+
try {
|
|
113
|
+
await this.bot.stop();
|
|
114
|
+
}
|
|
115
|
+
catch { /* best effort */ }
|
|
116
|
+
this.running = false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/** Get bot status. */
|
|
120
|
+
getStatus() {
|
|
121
|
+
return {
|
|
122
|
+
running: this.running,
|
|
123
|
+
messagesReceived: this.stats.messagesReceived,
|
|
124
|
+
messagesSent: this.stats.messagesSent,
|
|
125
|
+
errors: this.stats.errors,
|
|
126
|
+
startedAt: this.stats.startedAt,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
escapeHtml(text) {
|
|
130
|
+
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=telegram-bot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-bot.js","sourceRoot":"","sources":["../../src/messaging/telegram-bot.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED