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,28 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetChatSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedChat, type TransformedChatList } from "../transformers.js";
|
|
5
|
+
type GetChatResult = TransformedChat | TransformedChatList;
|
|
6
|
+
/**
|
|
7
|
+
* Get chat information - either a specific chat or list all chats
|
|
8
|
+
*
|
|
9
|
+
* Modes:
|
|
10
|
+
* - If `chat` is provided: Get detailed info for a specific chat
|
|
11
|
+
* - If `chat` is not provided: List all chats
|
|
12
|
+
*
|
|
13
|
+
* Parameters:
|
|
14
|
+
* - chat: Optional - Chat identifier (numeric ID or title/name to search)
|
|
15
|
+
* - chat_list: "main" or "archive" (default: "main")
|
|
16
|
+
* - limit: Max chats to return when listing (default: 100, max: 4000)
|
|
17
|
+
*
|
|
18
|
+
* Returns (single chat):
|
|
19
|
+
* - id, title, type, unread_count, last_message, is_pinned, is_muted
|
|
20
|
+
*
|
|
21
|
+
* Returns (list):
|
|
22
|
+
* - chats: Array of chat objects
|
|
23
|
+
* - total_count: Total number of chats
|
|
24
|
+
* - summary: Brief summary (e.g., "15 chats loaded, 3 unread messages")
|
|
25
|
+
*/
|
|
26
|
+
export declare function getChat(req: Request, args: z.infer<typeof GetChatSchema>): Promise<GetChatResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=getChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChat.d.ts","sourceRoot":"","sources":["../../src/tools/getChat.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;AAInD,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAE5B,KAAK,aAAa,GAAG,eAAe,GAAG,mBAAmB,CAAC;AAE3D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAClC,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveChat } from "../resolvers.js";
|
|
3
|
+
import { transformChat, transformChatList, } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get chat information - either a specific chat or list all chats
|
|
6
|
+
*
|
|
7
|
+
* Modes:
|
|
8
|
+
* - If `chat` is provided: Get detailed info for a specific chat
|
|
9
|
+
* - If `chat` is not provided: List all chats
|
|
10
|
+
*
|
|
11
|
+
* Parameters:
|
|
12
|
+
* - chat: Optional - Chat identifier (numeric ID or title/name to search)
|
|
13
|
+
* - chat_list: "main" or "archive" (default: "main")
|
|
14
|
+
* - limit: Max chats to return when listing (default: 100, max: 4000)
|
|
15
|
+
*
|
|
16
|
+
* Returns (single chat):
|
|
17
|
+
* - id, title, type, unread_count, last_message, is_pinned, is_muted
|
|
18
|
+
*
|
|
19
|
+
* Returns (list):
|
|
20
|
+
* - chats: Array of chat objects
|
|
21
|
+
* - total_count: Total number of chats
|
|
22
|
+
* - summary: Brief summary (e.g., "15 chats loaded, 3 unread messages")
|
|
23
|
+
*/
|
|
24
|
+
export async function getChat(req, args) {
|
|
25
|
+
return withClient(req, async (client) => {
|
|
26
|
+
const chatList = args.chat_list === "archive"
|
|
27
|
+
? { _: "chatListArchive" }
|
|
28
|
+
: { _: "chatListMain" };
|
|
29
|
+
const limit = args.limit ?? 100;
|
|
30
|
+
// First, load the chat list
|
|
31
|
+
await client.invoke({
|
|
32
|
+
_: "loadChats",
|
|
33
|
+
chat_list: chatList,
|
|
34
|
+
limit: limit,
|
|
35
|
+
});
|
|
36
|
+
// If chat is provided, get single chat info
|
|
37
|
+
if (args.chat !== undefined) {
|
|
38
|
+
// Resolve chat identifier (supports name-based lookup)
|
|
39
|
+
const chatId = await resolveChat(client, args.chat);
|
|
40
|
+
const result = await client.invoke({
|
|
41
|
+
_: "getChat",
|
|
42
|
+
chat_id: chatId,
|
|
43
|
+
});
|
|
44
|
+
return transformChat(result);
|
|
45
|
+
}
|
|
46
|
+
// Otherwise, list all chats
|
|
47
|
+
const chatsResult = (await client.invoke({
|
|
48
|
+
_: "getChats",
|
|
49
|
+
chat_list: chatList,
|
|
50
|
+
limit: limit,
|
|
51
|
+
}));
|
|
52
|
+
// Fetch full chat info for each chat
|
|
53
|
+
const chats = [];
|
|
54
|
+
for (const chatId of chatsResult.chat_ids) {
|
|
55
|
+
try {
|
|
56
|
+
const chat = await client.invoke({
|
|
57
|
+
_: "getChat",
|
|
58
|
+
chat_id: chatId,
|
|
59
|
+
});
|
|
60
|
+
chats.push(chat);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Skip chats that fail to load
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return transformChatList(chats, chatsResult.total_count);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=getChat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChat.js","sourceRoot":"","sources":["../../src/tools/getChat.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,iBAAiB,GAGlB,MAAM,oBAAoB,CAAC;AAI5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,IAAmC;IAEnC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,QAAQ,GACZ,IAAI,CAAC,SAAS,KAAK,SAAS;YAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,iBAA0B,EAAE;YACnC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAuB,EAAE,CAAC;QAErC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;QAEhC,4BAA4B;QAC5B,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,CAAC,EAAE,WAAW;YACd,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,KAAK;SACb,CAAC,CAAC;QAEH,4CAA4C;QAC5C,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5B,uDAAuD;YACvD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAEpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;gBACjC,CAAC,EAAE,SAAS;gBACZ,OAAO,EAAE,MAAM;aAChB,CAAC,CAAC;YAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,4BAA4B;QAC5B,MAAM,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;YACvC,CAAC,EAAE,UAAU;YACb,SAAS,EAAE,QAAQ;YACnB,KAAK,EAAE,KAAK;SACb,CAAC,CAA6B,CAAC;QAEhC,qCAAqC;QACrC,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC/B,CAAC,EAAE,SAAS;oBACZ,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,OAAO,iBAAiB,CAAC,KAAK,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetChatMembersSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedMember } from "../transformers.js";
|
|
5
|
+
interface GetChatMembersResult {
|
|
6
|
+
members: TransformedMember[];
|
|
7
|
+
total_count: number;
|
|
8
|
+
chat_title?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get members of a chat - supports filtering and search
|
|
12
|
+
*
|
|
13
|
+
* Filters:
|
|
14
|
+
* - filter="recent" (default): Get recently active members
|
|
15
|
+
* - filter="administrators": Get only administrators
|
|
16
|
+
* - filter="banned": Get banned members
|
|
17
|
+
* - filter="bots": Get bot members
|
|
18
|
+
* - filter="search": Search members by name/username
|
|
19
|
+
*
|
|
20
|
+
* Parameters:
|
|
21
|
+
* - chat: Chat identifier (numeric ID or chat title)
|
|
22
|
+
* - filter: "recent" | "administrators" | "banned" | "bots" | "search"
|
|
23
|
+
* - query: Search query (only used with "search" and "banned" filters)
|
|
24
|
+
* - offset: Pagination offset (default: 0)
|
|
25
|
+
* - limit: Max members to return (default: 200, max: 200)
|
|
26
|
+
*
|
|
27
|
+
* Returns:
|
|
28
|
+
* - members: Array of members with user_id, name, username, role
|
|
29
|
+
* - total_count: Total member count
|
|
30
|
+
* - chat_title: Name of the chat
|
|
31
|
+
*/
|
|
32
|
+
export declare function getChatMembers(req: Request, args: z.infer<typeof GetChatMembersSchema>): Promise<GetChatMembersResult>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=getChatMembers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChatMembers.d.ts","sourceRoot":"","sources":["../../src/tools/getChatMembers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAI1D,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE9E,UAAU,oBAAoB;IAC5B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GACzC,OAAO,CAAC,oBAAoB,CAAC,CA0J/B"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveChat } from "../resolvers.js";
|
|
3
|
+
import { transformMembers } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get members of a chat - supports filtering and search
|
|
6
|
+
*
|
|
7
|
+
* Filters:
|
|
8
|
+
* - filter="recent" (default): Get recently active members
|
|
9
|
+
* - filter="administrators": Get only administrators
|
|
10
|
+
* - filter="banned": Get banned members
|
|
11
|
+
* - filter="bots": Get bot members
|
|
12
|
+
* - filter="search": Search members by name/username
|
|
13
|
+
*
|
|
14
|
+
* Parameters:
|
|
15
|
+
* - chat: Chat identifier (numeric ID or chat title)
|
|
16
|
+
* - filter: "recent" | "administrators" | "banned" | "bots" | "search"
|
|
17
|
+
* - query: Search query (only used with "search" and "banned" filters)
|
|
18
|
+
* - offset: Pagination offset (default: 0)
|
|
19
|
+
* - limit: Max members to return (default: 200, max: 200)
|
|
20
|
+
*
|
|
21
|
+
* Returns:
|
|
22
|
+
* - members: Array of members with user_id, name, username, role
|
|
23
|
+
* - total_count: Total member count
|
|
24
|
+
* - chat_title: Name of the chat
|
|
25
|
+
*/
|
|
26
|
+
export async function getChatMembers(req, args) {
|
|
27
|
+
return withClient(req, async (client) => {
|
|
28
|
+
const filter = args.filter ?? "recent";
|
|
29
|
+
const limit = args.limit ?? 200;
|
|
30
|
+
const offset = args.offset ?? 0;
|
|
31
|
+
// Load chats first
|
|
32
|
+
await client.invoke({
|
|
33
|
+
_: "loadChats",
|
|
34
|
+
chat_list: { _: "chatListMain" },
|
|
35
|
+
limit: 100,
|
|
36
|
+
});
|
|
37
|
+
// Resolve chat identifier
|
|
38
|
+
const chatId = await resolveChat(client, args.chat);
|
|
39
|
+
// Get chat info for title and type detection
|
|
40
|
+
const chat = (await client.invoke({
|
|
41
|
+
_: "getChat",
|
|
42
|
+
chat_id: chatId,
|
|
43
|
+
}));
|
|
44
|
+
const chatType = chat.type;
|
|
45
|
+
// For administrators filter, we can use getChatAdministrators which works for all chat types
|
|
46
|
+
if (filter === "administrators") {
|
|
47
|
+
const result = (await client.invoke({
|
|
48
|
+
_: "getChatAdministrators",
|
|
49
|
+
chat_id: chatId,
|
|
50
|
+
}));
|
|
51
|
+
// Build user cache for admin names
|
|
52
|
+
const userCache = new Map();
|
|
53
|
+
for (const admin of result.administrators ?? []) {
|
|
54
|
+
const a = admin;
|
|
55
|
+
if (a.user_id) {
|
|
56
|
+
try {
|
|
57
|
+
const user = (await client.invoke({
|
|
58
|
+
_: "getUser",
|
|
59
|
+
user_id: a.user_id,
|
|
60
|
+
}));
|
|
61
|
+
userCache.set(a.user_id, {
|
|
62
|
+
name: `${user.first_name ?? ""} ${user.last_name ?? ""}`.trim(),
|
|
63
|
+
username: user.usernames?.active_usernames?.[0],
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// User info not available
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Transform administrators (they use a different format)
|
|
72
|
+
const admins = (result.administrators ?? []).map((admin) => {
|
|
73
|
+
const a = admin;
|
|
74
|
+
const userInfo = userCache.get(a.user_id ?? 0);
|
|
75
|
+
return {
|
|
76
|
+
user_id: a.user_id ?? 0,
|
|
77
|
+
name: userInfo?.name ?? `User ${a.user_id}`,
|
|
78
|
+
username: userInfo?.username,
|
|
79
|
+
status: "administrator",
|
|
80
|
+
role: a.is_owner ? "owner" : a.custom_title || "administrator",
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
return {
|
|
84
|
+
members: admins,
|
|
85
|
+
total_count: admins.length,
|
|
86
|
+
chat_title: chat.title,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// For other filters, need supergroup
|
|
90
|
+
if (chatType?._ !== "chatTypeSupergroup" || !chatType.supergroup_id) {
|
|
91
|
+
throw new Error(`Filter "${filter}" is only supported for supergroups and channels. Use filter="administrators" for basic groups.`);
|
|
92
|
+
}
|
|
93
|
+
// Build supergroup filter
|
|
94
|
+
let supergroupFilter;
|
|
95
|
+
switch (filter) {
|
|
96
|
+
case "banned":
|
|
97
|
+
supergroupFilter = {
|
|
98
|
+
_: "supergroupMembersFilterBanned",
|
|
99
|
+
query: args.query ?? "",
|
|
100
|
+
};
|
|
101
|
+
break;
|
|
102
|
+
case "bots":
|
|
103
|
+
supergroupFilter = { _: "supergroupMembersFilterBots" };
|
|
104
|
+
break;
|
|
105
|
+
case "search":
|
|
106
|
+
supergroupFilter = {
|
|
107
|
+
_: "supergroupMembersFilterSearch",
|
|
108
|
+
query: args.query ?? "",
|
|
109
|
+
};
|
|
110
|
+
break;
|
|
111
|
+
case "recent":
|
|
112
|
+
default:
|
|
113
|
+
supergroupFilter = { _: "supergroupMembersFilterRecent" };
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
const result = (await client.invoke({
|
|
117
|
+
_: "getSupergroupMembers",
|
|
118
|
+
supergroup_id: chatType.supergroup_id,
|
|
119
|
+
filter: supergroupFilter,
|
|
120
|
+
offset: offset,
|
|
121
|
+
limit: limit,
|
|
122
|
+
}));
|
|
123
|
+
// Build user cache for member names
|
|
124
|
+
const userCache = new Map();
|
|
125
|
+
for (const member of result.members ?? []) {
|
|
126
|
+
const m = member;
|
|
127
|
+
if (m.member_id?.user_id) {
|
|
128
|
+
try {
|
|
129
|
+
const user = (await client.invoke({
|
|
130
|
+
_: "getUser",
|
|
131
|
+
user_id: m.member_id.user_id,
|
|
132
|
+
}));
|
|
133
|
+
userCache.set(m.member_id.user_id, {
|
|
134
|
+
name: `${user.first_name ?? ""} ${user.last_name ?? ""}`.trim(),
|
|
135
|
+
username: user.usernames?.active_usernames?.[0],
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
// User info not available
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
members: transformMembers(result.members ?? [], userCache),
|
|
145
|
+
total_count: result.total_count,
|
|
146
|
+
chat_title: chat.title,
|
|
147
|
+
};
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=getChatMembers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getChatMembers.js","sourceRoot":"","sources":["../../src/tools/getChatMembers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetContactsSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedContact } from "../transformers.js";
|
|
5
|
+
interface GetContactsResult {
|
|
6
|
+
contacts: TransformedContact[];
|
|
7
|
+
total_count: number;
|
|
8
|
+
query?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get contacts - list all or search by name/username
|
|
12
|
+
*
|
|
13
|
+
* Modes:
|
|
14
|
+
* - If `query` is not provided: List all contacts
|
|
15
|
+
* - If `query` is provided: Search contacts by name or username
|
|
16
|
+
*
|
|
17
|
+
* Parameters:
|
|
18
|
+
* - query: Optional search text (name or username)
|
|
19
|
+
* - limit: Max results when searching (default: 50, max: 200)
|
|
20
|
+
*
|
|
21
|
+
* Returns:
|
|
22
|
+
* - contacts: Array of contacts with id, name, username, phone, status
|
|
23
|
+
* - total_count: Total number of contacts/matches
|
|
24
|
+
* - query: The search query used (only when searching)
|
|
25
|
+
*/
|
|
26
|
+
export declare function getContacts(req: Request, args: z.infer<typeof GetContactsSchema>): Promise<GetContactsResult>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=getContacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getContacts.d.ts","sourceRoot":"","sources":["../../src/tools/getContacts.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,EAAqB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEhF,UAAU,iBAAiB;IACzB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,iBAAiB,CAAC,CAyD5B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { transformContacts } from "../transformers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Get contacts - list all or search by name/username
|
|
5
|
+
*
|
|
6
|
+
* Modes:
|
|
7
|
+
* - If `query` is not provided: List all contacts
|
|
8
|
+
* - If `query` is provided: Search contacts by name or username
|
|
9
|
+
*
|
|
10
|
+
* Parameters:
|
|
11
|
+
* - query: Optional search text (name or username)
|
|
12
|
+
* - limit: Max results when searching (default: 50, max: 200)
|
|
13
|
+
*
|
|
14
|
+
* Returns:
|
|
15
|
+
* - contacts: Array of contacts with id, name, username, phone, status
|
|
16
|
+
* - total_count: Total number of contacts/matches
|
|
17
|
+
* - query: The search query used (only when searching)
|
|
18
|
+
*/
|
|
19
|
+
export async function getContacts(req, args) {
|
|
20
|
+
return withClient(req, async (client) => {
|
|
21
|
+
const limit = args.limit ?? 50;
|
|
22
|
+
if (args.query) {
|
|
23
|
+
// Search contacts by name/username
|
|
24
|
+
const result = (await client.invoke({
|
|
25
|
+
_: "searchContacts",
|
|
26
|
+
query: args.query,
|
|
27
|
+
limit: limit,
|
|
28
|
+
}));
|
|
29
|
+
// Fetch full user info for each contact
|
|
30
|
+
const users = [];
|
|
31
|
+
for (const userId of result.user_ids) {
|
|
32
|
+
try {
|
|
33
|
+
const user = await client.invoke({
|
|
34
|
+
_: "getUser",
|
|
35
|
+
user_id: userId,
|
|
36
|
+
});
|
|
37
|
+
users.push(user);
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Skip users that fail to load
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
contacts: transformContacts(users),
|
|
45
|
+
total_count: result.total_count,
|
|
46
|
+
query: args.query,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// List all contacts
|
|
50
|
+
const result = (await client.invoke({
|
|
51
|
+
_: "getContacts",
|
|
52
|
+
}));
|
|
53
|
+
// Fetch full user info for each contact
|
|
54
|
+
const users = [];
|
|
55
|
+
for (const userId of result.user_ids) {
|
|
56
|
+
try {
|
|
57
|
+
const user = await client.invoke({
|
|
58
|
+
_: "getUser",
|
|
59
|
+
user_id: userId,
|
|
60
|
+
});
|
|
61
|
+
users.push(user);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Skip users that fail to load
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
contacts: transformContacts(users),
|
|
69
|
+
total_count: result.total_count,
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=getContacts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getContacts.js","sourceRoot":"","sources":["../../src/tools/getContacts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAA2B,MAAM,oBAAoB,CAAC;AAQhF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,GAAY,EACZ,IAAuC;IAEvC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,mCAAmC;YACnC,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClC,CAAC,EAAE,gBAAgB;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC,CAAkB,CAAC;YAErB,wCAAwC;YACxC,MAAM,KAAK,GAAc,EAAE,CAAC;YAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;wBAC/B,CAAC,EAAE,SAAS;wBACZ,OAAO,EAAE,MAAM;qBAChB,CAAC,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnB,CAAC;gBAAC,MAAM,CAAC;oBACP,+BAA+B;gBACjC,CAAC;YACH,CAAC;YAED,OAAO;gBACL,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;gBAClC,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;aAClB,CAAC;QACJ,CAAC;QAED,oBAAoB;QACpB,MAAM,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;YAClC,CAAC,EAAE,aAAa;SACjB,CAAC,CAAkB,CAAC;QAErB,wCAAwC;QACxC,MAAM,KAAK,GAAc,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;oBAC/B,CAAC,EAAE,SAAS;oBACZ,OAAO,EAAE,MAAM;iBAChB,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,+BAA+B;YACjC,CAAC;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,iBAAiB,CAAC,KAAK,CAAC;YAClC,WAAW,EAAE,MAAM,CAAC,WAAW;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetFileSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedFile } from "../transformers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get file metadata
|
|
7
|
+
*
|
|
8
|
+
* Parameters:
|
|
9
|
+
* - file_id: File identifier (from message content)
|
|
10
|
+
*
|
|
11
|
+
* Returns:
|
|
12
|
+
* - id: File identifier
|
|
13
|
+
* - size: Human-readable size (e.g., "1.5 MB")
|
|
14
|
+
* - size_bytes: Size in bytes
|
|
15
|
+
* - remote_id: Remote file identifier
|
|
16
|
+
*
|
|
17
|
+
* Note: Download functionality is not supported in stateless mode since
|
|
18
|
+
* session files are cleaned up after each request.
|
|
19
|
+
*/
|
|
20
|
+
export declare function getFile(req: Request, args: z.infer<typeof GetFileSchema>): Promise<TransformedFile>;
|
|
21
|
+
//# sourceMappingURL=getFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFile.d.ts","sourceRoot":"","sources":["../../src/tools/getFile.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;AAEnD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,OAAO,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,GAClC,OAAO,CAAC,eAAe,CAAC,CAgB1B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { transformFile } from "../transformers.js";
|
|
3
|
+
/**
|
|
4
|
+
* Get file metadata
|
|
5
|
+
*
|
|
6
|
+
* Parameters:
|
|
7
|
+
* - file_id: File identifier (from message content)
|
|
8
|
+
*
|
|
9
|
+
* Returns:
|
|
10
|
+
* - id: File identifier
|
|
11
|
+
* - size: Human-readable size (e.g., "1.5 MB")
|
|
12
|
+
* - size_bytes: Size in bytes
|
|
13
|
+
* - remote_id: Remote file identifier
|
|
14
|
+
*
|
|
15
|
+
* Note: Download functionality is not supported in stateless mode since
|
|
16
|
+
* session files are cleaned up after each request.
|
|
17
|
+
*/
|
|
18
|
+
export async function getFile(req, args) {
|
|
19
|
+
return withClient(req, async (client) => {
|
|
20
|
+
// Load chats first to populate file references in local database
|
|
21
|
+
await client.invoke({
|
|
22
|
+
_: "loadChats",
|
|
23
|
+
chat_list: { _: "chatListMain" },
|
|
24
|
+
limit: 100,
|
|
25
|
+
});
|
|
26
|
+
const result = await client.invoke({
|
|
27
|
+
_: "getFile",
|
|
28
|
+
file_id: args.file_id,
|
|
29
|
+
});
|
|
30
|
+
return transformFile(result);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=getFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getFile.js","sourceRoot":"","sources":["../../src/tools/getFile.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAwB,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,GAAY,EACZ,IAAmC;IAEnC,OAAO,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACtC,iEAAiE;QACjE,MAAM,MAAM,CAAC,MAAM,CAAC;YAClB,CAAC,EAAE,WAAW;YACd,SAAS,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE;YAChC,KAAK,EAAE,GAAG;SACX,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,CAAC,EAAE,SAAS;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAC,CAAC;QAEH,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetGroupSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedGroup } from "../transformers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get group information - supports basic groups, supergroups, and channels
|
|
7
|
+
*
|
|
8
|
+
* Type detection:
|
|
9
|
+
* - type="auto" (default): Automatically detect group type from chat
|
|
10
|
+
* - type="supergroup": Treat as supergroup/channel
|
|
11
|
+
* - type="basic_group": Treat as basic group
|
|
12
|
+
*
|
|
13
|
+
* Parameters:
|
|
14
|
+
* - group: Group identifier (numeric ID or group name)
|
|
15
|
+
* - type: "auto" | "supergroup" | "basic_group" (default: "auto")
|
|
16
|
+
*
|
|
17
|
+
* Returns:
|
|
18
|
+
* - id: Group's numeric ID
|
|
19
|
+
* - name: Group name
|
|
20
|
+
* - type: "basic_group", "supergroup", or "channel"
|
|
21
|
+
* - member_count: Number of members
|
|
22
|
+
* - is_verified: Whether group is verified (supergroups only)
|
|
23
|
+
* - is_scam: Whether group is marked as scam (supergroups only)
|
|
24
|
+
* - join_date: When user joined the group
|
|
25
|
+
*/
|
|
26
|
+
export declare function getGroup(req: Request, args: z.infer<typeof GetGroupSchema>): Promise<TransformedGroup>;
|
|
27
|
+
//# sourceMappingURL=getGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGroup.d.ts","sourceRoot":"","sources":["../../src/tools/getGroup.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,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,GACnC,OAAO,CAAC,gBAAgB,CAAC,CA8F3B"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { withClient } from "../helpers.js";
|
|
2
|
+
import { resolveChat, resolveSupergroup, resolveBasicGroup } from "../resolvers.js";
|
|
3
|
+
import { transformSupergroup, transformBasicGroup, } from "../transformers.js";
|
|
4
|
+
/**
|
|
5
|
+
* Get group information - supports basic groups, supergroups, and channels
|
|
6
|
+
*
|
|
7
|
+
* Type detection:
|
|
8
|
+
* - type="auto" (default): Automatically detect group type from chat
|
|
9
|
+
* - type="supergroup": Treat as supergroup/channel
|
|
10
|
+
* - type="basic_group": Treat as basic group
|
|
11
|
+
*
|
|
12
|
+
* Parameters:
|
|
13
|
+
* - group: Group identifier (numeric ID or group name)
|
|
14
|
+
* - type: "auto" | "supergroup" | "basic_group" (default: "auto")
|
|
15
|
+
*
|
|
16
|
+
* Returns:
|
|
17
|
+
* - id: Group's numeric ID
|
|
18
|
+
* - name: Group name
|
|
19
|
+
* - type: "basic_group", "supergroup", or "channel"
|
|
20
|
+
* - member_count: Number of members
|
|
21
|
+
* - is_verified: Whether group is verified (supergroups only)
|
|
22
|
+
* - is_scam: Whether group is marked as scam (supergroups only)
|
|
23
|
+
* - join_date: When user joined the group
|
|
24
|
+
*/
|
|
25
|
+
export async function getGroup(req, args) {
|
|
26
|
+
return withClient(req, async (client) => {
|
|
27
|
+
const groupType = args.type ?? "auto";
|
|
28
|
+
// Load chats first
|
|
29
|
+
await client.invoke({
|
|
30
|
+
_: "loadChats",
|
|
31
|
+
chat_list: { _: "chatListMain" },
|
|
32
|
+
limit: 100,
|
|
33
|
+
});
|
|
34
|
+
if (groupType === "basic_group") {
|
|
35
|
+
// Explicitly treat as basic group
|
|
36
|
+
const basicGroupId = await resolveBasicGroup(client, args.group);
|
|
37
|
+
const result = await client.invoke({
|
|
38
|
+
_: "getBasicGroup",
|
|
39
|
+
basic_group_id: basicGroupId,
|
|
40
|
+
});
|
|
41
|
+
// Get chat info for name
|
|
42
|
+
const chatId = -basicGroupId;
|
|
43
|
+
let chatInfo;
|
|
44
|
+
try {
|
|
45
|
+
chatInfo = (await client.invoke({
|
|
46
|
+
_: "getChat",
|
|
47
|
+
chat_id: chatId,
|
|
48
|
+
}));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Chat info not available
|
|
52
|
+
}
|
|
53
|
+
return transformBasicGroup(result, chatInfo);
|
|
54
|
+
}
|
|
55
|
+
if (groupType === "supergroup") {
|
|
56
|
+
// Explicitly treat as supergroup
|
|
57
|
+
const supergroupId = await resolveSupergroup(client, args.group);
|
|
58
|
+
const result = await client.invoke({
|
|
59
|
+
_: "getSupergroup",
|
|
60
|
+
supergroup_id: supergroupId,
|
|
61
|
+
});
|
|
62
|
+
// Get chat info for name
|
|
63
|
+
const chatId = -1000000000000 - supergroupId;
|
|
64
|
+
let chatInfo;
|
|
65
|
+
try {
|
|
66
|
+
chatInfo = (await client.invoke({
|
|
67
|
+
_: "getChat",
|
|
68
|
+
chat_id: chatId,
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Chat info not available
|
|
73
|
+
}
|
|
74
|
+
return transformSupergroup(result, chatInfo);
|
|
75
|
+
}
|
|
76
|
+
// Auto-detect: First resolve to chat, then determine type
|
|
77
|
+
const chatId = await resolveChat(client, args.group);
|
|
78
|
+
const chat = (await client.invoke({
|
|
79
|
+
_: "getChat",
|
|
80
|
+
chat_id: chatId,
|
|
81
|
+
}));
|
|
82
|
+
const chatType = chat.type;
|
|
83
|
+
if (chatType?._ === "chatTypeSupergroup" && chatType.supergroup_id) {
|
|
84
|
+
const result = await client.invoke({
|
|
85
|
+
_: "getSupergroup",
|
|
86
|
+
supergroup_id: chatType.supergroup_id,
|
|
87
|
+
});
|
|
88
|
+
return transformSupergroup(result, chat);
|
|
89
|
+
}
|
|
90
|
+
if (chatType?._ === "chatTypeBasicGroup" && chatType.basic_group_id) {
|
|
91
|
+
const result = await client.invoke({
|
|
92
|
+
_: "getBasicGroup",
|
|
93
|
+
basic_group_id: chatType.basic_group_id,
|
|
94
|
+
});
|
|
95
|
+
return transformBasicGroup(result, chat);
|
|
96
|
+
}
|
|
97
|
+
throw new Error(`"${args.group}" is not a group. It appears to be a ${chatType?._?.replace("chatType", "").toLowerCase() ?? "unknown"} chat.`);
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=getGroup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getGroup.js","sourceRoot":"","sources":["../../src/tools/getGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Request } from "express";
|
|
2
|
+
import type { z } from "zod";
|
|
3
|
+
import type { GetMeSchema } from "../schemas.js";
|
|
4
|
+
import { type TransformedUser } from "../transformers.js";
|
|
5
|
+
/**
|
|
6
|
+
* Get information about the current Telegram user (the authenticated user)
|
|
7
|
+
*
|
|
8
|
+
* Returns a simplified user profile with:
|
|
9
|
+
* - id: User's numeric ID
|
|
10
|
+
* - name: Full name
|
|
11
|
+
* - username: @username if set
|
|
12
|
+
* - phone: Phone number if visible
|
|
13
|
+
* - status: Online status (e.g., "online", "last seen 2 hours ago")
|
|
14
|
+
* - is_premium: Whether user has Telegram Premium
|
|
15
|
+
*/
|
|
16
|
+
export declare function getMe(req: Request, _args: z.infer<typeof GetMeSchema>): Promise<TransformedUser>;
|
|
17
|
+
//# sourceMappingURL=getMe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMe.d.ts","sourceRoot":"","sources":["../../src/tools/getMe.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,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEzE;;;;;;;;;;GAUG;AACH,wBAAsB,KAAK,CACzB,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,GACjC,OAAO,CAAC,eAAe,CAAC,CAK1B"}
|