@hardlydifficult/chat 1.1.27 → 1.1.28
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 +32 -6
- package/dist/Channel.d.ts +30 -2
- package/dist/Channel.d.ts.map +1 -1
- package/dist/Channel.js +68 -1
- package/dist/Channel.js.map +1 -1
- package/dist/ChatClient.d.ts +7 -1
- package/dist/ChatClient.d.ts.map +1 -1
- package/dist/ChatClient.js +8 -0
- package/dist/ChatClient.js.map +1 -1
- package/dist/Message.d.ts +3 -3
- package/dist/Message.d.ts.map +1 -1
- package/dist/Message.js +2 -2
- package/dist/Message.js.map +1 -1
- package/dist/discord/DiscordChatClient.d.ts +3 -2
- package/dist/discord/DiscordChatClient.d.ts.map +1 -1
- package/dist/discord/DiscordChatClient.js +18 -2
- package/dist/discord/DiscordChatClient.js.map +1 -1
- package/dist/discord/getMessages.d.ts +7 -0
- package/dist/discord/getMessages.d.ts.map +1 -0
- package/dist/discord/getMessages.js +87 -0
- package/dist/discord/getMessages.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/memberMatching.d.ts +11 -0
- package/dist/memberMatching.d.ts.map +1 -0
- package/dist/memberMatching.js +114 -0
- package/dist/memberMatching.js.map +1 -0
- package/dist/slack/SlackChatClient.d.ts +5 -2
- package/dist/slack/SlackChatClient.d.ts.map +1 -1
- package/dist/slack/SlackChatClient.js +29 -2
- package/dist/slack/SlackChatClient.js.map +1 -1
- package/dist/slack/fetchChannelMembers.d.ts.map +1 -1
- package/dist/slack/fetchChannelMembers.js +3 -0
- package/dist/slack/fetchChannelMembers.js.map +1 -1
- package/dist/slack/getMessages.d.ts +12 -0
- package/dist/slack/getMessages.d.ts.map +1 -0
- package/dist/slack/getMessages.js +148 -0
- package/dist/slack/getMessages.js.map +1 -0
- package/dist/slack/messageOperations.d.ts +2 -2
- package/dist/slack/messageOperations.d.ts.map +1 -1
- package/dist/slack/messageOperations.js +16 -14
- package/dist/slack/messageOperations.js.map +1 -1
- package/dist/types.d.ts +38 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMessages = getMessages;
|
|
4
|
+
/**
|
|
5
|
+
* Fetch and normalize recent Discord messages with optional filters.
|
|
6
|
+
*/
|
|
7
|
+
async function getMessages(channel, channelId, options = {}, meId) {
|
|
8
|
+
const limit = Math.min(Math.max(options.limit ?? 50, 1), 100);
|
|
9
|
+
const messages = await channel.messages.fetch({ limit });
|
|
10
|
+
const afterDate = toDate(options.after);
|
|
11
|
+
const beforeDate = toDate(options.before);
|
|
12
|
+
let authorFilter;
|
|
13
|
+
if (options.author === "me") {
|
|
14
|
+
authorFilter = meId;
|
|
15
|
+
}
|
|
16
|
+
else if (options.author !== undefined) {
|
|
17
|
+
authorFilter = normalizeAuthorFilter(options.author);
|
|
18
|
+
}
|
|
19
|
+
const output = [];
|
|
20
|
+
for (const [, message] of messages) {
|
|
21
|
+
if (afterDate !== undefined && message.createdAt <= afterDate) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
if (beforeDate !== undefined && message.createdAt >= beforeDate) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const authorId = message.author.id;
|
|
28
|
+
const authorUsername = message.author.username;
|
|
29
|
+
if (authorFilter !== undefined) {
|
|
30
|
+
const normalizedUsername = authorUsername.toLowerCase();
|
|
31
|
+
if (authorId !== authorFilter &&
|
|
32
|
+
normalizedUsername !== authorFilter.toLowerCase()) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const attachments = [];
|
|
37
|
+
for (const [, attachment] of message.attachments) {
|
|
38
|
+
attachments.push({
|
|
39
|
+
url: attachment.url,
|
|
40
|
+
name: attachment.name,
|
|
41
|
+
contentType: attachment.contentType ?? undefined,
|
|
42
|
+
size: attachment.size,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
output.push({
|
|
46
|
+
id: message.id,
|
|
47
|
+
channelId,
|
|
48
|
+
platform: "discord",
|
|
49
|
+
content: message.content,
|
|
50
|
+
author: { id: authorId, username: authorUsername },
|
|
51
|
+
timestamp: message.createdAt,
|
|
52
|
+
attachments,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return output;
|
|
56
|
+
}
|
|
57
|
+
function toDate(input) {
|
|
58
|
+
if (input === undefined) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
if (input instanceof Date) {
|
|
62
|
+
return Number.isNaN(input.getTime()) ? undefined : input;
|
|
63
|
+
}
|
|
64
|
+
if (typeof input === "number") {
|
|
65
|
+
const ms = input > 10_000_000_000 ? input : input * 1000;
|
|
66
|
+
const date = new Date(ms);
|
|
67
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
68
|
+
}
|
|
69
|
+
const trimmed = input.trim();
|
|
70
|
+
if (trimmed === "") {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
if (/^\d+(\.\d+)?$/.test(trimmed)) {
|
|
74
|
+
return toDate(Number(trimmed));
|
|
75
|
+
}
|
|
76
|
+
const date = new Date(trimmed);
|
|
77
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
78
|
+
}
|
|
79
|
+
function normalizeAuthorFilter(author) {
|
|
80
|
+
const trimmed = author.trim();
|
|
81
|
+
const mentionMatch = /^<@([^>]+)>$/.exec(trimmed);
|
|
82
|
+
if (mentionMatch?.[1] !== undefined && mentionMatch[1] !== "") {
|
|
83
|
+
return mentionMatch[1];
|
|
84
|
+
}
|
|
85
|
+
return trimmed.replace(/^@/, "").toLowerCase();
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=getMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessages.js","sourceRoot":"","sources":["../../src/discord/getMessages.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { type Attachment, type User, type Member, type DiscordConfig, type SlackConfig, type ChatConfig, type Platform, type ReactionEvent, type ReactionCallback, type MessageEvent, type MessageContent, type FileAttachment, type ThreadData, type DisconnectCallback, type ErrorCallback, } from "./types";
|
|
1
|
+
export { type Attachment, type ClientIdentity, type User, type Member, type DiscordConfig, type SlackConfig, type ChatConfig, type Platform, type ReactionEvent, type ReactionCallback, type MessageEvent, type MessageContent, type MessageAuthorFilter, type MessageQueryOptions, type FileAttachment, type DeleteMessageOptions, type TimestampInput, type ThreadData, type DisconnectCallback, type ErrorCallback, } from "./types";
|
|
2
2
|
export { MESSAGE_LIMITS } from "./constants";
|
|
3
3
|
export { ChatClient } from "./ChatClient";
|
|
4
4
|
export { Channel } from "./Channel";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAW/D"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,aAAa,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG1C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAW/D"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAkEA,4CAWC;AArDD,YAAY;AACZ,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAEvB,eAAe;AACf,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AACnB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA;AAC5B,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,mCAAkC;AAAzB,gGAAA,MAAM,OAAA;AACf,mDAA6E;AAApE,sHAAA,oBAAoB,OAAA;AAE7B,2BAA2B;AAC3B,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA;AAC1B,iCAA0C;AAAjC,wGAAA,eAAe,OAAA;AAIxB,uCAA8C;AAC9C,mCAA0C;AAG1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAgB,gBAAgB,CAAC,MAAkB;IACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,SAAS;YACZ,OAAO,IAAI,2BAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,OAAO;YACV,OAAO,IAAI,uBAAe,CAAC,MAAM,CAAC,CAAC;QACrC;YACE,MAAM,IAAI,KAAK,CACb,0BAA2B,MAA2B,CAAC,IAAI,EAAE,CAC9D,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Member } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Extract a user ID from a mention string like "<@U123>".
|
|
4
|
+
*/
|
|
5
|
+
export declare function extractMentionId(input: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Find the best fuzzy match for a member query.
|
|
8
|
+
* Returns null when no match or an ambiguous tie exists.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findBestMemberMatch(members: Member[], rawQuery: string): Member | null;
|
|
11
|
+
//# sourceMappingURL=memberMatching.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memberMatching.d.ts","sourceRoot":"","sources":["../src/memberMatching.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAQzC;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO7D;AAyCD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAyEf"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.extractMentionId = extractMentionId;
|
|
4
|
+
exports.findBestMemberMatch = findBestMemberMatch;
|
|
5
|
+
const MENTION_ID_REGEX = /^<@([^>|]+)(?:\|[^>]+)?>$/;
|
|
6
|
+
function normalizeLookup(input) {
|
|
7
|
+
return input.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Extract a user ID from a mention string like "<@U123>".
|
|
11
|
+
*/
|
|
12
|
+
function extractMentionId(input) {
|
|
13
|
+
const trimmed = input.trim();
|
|
14
|
+
const match = MENTION_ID_REGEX.exec(trimmed);
|
|
15
|
+
if (match?.[1] !== undefined && match[1] !== "") {
|
|
16
|
+
return match[1];
|
|
17
|
+
}
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
function buildMemberAliases(member) {
|
|
21
|
+
const aliases = [
|
|
22
|
+
{ value: member.id, weight: 0 },
|
|
23
|
+
{ value: member.mention, weight: 0 },
|
|
24
|
+
{ value: member.username, weight: 1 },
|
|
25
|
+
{ value: member.displayName, weight: 2 },
|
|
26
|
+
];
|
|
27
|
+
if (member.email !== undefined && member.email !== "") {
|
|
28
|
+
aliases.push({ value: member.email, weight: 1 });
|
|
29
|
+
const localPart = member.email.split("@")[0];
|
|
30
|
+
if (localPart !== "") {
|
|
31
|
+
aliases.push({ value: localPart, weight: 2 });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const normalizedUsername = member.username.replace(/^@/, "");
|
|
35
|
+
if (normalizedUsername !== "") {
|
|
36
|
+
aliases.push({ value: normalizedUsername, weight: 1 });
|
|
37
|
+
for (const part of normalizedUsername.split(/[._-]/)) {
|
|
38
|
+
if (part !== "") {
|
|
39
|
+
aliases.push({ value: part, weight: 3 });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const firstName = member.displayName.trim().split(/\s+/)[0] ?? "";
|
|
44
|
+
if (firstName !== "") {
|
|
45
|
+
aliases.push({ value: firstName, weight: 3 });
|
|
46
|
+
}
|
|
47
|
+
return aliases;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Find the best fuzzy match for a member query.
|
|
51
|
+
* Returns null when no match or an ambiguous tie exists.
|
|
52
|
+
*/
|
|
53
|
+
function findBestMemberMatch(members, rawQuery) {
|
|
54
|
+
const query = rawQuery.trim();
|
|
55
|
+
if (query === "") {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const mentionId = extractMentionId(query);
|
|
59
|
+
const directIdQuery = mentionId ?? query.replace(/^@/, "");
|
|
60
|
+
const directMatch = members.find((member) => member.id === directIdQuery);
|
|
61
|
+
if (directMatch !== undefined) {
|
|
62
|
+
return directMatch;
|
|
63
|
+
}
|
|
64
|
+
const normalizedQuery = normalizeLookup(query.replace(/^@/, ""));
|
|
65
|
+
if (normalizedQuery === "") {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
let bestScore = Number.POSITIVE_INFINITY;
|
|
69
|
+
let bestMember = null;
|
|
70
|
+
let isAmbiguous = false;
|
|
71
|
+
for (const member of members) {
|
|
72
|
+
const aliases = buildMemberAliases(member);
|
|
73
|
+
let memberScore = Number.POSITIVE_INFINITY;
|
|
74
|
+
const queryLongEnoughForPrefix = normalizedQuery.length >= 2;
|
|
75
|
+
const queryLongEnoughForContains = normalizedQuery.length >= 3;
|
|
76
|
+
for (const alias of aliases) {
|
|
77
|
+
const normalizedAlias = normalizeLookup(alias.value);
|
|
78
|
+
if (normalizedAlias === "") {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (normalizedAlias === normalizedQuery) {
|
|
82
|
+
memberScore = Math.min(memberScore, alias.weight);
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
if (queryLongEnoughForPrefix &&
|
|
86
|
+
normalizedAlias.startsWith(normalizedQuery)) {
|
|
87
|
+
memberScore = Math.min(memberScore, alias.weight + 10);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (queryLongEnoughForContains &&
|
|
91
|
+
normalizedAlias.includes(normalizedQuery)) {
|
|
92
|
+
memberScore = Math.min(memberScore, alias.weight + 20);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
if (!Number.isFinite(memberScore)) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (memberScore < bestScore) {
|
|
99
|
+
bestScore = memberScore;
|
|
100
|
+
bestMember = member;
|
|
101
|
+
isAmbiguous = false;
|
|
102
|
+
}
|
|
103
|
+
else if (memberScore === bestScore &&
|
|
104
|
+
bestMember !== null &&
|
|
105
|
+
bestMember.id !== member.id) {
|
|
106
|
+
isAmbiguous = true;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (isAmbiguous) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
return bestMember;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=memberMatching.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memberMatching.js","sourceRoot":"","sources":["../src/memberMatching.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { Channel, type ChannelOperations } from "../Channel.js";
|
|
2
2
|
import { ChatClient } from "../ChatClient.js";
|
|
3
|
-
import type { DisconnectCallback, ErrorCallback, FileAttachment, Member, MessageCallback, MessageContent, MessageData, ReactionCallback, SlackConfig, ThreadData } from "../types.js";
|
|
3
|
+
import type { DeleteMessageOptions, DisconnectCallback, ErrorCallback, FileAttachment, Member, MessageCallback, MessageContent, MessageData, MessageQueryOptions, ReactionCallback, SlackConfig, ThreadData } from "../types.js";
|
|
4
4
|
/**
|
|
5
5
|
* Slack chat client implementation using @slack/bolt
|
|
6
6
|
*/
|
|
7
7
|
export declare class SlackChatClient extends ChatClient implements ChannelOperations {
|
|
8
8
|
private app;
|
|
9
|
+
private slackBotId;
|
|
9
10
|
private reactionCallbacks;
|
|
10
11
|
private messageCallbacks;
|
|
11
12
|
private threadCallbacks;
|
|
@@ -16,6 +17,7 @@ export declare class SlackChatClient extends ChatClient implements ChannelOperat
|
|
|
16
17
|
* Connect to Slack and return a channel object
|
|
17
18
|
*/
|
|
18
19
|
connect(channelId: string): Promise<Channel>;
|
|
20
|
+
private hydrateIdentity;
|
|
19
21
|
/**
|
|
20
22
|
* Disconnect from Slack
|
|
21
23
|
*/
|
|
@@ -35,7 +37,7 @@ export declare class SlackChatClient extends ChatClient implements ChannelOperat
|
|
|
35
37
|
/**
|
|
36
38
|
* Delete a message and its thread replies from a Slack channel
|
|
37
39
|
*/
|
|
38
|
-
deleteMessage(messageId: string, channelId: string): Promise<void>;
|
|
40
|
+
deleteMessage(messageId: string, channelId: string, options?: DeleteMessageOptions): Promise<void>;
|
|
39
41
|
/**
|
|
40
42
|
* Add a reaction to a message
|
|
41
43
|
*/
|
|
@@ -70,6 +72,7 @@ export declare class SlackChatClient extends ChatClient implements ChannelOperat
|
|
|
70
72
|
* Bulk delete messages in a Slack channel
|
|
71
73
|
*/
|
|
72
74
|
bulkDelete(channelId: string, count: number): Promise<number>;
|
|
75
|
+
getMessages(channelId: string, options?: MessageQueryOptions): Promise<MessageData[]>;
|
|
73
76
|
/**
|
|
74
77
|
* Get all threads in a Slack channel
|
|
75
78
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackChatClient.d.ts","sourceRoot":"","sources":["../../src/slack/SlackChatClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACb,cAAc,EACd,MAAM,EACN,eAAe,EACf,cAAc,EACd,WAAW,EACX,gBAAgB,EAEhB,WAAW,EACX,UAAU,EAEX,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SlackChatClient.d.ts","sourceRoot":"","sources":["../../src/slack/SlackChatClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ const Channel_js_1 = require("../Channel.js");
|
|
|
6
6
|
const ChatClient_js_1 = require("../ChatClient.js");
|
|
7
7
|
const buildMessageEvent_js_1 = require("./buildMessageEvent.js");
|
|
8
8
|
const fetchChannelMembers_js_1 = require("./fetchChannelMembers.js");
|
|
9
|
+
const getMessages_js_1 = require("./getMessages.js");
|
|
9
10
|
const getThreads_js_1 = require("./getThreads.js");
|
|
10
11
|
const messageOperations_js_1 = require("./messageOperations.js");
|
|
11
12
|
const removeAllReactions_js_1 = require("./removeAllReactions.js");
|
|
@@ -14,6 +15,7 @@ const removeAllReactions_js_1 = require("./removeAllReactions.js");
|
|
|
14
15
|
*/
|
|
15
16
|
class SlackChatClient extends ChatClient_js_1.ChatClient {
|
|
16
17
|
app;
|
|
18
|
+
slackBotId = null;
|
|
17
19
|
reactionCallbacks = new Map();
|
|
18
20
|
messageCallbacks = new Map();
|
|
19
21
|
threadCallbacks = new Map();
|
|
@@ -114,8 +116,25 @@ class SlackChatClient extends ChatClient_js_1.ChatClient {
|
|
|
114
116
|
*/
|
|
115
117
|
async connect(channelId) {
|
|
116
118
|
await this.app.start();
|
|
119
|
+
await this.hydrateIdentity();
|
|
117
120
|
return new Channel_js_1.Channel(channelId, "slack", this);
|
|
118
121
|
}
|
|
122
|
+
async hydrateIdentity() {
|
|
123
|
+
const auth = await this.app.client.auth.test();
|
|
124
|
+
const userId = auth.user_id;
|
|
125
|
+
if (userId === undefined || userId === "") {
|
|
126
|
+
throw new Error("Slack auth.test did not return user_id");
|
|
127
|
+
}
|
|
128
|
+
const username = auth.user !== undefined && auth.user !== "" ? auth.user : userId;
|
|
129
|
+
this.meValue = {
|
|
130
|
+
id: userId,
|
|
131
|
+
username,
|
|
132
|
+
displayName: username,
|
|
133
|
+
mention: `<@${userId}>`,
|
|
134
|
+
};
|
|
135
|
+
this.slackBotId =
|
|
136
|
+
auth.bot_id !== undefined && auth.bot_id !== "" ? auth.bot_id : null;
|
|
137
|
+
}
|
|
119
138
|
/**
|
|
120
139
|
* Disconnect from Slack
|
|
121
140
|
*/
|
|
@@ -126,6 +145,8 @@ class SlackChatClient extends ChatClient_js_1.ChatClient {
|
|
|
126
145
|
this.threadCallbacks.clear();
|
|
127
146
|
this.disconnectCallbacks.clear();
|
|
128
147
|
this.errorCallbacks.clear();
|
|
148
|
+
this.meValue = null;
|
|
149
|
+
this.slackBotId = null;
|
|
129
150
|
}
|
|
130
151
|
/**
|
|
131
152
|
* Post a message to a Slack channel
|
|
@@ -142,8 +163,8 @@ class SlackChatClient extends ChatClient_js_1.ChatClient {
|
|
|
142
163
|
/**
|
|
143
164
|
* Delete a message and its thread replies from a Slack channel
|
|
144
165
|
*/
|
|
145
|
-
async deleteMessage(messageId, channelId) {
|
|
146
|
-
await (0, messageOperations_js_1.deleteMessage)(this.app, messageId, channelId);
|
|
166
|
+
async deleteMessage(messageId, channelId, options) {
|
|
167
|
+
await (0, messageOperations_js_1.deleteMessage)(this.app, messageId, channelId, options);
|
|
147
168
|
}
|
|
148
169
|
/**
|
|
149
170
|
* Add a reaction to a message
|
|
@@ -263,6 +284,12 @@ class SlackChatClient extends ChatClient_js_1.ChatClient {
|
|
|
263
284
|
}
|
|
264
285
|
return deleted;
|
|
265
286
|
}
|
|
287
|
+
async getMessages(channelId, options = {}) {
|
|
288
|
+
return (0, getMessages_js_1.getMessages)(this.app, channelId, options, {
|
|
289
|
+
meId: this.me?.id,
|
|
290
|
+
botId: this.slackBotId,
|
|
291
|
+
});
|
|
292
|
+
}
|
|
266
293
|
/**
|
|
267
294
|
* Get all threads in a Slack channel
|
|
268
295
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackChatClient.js","sourceRoot":"","sources":["../../src/slack/SlackChatClient.ts"],"names":[],"mappings":";;;AAAA,sCAAkC;AAElC,8CAAgE;AAChE,oDAA8C;
|
|
1
|
+
{"version":3,"file":"SlackChatClient.js","sourceRoot":"","sources":["../../src/slack/SlackChatClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchChannelMembers.d.ts","sourceRoot":"","sources":["../../src/slack/fetchChannelMembers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"fetchChannelMembers.d.ts","sourceRoot":"","sources":["../../src/slack/fetchChannelMembers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC,CAoDnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchChannelMembers.js","sourceRoot":"","sources":["../../src/slack/fetchChannelMembers.ts"],"names":[],"mappings":";;AAQA,
|
|
1
|
+
{"version":3,"file":"fetchChannelMembers.js","sourceRoot":"","sources":["../../src/slack/fetchChannelMembers.ts"],"names":[],"mappings":";;AAQA,kDAuDC;AA3DD;;;GAGG;AACI,KAAK,UAAU,mBAAmB,CACvC,GAAQ,EACR,SAAiB;IAEjB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,MAA0B,CAAC;IAE/B,GAAG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;YACpD,OAAO,EAAE,SAAS;YAClB,KAAK,EAAE,GAAG;YACV,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,SAAS,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,EAAE,WAAW,CAAC;QACzD,MAAM;YACJ,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,CAAC,QAAQ,MAAM,KAAK,SAAS,EAAE;IAE/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;YACpB,MAAM,OAAO,GAAG,CAAC,CAAC,OAEL,CAAC;YACd,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC;YAC9B,MAAM,cAAc,GAAG,OAAO,EAAE,YAAY,CAAC;YAC7C,MAAM,WAAW,GAAG,CAAC,CAAC,SAAS,CAAC;YAChC,MAAM,WAAW,GACf,CAAC,cAAc,KAAK,SAAS,IAAI,cAAc,KAAK,EAAE;gBACpD,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,SAAS,CAAC;gBACd,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,EAAE;oBAC9C,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,SAAS,CAAC;gBACd,IAAI,CAAC;YACP,OAAO,CAAC,IAAI,CAAC;gBACX,EAAE,EAAE,MAAM;gBACV,QAAQ,EAAE,IAAI;gBACd,WAAW;gBACX,OAAO,EAAE,KAAK,MAAM,GAAG;gBACvB,GAAG,CAAC,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,EAAE;oBACtD,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;oBAC1B,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { App } from "@slack/bolt";
|
|
2
|
+
import type { MessageData, MessageQueryOptions } from "../types";
|
|
3
|
+
interface MessageFilterContext {
|
|
4
|
+
meId?: string;
|
|
5
|
+
botId?: string | null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Fetch and normalize recent Slack messages with optional filters.
|
|
9
|
+
*/
|
|
10
|
+
export declare function getMessages(app: App, channelId: string, options?: MessageQueryOptions, context?: MessageFilterContext): Promise<MessageData[]>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=getMessages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessages.d.ts","sourceRoot":"","sources":["../../src/slack/getMessages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EAEpB,MAAM,UAAU,CAAC;AAkBlB,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,EACjC,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,EAAE,CAAC,CA4DxB"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMessages = getMessages;
|
|
4
|
+
/**
|
|
5
|
+
* Fetch and normalize recent Slack messages with optional filters.
|
|
6
|
+
*/
|
|
7
|
+
async function getMessages(app, channelId, options = {}, context = {}) {
|
|
8
|
+
const limit = Math.min(Math.max(options.limit ?? 50, 1), 200);
|
|
9
|
+
const oldest = toSlackTimestamp(options.after);
|
|
10
|
+
const latest = toSlackTimestamp(options.before);
|
|
11
|
+
const afterDate = toDate(options.after);
|
|
12
|
+
const beforeDate = toDate(options.before);
|
|
13
|
+
const history = await app.client.conversations.history({
|
|
14
|
+
channel: channelId,
|
|
15
|
+
limit,
|
|
16
|
+
...(oldest !== undefined ? { oldest } : {}),
|
|
17
|
+
...(latest !== undefined ? { latest } : {}),
|
|
18
|
+
...(oldest !== undefined || latest !== undefined
|
|
19
|
+
? { inclusive: false }
|
|
20
|
+
: {}),
|
|
21
|
+
});
|
|
22
|
+
const messages = [];
|
|
23
|
+
for (const rawMessage of history.messages ?? []) {
|
|
24
|
+
const message = rawMessage;
|
|
25
|
+
if (message.ts === undefined || message.ts === "") {
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
28
|
+
const timestamp = new Date(parseFloat(message.ts) * 1000);
|
|
29
|
+
if (!Number.isFinite(timestamp.getTime())) {
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (afterDate !== undefined && timestamp <= afterDate) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
if (beforeDate !== undefined && timestamp >= beforeDate) {
|
|
36
|
+
continue;
|
|
37
|
+
}
|
|
38
|
+
if (!matchesAuthorFilter(message, options.author, context)) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
const authorId = message.user ?? message.bot_id;
|
|
42
|
+
messages.push({
|
|
43
|
+
id: message.ts,
|
|
44
|
+
channelId,
|
|
45
|
+
platform: "slack",
|
|
46
|
+
content: message.text ?? "",
|
|
47
|
+
author: authorId !== undefined
|
|
48
|
+
? {
|
|
49
|
+
id: authorId,
|
|
50
|
+
username: message.username !== undefined && message.username !== ""
|
|
51
|
+
? message.username
|
|
52
|
+
: undefined,
|
|
53
|
+
}
|
|
54
|
+
: undefined,
|
|
55
|
+
timestamp,
|
|
56
|
+
attachments: extractSlackAttachments(message),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
return messages;
|
|
60
|
+
}
|
|
61
|
+
function matchesAuthorFilter(message, author, context) {
|
|
62
|
+
if (author === undefined) {
|
|
63
|
+
return true;
|
|
64
|
+
}
|
|
65
|
+
if (author === "me") {
|
|
66
|
+
return ((context.meId !== undefined &&
|
|
67
|
+
context.meId !== "" &&
|
|
68
|
+
message.user === context.meId) ||
|
|
69
|
+
(context.botId !== undefined &&
|
|
70
|
+
context.botId !== null &&
|
|
71
|
+
context.botId !== "" &&
|
|
72
|
+
message.bot_id === context.botId));
|
|
73
|
+
}
|
|
74
|
+
const normalizedAuthor = normalizeAuthorFilter(author);
|
|
75
|
+
return ((message.user !== undefined && message.user === normalizedAuthor) ||
|
|
76
|
+
(message.bot_id !== undefined && message.bot_id === normalizedAuthor));
|
|
77
|
+
}
|
|
78
|
+
function toSlackTimestamp(input) {
|
|
79
|
+
if (input === undefined) {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
if (input instanceof Date) {
|
|
83
|
+
return String(input.getTime() / 1000);
|
|
84
|
+
}
|
|
85
|
+
if (typeof input === "number") {
|
|
86
|
+
if (!Number.isFinite(input)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
return String(input);
|
|
90
|
+
}
|
|
91
|
+
const trimmed = input.trim();
|
|
92
|
+
if (trimmed === "") {
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
if (/^\d+(\.\d+)?$/.test(trimmed)) {
|
|
96
|
+
return trimmed;
|
|
97
|
+
}
|
|
98
|
+
const date = new Date(trimmed);
|
|
99
|
+
if (Number.isNaN(date.getTime())) {
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
return String(date.getTime() / 1000);
|
|
103
|
+
}
|
|
104
|
+
function toDate(input) {
|
|
105
|
+
if (input === undefined) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
if (input instanceof Date) {
|
|
109
|
+
return Number.isNaN(input.getTime()) ? undefined : input;
|
|
110
|
+
}
|
|
111
|
+
if (typeof input === "number") {
|
|
112
|
+
const ms = input > 10_000_000_000 ? input : input * 1000;
|
|
113
|
+
const date = new Date(ms);
|
|
114
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
115
|
+
}
|
|
116
|
+
const trimmed = input.trim();
|
|
117
|
+
if (/^\d+(\.\d+)?$/.test(trimmed)) {
|
|
118
|
+
return toDate(Number(trimmed));
|
|
119
|
+
}
|
|
120
|
+
const date = new Date(trimmed);
|
|
121
|
+
return Number.isNaN(date.getTime()) ? undefined : date;
|
|
122
|
+
}
|
|
123
|
+
function normalizeAuthorFilter(author) {
|
|
124
|
+
const mentionMatch = /^<@([^>|]+)(?:\|[^>]+)?>$/.exec(author.trim());
|
|
125
|
+
if (mentionMatch?.[1] !== undefined && mentionMatch[1] !== "") {
|
|
126
|
+
return mentionMatch[1];
|
|
127
|
+
}
|
|
128
|
+
return author.trim().replace(/^@/, "");
|
|
129
|
+
}
|
|
130
|
+
function extractSlackAttachments(message) {
|
|
131
|
+
const attachments = [];
|
|
132
|
+
for (const file of message.files ?? []) {
|
|
133
|
+
const { url_private: url, name, mimetype, size } = file;
|
|
134
|
+
if (url === undefined || url === "" || name === undefined || name === "") {
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
attachments.push({
|
|
138
|
+
url,
|
|
139
|
+
name,
|
|
140
|
+
contentType: mimetype !== undefined && mimetype !== null && mimetype !== ""
|
|
141
|
+
? mimetype
|
|
142
|
+
: undefined,
|
|
143
|
+
size,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
return attachments;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=getMessages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getMessages.js","sourceRoot":"","sources":["../../src/slack/getMessages.ts"],"names":[],"mappings":"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"}
|