bn-telegram-mcp-server 0.0.1
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 +1031 -0
- package/dist/debug-middleware.d.ts +12 -0
- package/dist/debug-middleware.d.ts.map +1 -0
- package/dist/debug-middleware.js +36 -0
- package/dist/debug-middleware.js.map +1 -0
- package/dist/encryption.d.ts +11 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +26 -0
- package/dist/encryption.js.map +1 -0
- package/dist/helpers.d.ts +27 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +103 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +114 -0
- package/dist/logger.js.map +1 -0
- package/dist/request-context.d.ts +24 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +32 -0
- package/dist/request-context.js.map +1 -0
- package/dist/resolvers.d.ts +36 -0
- package/dist/resolvers.d.ts.map +1 -0
- package/dist/resolvers.js +252 -0
- package/dist/resolvers.js.map +1 -0
- package/dist/schemas.d.ts +150 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +216 -0
- package/dist/schemas.js.map +1 -0
- package/dist/telegram-client.d.ts +19 -0
- package/dist/telegram-client.d.ts.map +1 -0
- package/dist/telegram-client.js +112 -0
- package/dist/telegram-client.js.map +1 -0
- package/dist/tool-loader.d.ts +31 -0
- package/dist/tool-loader.d.ts.map +1 -0
- package/dist/tool-loader.js +121 -0
- package/dist/tool-loader.js.map +1 -0
- package/dist/tool-registry.d.ts +47 -0
- package/dist/tool-registry.d.ts.map +1 -0
- package/dist/tool-registry.js +58 -0
- package/dist/tool-registry.js.map +1 -0
- package/dist/tools/getChat.d.ts +28 -0
- package/dist/tools/getChat.d.ts.map +1 -0
- package/dist/tools/getChat.js +69 -0
- package/dist/tools/getChat.js.map +1 -0
- package/dist/tools/getChatMembers.d.ts +34 -0
- package/dist/tools/getChatMembers.d.ts.map +1 -0
- package/dist/tools/getChatMembers.js +150 -0
- package/dist/tools/getChatMembers.js.map +1 -0
- package/dist/tools/getContacts.d.ts +28 -0
- package/dist/tools/getContacts.d.ts.map +1 -0
- package/dist/tools/getContacts.js +73 -0
- package/dist/tools/getContacts.js.map +1 -0
- package/dist/tools/getFile.d.ts +21 -0
- package/dist/tools/getFile.d.ts.map +1 -0
- package/dist/tools/getFile.js +33 -0
- package/dist/tools/getFile.js.map +1 -0
- package/dist/tools/getGroup.d.ts +27 -0
- package/dist/tools/getGroup.d.ts.map +1 -0
- package/dist/tools/getGroup.js +100 -0
- package/dist/tools/getGroup.js.map +1 -0
- package/dist/tools/getMe.d.ts +17 -0
- package/dist/tools/getMe.d.ts.map +1 -0
- package/dist/tools/getMe.js +20 -0
- package/dist/tools/getMe.js.map +1 -0
- package/dist/tools/getMessageContext.d.ts +21 -0
- package/dist/tools/getMessageContext.d.ts.map +1 -0
- package/dist/tools/getMessageContext.js +164 -0
- package/dist/tools/getMessageContext.js.map +1 -0
- package/dist/tools/getMessages.d.ts +38 -0
- package/dist/tools/getMessages.d.ts.map +1 -0
- package/dist/tools/getMessages.js +123 -0
- package/dist/tools/getMessages.js.map +1 -0
- package/dist/tools/getUser.d.ts +22 -0
- package/dist/tools/getUser.d.ts.map +1 -0
- package/dist/tools/getUser.js +38 -0
- package/dist/tools/getUser.js.map +1 -0
- package/dist/tools/index.d.ts +11 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +12 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/sendMessage.d.ts +39 -0
- package/dist/tools/sendMessage.d.ts.map +1 -0
- package/dist/tools/sendMessage.js +116 -0
- package/dist/tools/sendMessage.js.map +1 -0
- package/dist/transformers.d.ts +133 -0
- package/dist/transformers.d.ts.map +1 -0
- package/dist/transformers.js +335 -0
- package/dist/transformers.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +45 -0
- package/tools.json +252 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { transformUser } from "../transformers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Get information about the current Telegram user (the authenticated user)
|
|
5
|
+
*
|
|
6
|
+
* Returns a simplified user profile with:
|
|
7
|
+
* - id: User's numeric ID
|
|
8
|
+
* - name: Full name
|
|
9
|
+
* - username: @username if set
|
|
10
|
+
* - phone: Phone number if visible
|
|
11
|
+
* - status: Online status (e.g., "online", "last seen 2 hours ago")
|
|
12
|
+
* - is_premium: Whether user has Telegram Premium
|
|
13
|
+
*/
|
|
14
|
+
export async function getMe(req, _args) {
|
|
15
|
+
return withClient(req, async (client) => {
|
|
16
|
+
const result = await client.invoke({ _: "getMe" });
|
|
17
|
+
return transformUser(result);
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=getMe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMe.js","sourceRoot":"","sources":["../../src/tools/getMe.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK,CACzB,GAAY,EACZ,KAAkC;IAElC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetMessageContextSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedMessageContextResult } from "../transformers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get message context - fetches surrounding messages for better understanding
|
|
7
|
+
*
|
|
8
|
+
* Modes:
|
|
9
|
+
* - mode="message_id": Get context around a specific message ID
|
|
10
|
+
* - mode="search": Search for messages and get context around each match
|
|
11
|
+
*
|
|
12
|
+
* Parameters:
|
|
13
|
+
* - chat: Chat identifier (required for message_id mode, optional for search)
|
|
14
|
+
* - mode: "message_id" | "search" (default: "message_id")
|
|
15
|
+
* - message_id: (message_id mode) Target message ID
|
|
16
|
+
* - query: (search mode) Search query text
|
|
17
|
+
* - search_limit: (search mode) Max results to get context for (default: 5)
|
|
18
|
+
* - context_count: Messages to fetch before AND after target (default: 5)
|
|
19
|
+
*/
|
|
20
|
+
export declare function getMessageContext(req: Request, args: z.infer<typeof GetMessageContextSchema>): Promise<TransformedMessageContextResult>;
|
|
21
|
+
//# sourceMappingURL=getMessageContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessageContext.d.ts","sourceRoot":"","sources":["../../src/tools/getMessageContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG7D,OAAO,EAIL,KAAK,+BAA+B,EACrC,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,GAC5C,OAAO,CAAC,+BAA+B,CAAC,CA2M1C"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveChat } from "../resolvers.js";
|
|
3
|
+
import { transformMessageContext, transformMessageContextResult, } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get message context - fetches surrounding messages for better understanding
|
|
6
|
+
*
|
|
7
|
+
* Modes:
|
|
8
|
+
* - mode="message_id": Get context around a specific message ID
|
|
9
|
+
* - mode="search": Search for messages and get context around each match
|
|
10
|
+
*
|
|
11
|
+
* Parameters:
|
|
12
|
+
* - chat: Chat identifier (required for message_id mode, optional for search)
|
|
13
|
+
* - mode: "message_id" | "search" (default: "message_id")
|
|
14
|
+
* - message_id: (message_id mode) Target message ID
|
|
15
|
+
* - query: (search mode) Search query text
|
|
16
|
+
* - search_limit: (search mode) Max results to get context for (default: 5)
|
|
17
|
+
* - context_count: Messages to fetch before AND after target (default: 5)
|
|
18
|
+
*/
|
|
19
|
+
export async function getMessageContext(req, args) {
|
|
20
|
+
return withClient(req, async (client) => {
|
|
21
|
+
const mode = args.mode ?? "message_id";
|
|
22
|
+
const contextCount = args.context_count ?? 5;
|
|
23
|
+
// Load chats first
|
|
24
|
+
await client.invoke({
|
|
25
|
+
_: "loadChats",
|
|
26
|
+
chat_list: { _: "chatListMain" },
|
|
27
|
+
limit: 100,
|
|
28
|
+
});
|
|
29
|
+
// Helper function to get context around a single message
|
|
30
|
+
async function getContextForMessage(chatId, messageId, chatTitle) {
|
|
31
|
+
// Get the target message first
|
|
32
|
+
const targetResult = (await client.invoke({
|
|
33
|
+
_: "getMessages",
|
|
34
|
+
chat_id: chatId,
|
|
35
|
+
message_ids: [messageId],
|
|
36
|
+
}));
|
|
37
|
+
const targetMessage = targetResult.messages?.[0];
|
|
38
|
+
if (!targetMessage) {
|
|
39
|
+
throw new Error(`Message ${messageId} not found in chat ${chatId}`);
|
|
40
|
+
}
|
|
41
|
+
// Get messages BEFORE the target (older messages)
|
|
42
|
+
// offset=0 starts from the message, returns in reverse chronological order
|
|
43
|
+
const beforeResult = (await client.invoke({
|
|
44
|
+
_: "getChatHistory",
|
|
45
|
+
chat_id: chatId,
|
|
46
|
+
from_message_id: messageId,
|
|
47
|
+
offset: 0,
|
|
48
|
+
limit: contextCount + 1, // +1 because it includes the target message
|
|
49
|
+
only_local: false,
|
|
50
|
+
}));
|
|
51
|
+
// Get messages AFTER the target (newer messages)
|
|
52
|
+
// offset=-N gets N messages newer than from_message_id
|
|
53
|
+
const afterResult = (await client.invoke({
|
|
54
|
+
_: "getChatHistory",
|
|
55
|
+
chat_id: chatId,
|
|
56
|
+
from_message_id: messageId,
|
|
57
|
+
offset: -contextCount,
|
|
58
|
+
limit: contextCount,
|
|
59
|
+
only_local: false,
|
|
60
|
+
}));
|
|
61
|
+
// Process before messages (skip the first one as it's the target itself)
|
|
62
|
+
// Messages are returned newest first, so we reverse to get chronological order
|
|
63
|
+
const messagesBefore = (beforeResult.messages ?? [])
|
|
64
|
+
.slice(1) // Skip target message
|
|
65
|
+
.reverse(); // Reverse to get chronological order (oldest first)
|
|
66
|
+
// Process after messages (already in reverse chronological order, newest first)
|
|
67
|
+
// Filter out the target message (it may be included due to offset behavior)
|
|
68
|
+
// Then reverse to get chronological order
|
|
69
|
+
const messagesAfter = (afterResult.messages ?? [])
|
|
70
|
+
.filter((m) => m.id !== messageId) // Filter out target message
|
|
71
|
+
.reverse(); // Reverse to get chronological order
|
|
72
|
+
return transformMessageContext(targetMessage, messagesBefore, messagesAfter, contextCount, chatId, chatTitle);
|
|
73
|
+
}
|
|
74
|
+
// Handle message_id mode
|
|
75
|
+
if (mode === "message_id") {
|
|
76
|
+
if (args.message_id === undefined) {
|
|
77
|
+
throw new Error('message_id is required for mode="message_id". Provide a message ID.');
|
|
78
|
+
}
|
|
79
|
+
if (args.chat === undefined) {
|
|
80
|
+
throw new Error('chat is required for mode="message_id". Provide a chat ID or name.');
|
|
81
|
+
}
|
|
82
|
+
const chatId = await resolveChat(client, args.chat);
|
|
83
|
+
// Get chat info for title
|
|
84
|
+
const chatInfo = (await client.invoke({
|
|
85
|
+
_: "getChat",
|
|
86
|
+
chat_id: chatId,
|
|
87
|
+
}));
|
|
88
|
+
const context = await getContextForMessage(chatId, args.message_id, chatInfo.title);
|
|
89
|
+
return transformMessageContextResult([context], 1);
|
|
90
|
+
}
|
|
91
|
+
// Handle search mode
|
|
92
|
+
if (mode === "search") {
|
|
93
|
+
const query = args.query;
|
|
94
|
+
if (!query) {
|
|
95
|
+
throw new Error('query is required for mode="search". Provide a search query.');
|
|
96
|
+
}
|
|
97
|
+
const searchLimit = args.search_limit ?? 5;
|
|
98
|
+
const contexts = [];
|
|
99
|
+
if (args.chat !== undefined) {
|
|
100
|
+
// Search in specific chat
|
|
101
|
+
const chatId = await resolveChat(client, args.chat);
|
|
102
|
+
const chatInfo = (await client.invoke({
|
|
103
|
+
_: "getChat",
|
|
104
|
+
chat_id: chatId,
|
|
105
|
+
}));
|
|
106
|
+
const searchResult = (await client.invoke({
|
|
107
|
+
_: "searchChatMessages",
|
|
108
|
+
chat_id: chatId,
|
|
109
|
+
query: query,
|
|
110
|
+
from_message_id: 0,
|
|
111
|
+
offset: 0,
|
|
112
|
+
limit: searchLimit,
|
|
113
|
+
filter: { _: "searchMessagesFilterEmpty" },
|
|
114
|
+
}));
|
|
115
|
+
// Get context for each search result
|
|
116
|
+
for (const message of searchResult.messages ?? []) {
|
|
117
|
+
try {
|
|
118
|
+
const context = await getContextForMessage(chatId, message.id, chatInfo.title);
|
|
119
|
+
contexts.push(context);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Skip messages that can't be found
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
return transformMessageContextResult(contexts, searchResult.total_count, query);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
// Global search across all chats
|
|
129
|
+
const searchResult = (await client.invoke({
|
|
130
|
+
_: "searchMessages",
|
|
131
|
+
chat_list: { _: "chatListMain" },
|
|
132
|
+
query: query,
|
|
133
|
+
offset: "",
|
|
134
|
+
limit: searchLimit,
|
|
135
|
+
filter: { _: "searchMessagesFilterEmpty" },
|
|
136
|
+
min_date: 0,
|
|
137
|
+
max_date: 0,
|
|
138
|
+
}));
|
|
139
|
+
// Get context for each search result (may be from different chats)
|
|
140
|
+
const chatTitleCache = new Map();
|
|
141
|
+
for (const message of searchResult.messages ?? []) {
|
|
142
|
+
try {
|
|
143
|
+
// Get chat title if not cached
|
|
144
|
+
if (!chatTitleCache.has(message.chat_id)) {
|
|
145
|
+
const chatInfo = (await client.invoke({
|
|
146
|
+
_: "getChat",
|
|
147
|
+
chat_id: message.chat_id,
|
|
148
|
+
}));
|
|
149
|
+
chatTitleCache.set(message.chat_id, chatInfo.title ?? "");
|
|
150
|
+
}
|
|
151
|
+
const context = await getContextForMessage(message.chat_id, message.id, chatTitleCache.get(message.chat_id));
|
|
152
|
+
contexts.push(context);
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// Skip messages that can't be found
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return transformMessageContextResult(contexts, searchResult.total_count, query);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
throw new Error(`Unknown mode: ${mode}`);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=getMessageContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessageContext.js","sourceRoot":"","sources":["../../src/tools/getMessageContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetMessagesSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedMessage, type TransformedMessageHistory, type TransformedSearchResult } from "../transformers.js";
|
|
5
|
+
type GetMessagesResult = TransformedMessageHistory | {
|
|
6
|
+
messages: TransformedMessage[];
|
|
7
|
+
count: number;
|
|
8
|
+
chat_title?: string;
|
|
9
|
+
} | TransformedSearchResult;
|
|
10
|
+
/**
|
|
11
|
+
* Get messages from a chat - supports history, specific IDs, or search
|
|
12
|
+
*
|
|
13
|
+
* Modes:
|
|
14
|
+
* - mode="history" (default): Get paginated message history from a chat
|
|
15
|
+
* - mode="specific": Get specific messages by their IDs
|
|
16
|
+
* - mode="search": Search for messages by text content
|
|
17
|
+
*
|
|
18
|
+
* Parameters:
|
|
19
|
+
* - chat: Chat identifier (required for "history" and "specific" modes, optional for "search")
|
|
20
|
+
* - mode: "history" | "specific" | "search" (default: "history")
|
|
21
|
+
*
|
|
22
|
+
* History mode parameters:
|
|
23
|
+
* - from_message_id: Start from this message (0 = latest)
|
|
24
|
+
* - offset: Pagination offset
|
|
25
|
+
* - limit: Max messages to return (default: 50, max: 100)
|
|
26
|
+
* - only_local: Only return cached messages
|
|
27
|
+
*
|
|
28
|
+
* Specific mode parameters:
|
|
29
|
+
* - message_ids: Array of message IDs to retrieve
|
|
30
|
+
*
|
|
31
|
+
* Search mode parameters:
|
|
32
|
+
* - query: Search text
|
|
33
|
+
* - offset: Pagination offset
|
|
34
|
+
* - limit: Max results (default: 50)
|
|
35
|
+
*/
|
|
36
|
+
export declare function getMessages(req: Request, args: z.infer<typeof GetMessagesSchema>): Promise<GetMessagesResult>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=getMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessages.d.ts","sourceRoot":"","sources":["../../src/tools/getMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAIL,KAAK,kBAAkB,EACvB,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC7B,MAAM,oBAAoB,CAAC;AAE5B,KAAK,iBAAiB,GAClB,yBAAyB,GACzB;IAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE,uBAAuB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CA0H5B"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveChat } from "../resolvers.js";
|
|
3
|
+
import { transformMessage, transformMessageHistory, transformSearchResults, } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get messages from a chat - supports history, specific IDs, or search
|
|
6
|
+
*
|
|
7
|
+
* Modes:
|
|
8
|
+
* - mode="history" (default): Get paginated message history from a chat
|
|
9
|
+
* - mode="specific": Get specific messages by their IDs
|
|
10
|
+
* - mode="search": Search for messages by text content
|
|
11
|
+
*
|
|
12
|
+
* Parameters:
|
|
13
|
+
* - chat: Chat identifier (required for "history" and "specific" modes, optional for "search")
|
|
14
|
+
* - mode: "history" | "specific" | "search" (default: "history")
|
|
15
|
+
*
|
|
16
|
+
* History mode parameters:
|
|
17
|
+
* - from_message_id: Start from this message (0 = latest)
|
|
18
|
+
* - offset: Pagination offset
|
|
19
|
+
* - limit: Max messages to return (default: 50, max: 100)
|
|
20
|
+
* - only_local: Only return cached messages
|
|
21
|
+
*
|
|
22
|
+
* Specific mode parameters:
|
|
23
|
+
* - message_ids: Array of message IDs to retrieve
|
|
24
|
+
*
|
|
25
|
+
* Search mode parameters:
|
|
26
|
+
* - query: Search text
|
|
27
|
+
* - offset: Pagination offset
|
|
28
|
+
* - limit: Max results (default: 50)
|
|
29
|
+
*/
|
|
30
|
+
export async function getMessages(req, args) {
|
|
31
|
+
return withClient(req, async (client) => {
|
|
32
|
+
const mode = args.mode ?? "history";
|
|
33
|
+
// Load chats first
|
|
34
|
+
await client.invoke({
|
|
35
|
+
_: "loadChats",
|
|
36
|
+
chat_list: { _: "chatListMain" },
|
|
37
|
+
limit: 100,
|
|
38
|
+
});
|
|
39
|
+
// Handle search mode (can be global or chat-specific)
|
|
40
|
+
if (mode === "search") {
|
|
41
|
+
const query = args.query ?? "";
|
|
42
|
+
const limit = args.limit ?? 50;
|
|
43
|
+
const nextOffset = args.next_offset ?? "";
|
|
44
|
+
if (args.chat !== undefined) {
|
|
45
|
+
// Search in specific chat using searchChatMessages
|
|
46
|
+
// This uses from_message_id for pagination (different from global search)
|
|
47
|
+
const chatId = await resolveChat(client, args.chat);
|
|
48
|
+
const result = await client.invoke({
|
|
49
|
+
_: "searchChatMessages",
|
|
50
|
+
chat_id: chatId,
|
|
51
|
+
query: query,
|
|
52
|
+
from_message_id: args.from_message_id ?? 0,
|
|
53
|
+
offset: 0,
|
|
54
|
+
limit: limit,
|
|
55
|
+
filter: { _: "searchMessagesFilterEmpty" },
|
|
56
|
+
});
|
|
57
|
+
const messages = result;
|
|
58
|
+
// For chat search, next_offset is based on last message ID
|
|
59
|
+
const lastMessage = messages.messages?.[messages.messages.length - 1];
|
|
60
|
+
const chatNextOffset = lastMessage?.id ? String(lastMessage.id) : "";
|
|
61
|
+
return transformSearchResults({
|
|
62
|
+
messages: messages.messages,
|
|
63
|
+
total_count: messages.total_count,
|
|
64
|
+
next_offset: chatNextOffset,
|
|
65
|
+
}, query);
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
// Global search across all chats using cursor-based pagination
|
|
69
|
+
const result = await client.invoke({
|
|
70
|
+
_: "searchMessages",
|
|
71
|
+
chat_list: { _: "chatListMain" },
|
|
72
|
+
query: query,
|
|
73
|
+
offset: nextOffset,
|
|
74
|
+
limit: limit,
|
|
75
|
+
filter: { _: "searchMessagesFilterEmpty" },
|
|
76
|
+
min_date: 0,
|
|
77
|
+
max_date: 0,
|
|
78
|
+
});
|
|
79
|
+
return transformSearchResults(result, query);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// For history and specific modes, chat is required
|
|
83
|
+
if (args.chat === undefined) {
|
|
84
|
+
throw new Error(`Chat is required for mode="${mode}". Provide a chat ID or name.`);
|
|
85
|
+
}
|
|
86
|
+
const chatId = await resolveChat(client, args.chat);
|
|
87
|
+
// Get chat info for title
|
|
88
|
+
const chatInfo = (await client.invoke({
|
|
89
|
+
_: "getChat",
|
|
90
|
+
chat_id: chatId,
|
|
91
|
+
}));
|
|
92
|
+
if (mode === "specific") {
|
|
93
|
+
// Get specific messages by IDs
|
|
94
|
+
if (!args.message_ids || args.message_ids.length === 0) {
|
|
95
|
+
throw new Error('message_ids is required for mode="specific". Provide an array of message IDs.');
|
|
96
|
+
}
|
|
97
|
+
const result = (await client.invoke({
|
|
98
|
+
_: "getMessages",
|
|
99
|
+
chat_id: chatId,
|
|
100
|
+
message_ids: args.message_ids,
|
|
101
|
+
}));
|
|
102
|
+
const messages = (result.messages ?? [])
|
|
103
|
+
.filter((m) => m !== null)
|
|
104
|
+
.map((m) => transformMessage(m));
|
|
105
|
+
return {
|
|
106
|
+
messages,
|
|
107
|
+
count: messages.length,
|
|
108
|
+
chat_title: chatInfo.title,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Default: history mode
|
|
112
|
+
const result = (await client.invoke({
|
|
113
|
+
_: "getChatHistory",
|
|
114
|
+
chat_id: chatId,
|
|
115
|
+
from_message_id: args.from_message_id ?? 0,
|
|
116
|
+
offset: args.offset ?? 0,
|
|
117
|
+
limit: args.limit ?? 50,
|
|
118
|
+
only_local: args.only_local ?? false,
|
|
119
|
+
}));
|
|
120
|
+
return transformMessageHistory(result.messages ?? [], result.total_count, chatInfo.title);
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=getMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessages.js","sourceRoot":"","sources":["../../src/tools/getMessages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetUserSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedUser } from "../transformers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get information about a user
|
|
7
|
+
*
|
|
8
|
+
* Accepts:
|
|
9
|
+
* - user: User identifier - can be:
|
|
10
|
+
* - Numeric ID (e.g., 8572674464)
|
|
11
|
+
* - Username (e.g., "@johndoe")
|
|
12
|
+
* - Name to search (e.g., "John Doe")
|
|
13
|
+
*
|
|
14
|
+
* Returns simplified user info with:
|
|
15
|
+
* - id: User's numeric ID
|
|
16
|
+
* - name: Full name
|
|
17
|
+
* - username: @username if set
|
|
18
|
+
* - phone: Phone number if visible
|
|
19
|
+
* - status: Online status (e.g., "online", "last seen 2 hours ago")
|
|
20
|
+
*/
|
|
21
|
+
export declare function getUser(req: Request, args: z.infer<typeof GetUserSchema>): Promise<TransformedUser>;
|
|
22
|
+
//# sourceMappingURL=getUser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUser.d.ts","sourceRoot":"","sources":["../../src/tools/getUser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAoB1B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveUser } from "../resolvers.js";
|
|
3
|
+
import { transformUser } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get information about a user
|
|
6
|
+
*
|
|
7
|
+
* Accepts:
|
|
8
|
+
* - user: User identifier - can be:
|
|
9
|
+
* - Numeric ID (e.g., 8572674464)
|
|
10
|
+
* - Username (e.g., "@johndoe")
|
|
11
|
+
* - Name to search (e.g., "John Doe")
|
|
12
|
+
*
|
|
13
|
+
* Returns simplified user info with:
|
|
14
|
+
* - id: User's numeric ID
|
|
15
|
+
* - name: Full name
|
|
16
|
+
* - username: @username if set
|
|
17
|
+
* - phone: Phone number if visible
|
|
18
|
+
* - status: Online status (e.g., "online", "last seen 2 hours ago")
|
|
19
|
+
*/
|
|
20
|
+
export async function getUser(req, args) {
|
|
21
|
+
return withClient(req, async (client) => {
|
|
22
|
+
// Load chats and contacts first to populate user cache
|
|
23
|
+
await client.invoke({
|
|
24
|
+
_: "loadChats",
|
|
25
|
+
chat_list: { _: "chatListMain" },
|
|
26
|
+
limit: 100,
|
|
27
|
+
});
|
|
28
|
+
await client.invoke({ _: "getContacts" });
|
|
29
|
+
// Resolve user identifier
|
|
30
|
+
const userId = await resolveUser(client, args.user);
|
|
31
|
+
const result = await client.invoke({
|
|
32
|
+
_: "getUser",
|
|
33
|
+
user_id: userId,
|
|
34
|
+
});
|
|
35
|
+
return transformUser(result);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=getUser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getUser.js","sourceRoot":"","sources":["../../src/tools/getUser.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,IAAmC;IAEnC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,uDAAuD;QACvD,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,CAAC,EAAE,WAAW;YACd,SAAS,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE;YAChC,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC;QAE1C,0BAA0B;QAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,CAAC,EAAE,SAAS;YACZ,OAAO,EAAE,MAAM;SAChB,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { getMe } from "./getMe.js";
|
|
2
|
+
export { getChat } from "./getChat.js";
|
|
3
|
+
export { getMessages } from "./getMessages.js";
|
|
4
|
+
export { sendMessage } from "./sendMessage.js";
|
|
5
|
+
export { getUser } from "./getUser.js";
|
|
6
|
+
export { getContacts } from "./getContacts.js";
|
|
7
|
+
export { getFile } from "./getFile.js";
|
|
8
|
+
export { getGroup } from "./getGroup.js";
|
|
9
|
+
export { getChatMembers } from "./getChatMembers.js";
|
|
10
|
+
export { getMessageContext } from "./getMessageContext.js";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// Consolidated MCP Tools (10 tools total)
|
|
2
|
+
export { getMe } from "./getMe.js";
|
|
3
|
+
export { getChat } from "./getChat.js";
|
|
4
|
+
export { getMessages } from "./getMessages.js";
|
|
5
|
+
export { sendMessage } from "./sendMessage.js";
|
|
6
|
+
export { getUser } from "./getUser.js";
|
|
7
|
+
export { getContacts } from "./getContacts.js";
|
|
8
|
+
export { getFile } from "./getFile.js";
|
|
9
|
+
export { getGroup } from "./getGroup.js";
|
|
10
|
+
export { getChatMembers } from "./getChatMembers.js";
|
|
11
|
+
export { getMessageContext } from "./getMessageContext.js";
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { SendMessageSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedMessage } from "../transformers.js";
|
|
5
|
+
type SendMessageResult = TransformedMessage | {
|
|
6
|
+
forwarded: TransformedMessage[];
|
|
7
|
+
count: number;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Send or forward messages to a chat
|
|
11
|
+
*
|
|
12
|
+
* Actions:
|
|
13
|
+
* - action="send" (default): Compose and send a new text message
|
|
14
|
+
* - action="forward": Forward existing messages from another chat
|
|
15
|
+
*
|
|
16
|
+
* Parameters:
|
|
17
|
+
* - chat: Target chat (ID or name like "Gong Zhe", "Family Group")
|
|
18
|
+
* - action: "send" | "forward" (default: "send")
|
|
19
|
+
*
|
|
20
|
+
* Send action parameters:
|
|
21
|
+
* - text: Message content
|
|
22
|
+
* - reply_to_message_id: Optional - reply to specific message
|
|
23
|
+
*
|
|
24
|
+
* Forward action parameters:
|
|
25
|
+
* - from_chat: Source chat to forward from
|
|
26
|
+
* - message_ids: Array of message IDs to forward
|
|
27
|
+
* - send_copy: Send as copy without "Forwarded from" header
|
|
28
|
+
* - remove_caption: Remove media captions when forwarding
|
|
29
|
+
*
|
|
30
|
+
* Returns (send):
|
|
31
|
+
* - The sent message with id, content, date, is_outgoing
|
|
32
|
+
*
|
|
33
|
+
* Returns (forward):
|
|
34
|
+
* - forwarded: Array of forwarded messages
|
|
35
|
+
* - count: Number of messages forwarded
|
|
36
|
+
*/
|
|
37
|
+
export declare function sendMessage(req: Request, args: z.infer<typeof SendMessageSchema>): Promise<SendMessageResult>;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=sendMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sendMessage.d.ts","sourceRoot":"","sources":["../../src/tools/sendMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAoB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,KAAK,iBAAiB,GAClB,kBAAkB,GAClB;IAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CA4G5B"}
|