@frogbotai/piece-telegram-bot 0.25.0 → 0.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.d.ts +46 -46
- package/dist/adapter.d.ts +11 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +41 -0
- package/dist/adapter.js.map +1 -0
- package/dist/client.d.ts +11 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +27 -6
- package/dist/client.js.map +1 -1
- package/dist/files.d.ts +2 -2
- package/dist/index.d.ts +55 -49
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/questions/index.d.ts +4 -0
- package/dist/questions/index.d.ts.map +1 -0
- package/dist/questions/index.js +17 -0
- package/dist/questions/index.js.map +1 -0
- package/dist/questions/keyboard.d.ts +60 -0
- package/dist/questions/keyboard.d.ts.map +1 -0
- package/dist/questions/keyboard.js +195 -0
- package/dist/questions/keyboard.js.map +1 -0
- package/dist/questions/notify.d.ts +8 -0
- package/dist/questions/notify.d.ts.map +1 -0
- package/dist/questions/notify.js +49 -0
- package/dist/questions/notify.js.map +1 -0
- package/dist/questions/parse.d.ts +3 -0
- package/dist/questions/parse.d.ts.map +1 -0
- package/dist/questions/parse.js +87 -0
- package/dist/questions/parse.js.map +1 -0
- package/dist/questions/render.d.ts +4 -0
- package/dist/questions/render.d.ts.map +1 -0
- package/dist/questions/render.js +21 -0
- package/dist/questions/render.js.map +1 -0
- package/dist/questions/settled.d.ts +4 -0
- package/dist/questions/settled.d.ts.map +1 -0
- package/dist/questions/settled.js +18 -0
- package/dist/questions/settled.js.map +1 -0
- package/dist/questions/state.d.ts +17 -0
- package/dist/questions/state.d.ts.map +1 -0
- package/dist/questions/state.js +18 -0
- package/dist/questions/state.js.map +1 -0
- package/dist/questions/supports.d.ts +3 -0
- package/dist/questions/supports.d.ts.map +1 -0
- package/dist/questions/supports.js +2 -0
- package/dist/questions/supports.js.map +1 -0
- package/dist/questions/telegramThread.d.ts +19 -0
- package/dist/questions/telegramThread.d.ts.map +1 -0
- package/dist/questions/telegramThread.js +34 -0
- package/dist/questions/telegramThread.js.map +1 -0
- package/dist/questions/updated.d.ts +4 -0
- package/dist/questions/updated.d.ts.map +1 -0
- package/dist/questions/updated.js +31 -0
- package/dist/questions/updated.js.map +1 -0
- package/dist/triggers/newUpdate.d.ts +1 -1
- package/dist/webhook.d.ts +2 -2
- package/package.json +4 -4
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
export const OPTIONS_PER_PAGE = 10;
|
|
2
|
+
export const TEXT_BUDGET = 3500;
|
|
3
|
+
const OPTION_BUDGET = 1800;
|
|
4
|
+
const QUESTION_LIMIT = 1500;
|
|
5
|
+
const SETTLED_QUESTION_LIMIT = 300;
|
|
6
|
+
const ANSWER_LIMIT = 300;
|
|
7
|
+
const SELECTED_LIMIT = 1000;
|
|
8
|
+
const LABEL_LIMIT = 256;
|
|
9
|
+
const DESCRIPTION_LIMIT = 512;
|
|
10
|
+
const BUTTON_LIMIT = 48;
|
|
11
|
+
const PAIRED_BUTTON_LIMIT = 20;
|
|
12
|
+
export const actionIds = {
|
|
13
|
+
choose: (q, index) => `q:${q}:o:${index}`,
|
|
14
|
+
toggle: (q, index) => `q:${q}:t:${index}`,
|
|
15
|
+
page: (q, page) => `q:${q}:p:${page}`,
|
|
16
|
+
done: (q) => `q:${q}:d`,
|
|
17
|
+
type: (q) => `q:${q}:c`,
|
|
18
|
+
back: (q) => `q:${q}:b`,
|
|
19
|
+
dismiss: 'q:x',
|
|
20
|
+
};
|
|
21
|
+
const ACTION_PATTERN = /^q:(\d{1,4}):(?:([otp]):(\d{1,6})|([dcb]))$/;
|
|
22
|
+
const INDEXED_KINDS = { o: 'choose', t: 'toggle' };
|
|
23
|
+
const PLAIN_KINDS = { d: 'done', c: 'type', b: 'back' };
|
|
24
|
+
export function decodeAction(data) {
|
|
25
|
+
if (data === actionIds.dismiss)
|
|
26
|
+
return { kind: 'dismiss' };
|
|
27
|
+
const match = data?.match(ACTION_PATTERN);
|
|
28
|
+
if (!match)
|
|
29
|
+
return undefined;
|
|
30
|
+
const [, q, indexed, value, plain] = match;
|
|
31
|
+
if (plain)
|
|
32
|
+
return { kind: PLAIN_KINDS[plain], q: Number(q) };
|
|
33
|
+
if (indexed === 'p')
|
|
34
|
+
return { kind: 'page', q: Number(q), page: Number(value) };
|
|
35
|
+
return {
|
|
36
|
+
kind: INDEXED_KINDS[indexed],
|
|
37
|
+
q: Number(q),
|
|
38
|
+
index: Number(value),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function optionPages(item) {
|
|
42
|
+
const pages = [];
|
|
43
|
+
let page = [];
|
|
44
|
+
let used = 0;
|
|
45
|
+
item.options.forEach((option, index) => {
|
|
46
|
+
const size = (optionLine(option)?.plain.length ?? 0) + 1;
|
|
47
|
+
const full = page.length === OPTIONS_PER_PAGE || (page.length > 0 && used + size > OPTION_BUDGET);
|
|
48
|
+
if (full) {
|
|
49
|
+
pages.push(page);
|
|
50
|
+
page = [];
|
|
51
|
+
used = 0;
|
|
52
|
+
}
|
|
53
|
+
page.push(index);
|
|
54
|
+
used += size;
|
|
55
|
+
});
|
|
56
|
+
pages.push(page);
|
|
57
|
+
return pages;
|
|
58
|
+
}
|
|
59
|
+
export function questionMessage({ call, state, }) {
|
|
60
|
+
const { questions } = call.input;
|
|
61
|
+
const item = questions[state.q];
|
|
62
|
+
const pages = optionPages(item);
|
|
63
|
+
const pageIndex = Math.min(state.page, pages.length - 1);
|
|
64
|
+
const page = pages[pageIndex];
|
|
65
|
+
const title = questions.length > 1
|
|
66
|
+
? join(bold(item.header), text(` · ${state.q + 1} of ${questions.length}`))
|
|
67
|
+
: bold(item.header);
|
|
68
|
+
const lines = [title, text(truncate(item.question, QUESTION_LIMIT))];
|
|
69
|
+
if (state.typing) {
|
|
70
|
+
const selected = selectedLabels({ item, selected: state.selected });
|
|
71
|
+
if (selected.length > 0) {
|
|
72
|
+
lines.push(blank(), text(truncate(`Selected: ${selected.join(', ')}`, SELECTED_LIMIT)));
|
|
73
|
+
}
|
|
74
|
+
lines.push(blank(), italic('Reply to this message with your answer.'));
|
|
75
|
+
return message(lines, [
|
|
76
|
+
[button('‹ Back', actionIds.back(state.q)), button('Dismiss', actionIds.dismiss)],
|
|
77
|
+
]);
|
|
78
|
+
}
|
|
79
|
+
const details = page.flatMap((index) => optionLine(item.options[index]) ?? []);
|
|
80
|
+
if (details.length > 0)
|
|
81
|
+
lines.push(blank(), ...details);
|
|
82
|
+
const hints = [
|
|
83
|
+
...(item.multiple ? ['Select all that apply, then tap Done.'] : []),
|
|
84
|
+
...(pages.length > 1
|
|
85
|
+
? [`Options ${page[0] + 1}–${page.at(-1) + 1} of ${item.options.length}.`]
|
|
86
|
+
: []),
|
|
87
|
+
];
|
|
88
|
+
if (hints.length > 0)
|
|
89
|
+
lines.push(blank(), italic(hints.join(' ')));
|
|
90
|
+
const options = page.map((index) => {
|
|
91
|
+
const label = truncate(item.options[index].label, BUTTON_LIMIT);
|
|
92
|
+
if (!item.multiple)
|
|
93
|
+
return button(label, actionIds.choose(state.q, index));
|
|
94
|
+
const mark = state.selected.includes(index) ? '☑' : '☐';
|
|
95
|
+
return button(`${mark} ${label}`, actionIds.toggle(state.q, index));
|
|
96
|
+
});
|
|
97
|
+
const paired = page.every((index) => Array.from(item.options[index].label).length <= PAIRED_BUTTON_LIMIT);
|
|
98
|
+
const navigation = [
|
|
99
|
+
...(pageIndex > 0 ? [button('‹ Prev', actionIds.page(state.q, pageIndex - 1))] : []),
|
|
100
|
+
...(pageIndex < pages.length - 1
|
|
101
|
+
? [button('Next ›', actionIds.page(state.q, pageIndex + 1))]
|
|
102
|
+
: []),
|
|
103
|
+
];
|
|
104
|
+
const rows = [
|
|
105
|
+
...chunk(options, paired ? 2 : 1),
|
|
106
|
+
...(navigation.length > 0 ? [navigation] : []),
|
|
107
|
+
...(item.multiple ? [[button('Done', actionIds.done(state.q))]] : []),
|
|
108
|
+
[
|
|
109
|
+
...(item.custom ? [button('Type your answer', actionIds.type(state.q))] : []),
|
|
110
|
+
button('Dismiss', actionIds.dismiss),
|
|
111
|
+
],
|
|
112
|
+
];
|
|
113
|
+
return message(lines, rows);
|
|
114
|
+
}
|
|
115
|
+
export function settledMessage({ actor, answers, call, }) {
|
|
116
|
+
const blocks = call.input.questions.map((item, q) => {
|
|
117
|
+
const answer = answers?.[q];
|
|
118
|
+
return [
|
|
119
|
+
bold(item.header),
|
|
120
|
+
text(truncate(item.question, SETTLED_QUESTION_LIMIT)),
|
|
121
|
+
...(answer ? [text(`✅ ${truncate(answerText(answer), ANSWER_LIMIT)}`)] : []),
|
|
122
|
+
];
|
|
123
|
+
});
|
|
124
|
+
const verb = answers ? 'Answered' : '🚫 Dismissed';
|
|
125
|
+
const footer = italic(actor ? `${verb} by ${actor}` : verb);
|
|
126
|
+
const lines = [];
|
|
127
|
+
let used = footer.plain.length + 2;
|
|
128
|
+
for (const block of blocks) {
|
|
129
|
+
const size = block.reduce((total, line) => total + line.plain.length + 1, 1);
|
|
130
|
+
if (used + size > TEXT_BUDGET) {
|
|
131
|
+
lines.push(text('…'), blank());
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
134
|
+
lines.push(...block, blank());
|
|
135
|
+
used += size;
|
|
136
|
+
}
|
|
137
|
+
return message([...lines, footer], []);
|
|
138
|
+
}
|
|
139
|
+
export function selectedLabels({ item, selected, }) {
|
|
140
|
+
return [...selected]
|
|
141
|
+
.sort((a, b) => a - b)
|
|
142
|
+
.flatMap((index) => (item.options[index] ? [item.options[index].label] : []));
|
|
143
|
+
}
|
|
144
|
+
export function escapeHTML(value) {
|
|
145
|
+
return value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
146
|
+
}
|
|
147
|
+
function optionLine(option) {
|
|
148
|
+
const long = Array.from(option.label).length > BUTTON_LIMIT;
|
|
149
|
+
if (!option.description && !long)
|
|
150
|
+
return undefined;
|
|
151
|
+
const label = bold(truncate(option.label, LABEL_LIMIT));
|
|
152
|
+
return option.description
|
|
153
|
+
? join(text('• '), label, text(` — ${truncate(option.description, DESCRIPTION_LIMIT)}`))
|
|
154
|
+
: join(text('• '), label);
|
|
155
|
+
}
|
|
156
|
+
function answerText({ custom, selected }) {
|
|
157
|
+
return [...selected, ...(custom ? [`“${custom}”`] : [])].join(', ');
|
|
158
|
+
}
|
|
159
|
+
function message(lines, rows) {
|
|
160
|
+
return {
|
|
161
|
+
text: lines.map(({ html }) => html).join('\n'),
|
|
162
|
+
parse_mode: 'HTML',
|
|
163
|
+
link_preview_options: { is_disabled: true },
|
|
164
|
+
reply_markup: { inline_keyboard: rows },
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function button(label, data) {
|
|
168
|
+
return { text: label, callback_data: data };
|
|
169
|
+
}
|
|
170
|
+
function text(value) {
|
|
171
|
+
return { plain: value, html: escapeHTML(value) };
|
|
172
|
+
}
|
|
173
|
+
function bold(value) {
|
|
174
|
+
return { plain: value, html: `<b>${escapeHTML(value)}</b>` };
|
|
175
|
+
}
|
|
176
|
+
function italic(value) {
|
|
177
|
+
return { plain: value, html: `<i>${escapeHTML(value)}</i>` };
|
|
178
|
+
}
|
|
179
|
+
function blank() {
|
|
180
|
+
return text('');
|
|
181
|
+
}
|
|
182
|
+
function join(...lines) {
|
|
183
|
+
return {
|
|
184
|
+
plain: lines.map(({ plain }) => plain).join(''),
|
|
185
|
+
html: lines.map(({ html }) => html).join(''),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function truncate(value, limit) {
|
|
189
|
+
const characters = Array.from(value);
|
|
190
|
+
return characters.length > limit ? `${characters.slice(0, limit - 1).join('')}…` : value;
|
|
191
|
+
}
|
|
192
|
+
function chunk(values, size) {
|
|
193
|
+
return Array.from({ length: Math.ceil(values.length / size) }, (_, index) => values.slice(index * size, (index + 1) * size));
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../../src/questions/keyboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PieceChannelQuestions } from 'frogbot/pieces';
|
|
2
|
+
import type { TelegramBotClient } from '../client.js';
|
|
3
|
+
type TelegramQuestions = Required<PieceChannelQuestions<TelegramBotClient>>;
|
|
4
|
+
export declare const denyTelegramQuestion: TelegramQuestions['denied'];
|
|
5
|
+
export declare const rejectTelegramQuestion: TelegramQuestions['rejected'];
|
|
6
|
+
export declare const staleTelegramQuestion: TelegramQuestions['stale'];
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=notify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/questions/notify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAuC,MAAM,gBAAgB,CAAC;AAEjG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAUtD,KAAK,iBAAiB,GAAG,QAAQ,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,CAAC;AAE5E,eAAO,MAAM,oBAAoB,EAAE,iBAAiB,CAAC,QAAQ,CAezD,CAAC;AAEL,eAAO,MAAM,sBAAsB,EAAE,iBAAiB,CAAC,UAAU,CAMiB,CAAC;AAEnF,eAAO,MAAM,qBAAqB,EAAE,iBAAiB,CAAC,OAAO,CAqC5D,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { settledMessage } from './keyboard.js';
|
|
2
|
+
import { readState } from './state.js';
|
|
3
|
+
import { editQuestionMessage, responderName, telegramMessageId, telegramTarget, } from './telegramThread.js';
|
|
4
|
+
export const denyTelegramQuestion = ({ client, interaction, question, thread, }) => notify({
|
|
5
|
+
client,
|
|
6
|
+
interaction,
|
|
7
|
+
question,
|
|
8
|
+
text: interaction.type === 'message'
|
|
9
|
+
? "You don't have access to answer this question."
|
|
10
|
+
: `${responderName(interaction)}, you don't have access to answer this question.`,
|
|
11
|
+
threadId: thread.id,
|
|
12
|
+
});
|
|
13
|
+
export const rejectTelegramQuestion = ({ client, interaction, question, reason, thread, }) => notify({ client, interaction, question, text: reason, threadId: thread.id });
|
|
14
|
+
export const staleTelegramQuestion = async ({ call, client, interaction, question, req, thread, }) => {
|
|
15
|
+
if (interaction.type === 'message') {
|
|
16
|
+
await notify({
|
|
17
|
+
client,
|
|
18
|
+
interaction,
|
|
19
|
+
question,
|
|
20
|
+
text: 'This question was already answered.',
|
|
21
|
+
threadId: thread.id,
|
|
22
|
+
});
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const view = readState(question.state).settled;
|
|
26
|
+
if (!view)
|
|
27
|
+
return;
|
|
28
|
+
try {
|
|
29
|
+
await editQuestionMessage({
|
|
30
|
+
body: settledMessage({ ...view, call }),
|
|
31
|
+
client,
|
|
32
|
+
messageId: question.messages.at(-1).id,
|
|
33
|
+
threadId: thread.id,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
req.frogbot.logger.error({ err: error, piece: 'telegramBot', toolCallId: call.toolCallId }, '[piece-telegram-bot] Could not restore an answered question.');
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
async function notify({ client, interaction, question, text, threadId, }) {
|
|
41
|
+
const replyTo = interaction.type === 'message' ? interaction.message.id : question.messages.at(-1).id;
|
|
42
|
+
await client.call('sendMessage', {
|
|
43
|
+
...telegramTarget(threadId),
|
|
44
|
+
text,
|
|
45
|
+
link_preview_options: { is_disabled: true },
|
|
46
|
+
reply_parameters: { message_id: telegramMessageId(replyTo), allow_sending_without_reply: true },
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=notify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/questions/notify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAI7B,MAAM,CAAC,MAAM,oBAAoB,GAAgC,CAAC,EAChE,MAAM,EACN,WAAW,EACX,QAAQ,EACR,MAAM,GACP,EAAE,EAAE,CACH,MAAM,CAAC;IACL,MAAM;IACN,WAAW;IACX,QAAQ;IACR,IAAI,EACF,WAAW,CAAC,IAAI,KAAK,SAAS;QAC5B,CAAC,CAAC,gDAAgD;QAClD,CAAC,CAAC,GAAG,aAAa,CAAC,WAAW,CAAC,kDAAkD;IACrF,QAAQ,EAAE,MAAM,CAAC,EAAE;CACpB,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,sBAAsB,GAAkC,CAAC,EACpE,MAAM,EACN,WAAW,EACX,QAAQ,EACR,MAAM,EACN,MAAM,GACP,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAEnF,MAAM,CAAC,MAAM,qBAAqB,GAA+B,KAAK,EAAE,EACtE,IAAI,EACJ,MAAM,EACN,WAAW,EACX,QAAQ,EACR,GAAG,EACH,MAAM,GACP,EAAE,EAAE;IACH,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,MAAM,CAAC;YACX,MAAM;YACN,WAAW;YACX,QAAQ;YACR,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,MAAM,CAAC,EAAE;SACpB,CAAC,CAAC;QAEH,OAAO;IACT,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IAE/C,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC;YACxB,IAAI,EAAE,cAAc,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;YACvC,MAAM;YACN,SAAS,EAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE;YACvC,QAAQ,EAAE,MAAM,CAAC,EAAE;SACpB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACjE,8DAA8D,CAC/D,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,KAAK,UAAU,MAAM,CAAC,EACpB,MAAM,EACN,WAAW,EACX,QAAQ,EACR,IAAI,EACJ,QAAQ,GAOT;IACC,MAAM,OAAO,GACX,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IAEzF,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;QAC/B,GAAG,cAAc,CAAC,QAAQ,CAAC;QAC3B,IAAI;QACJ,oBAAoB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC3C,gBAAgB,EAAE,EAAE,UAAU,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,2BAA2B,EAAE,IAAI,EAAE;KAChG,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/questions/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,qBAAqB,EAItB,MAAM,gBAAgB,CAAC;AAUxB,eAAO,MAAM,qBAAqB,EAAE,qBAAqB,CAAC,OAAO,CAiBhE,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { decodeAction, optionPages, selectedLabels } from './keyboard.js';
|
|
2
|
+
import { readState } from './state.js';
|
|
3
|
+
const IGNORE = { kind: 'ignore' };
|
|
4
|
+
export const parseTelegramQuestion = ({ call, interaction, question, settled, }) => {
|
|
5
|
+
const state = readState(question.state);
|
|
6
|
+
if (interaction.type === 'action') {
|
|
7
|
+
return parseAction({ call, data: interaction.event.actionId, state });
|
|
8
|
+
}
|
|
9
|
+
if (interaction.type === 'message' && !settled) {
|
|
10
|
+
return parseReply({ call, message: interaction.message, question, state });
|
|
11
|
+
}
|
|
12
|
+
return IGNORE;
|
|
13
|
+
};
|
|
14
|
+
function parseAction({ call, data, state, }) {
|
|
15
|
+
const action = decodeAction(data);
|
|
16
|
+
if (!action)
|
|
17
|
+
return IGNORE;
|
|
18
|
+
if (action.kind === 'dismiss')
|
|
19
|
+
return { kind: 'dismiss' };
|
|
20
|
+
if (action.q !== state.q)
|
|
21
|
+
return { kind: 'stale' };
|
|
22
|
+
const item = call.input.questions[state.q];
|
|
23
|
+
if (!item)
|
|
24
|
+
return IGNORE;
|
|
25
|
+
switch (action.kind) {
|
|
26
|
+
case 'choose': {
|
|
27
|
+
const option = item.options[action.index];
|
|
28
|
+
if (item.multiple || !option)
|
|
29
|
+
return IGNORE;
|
|
30
|
+
return advance({ call, state, answer: { header: item.header, selected: [option.label] } });
|
|
31
|
+
}
|
|
32
|
+
case 'toggle': {
|
|
33
|
+
if (!item.multiple || !item.options[action.index])
|
|
34
|
+
return IGNORE;
|
|
35
|
+
const selected = state.selected.includes(action.index)
|
|
36
|
+
? state.selected.filter((index) => index !== action.index)
|
|
37
|
+
: [...state.selected, action.index].sort((a, b) => a - b);
|
|
38
|
+
return { kind: 'partial', state: { ...state, selected } };
|
|
39
|
+
}
|
|
40
|
+
case 'done': {
|
|
41
|
+
if (!item.multiple)
|
|
42
|
+
return IGNORE;
|
|
43
|
+
const selected = selectedLabels({ item, selected: state.selected });
|
|
44
|
+
if (selected.length === 0) {
|
|
45
|
+
return { kind: 'rejected', reason: 'Select at least one option, then tap Done.' };
|
|
46
|
+
}
|
|
47
|
+
return advance({ call, state, answer: { header: item.header, selected } });
|
|
48
|
+
}
|
|
49
|
+
case 'type':
|
|
50
|
+
return item.custom ? { kind: 'partial', state: { ...state, typing: true } } : IGNORE;
|
|
51
|
+
case 'back':
|
|
52
|
+
return { kind: 'partial', state: { ...state, typing: false } };
|
|
53
|
+
case 'page':
|
|
54
|
+
return action.page < optionPages(item).length
|
|
55
|
+
? { kind: 'partial', state: { ...state, page: action.page } }
|
|
56
|
+
: IGNORE;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function parseReply({ call, message, question, state, }) {
|
|
60
|
+
const item = call.input.questions[state.q];
|
|
61
|
+
const bound = message.replyTo?.id === question.messages.at(-1)?.id;
|
|
62
|
+
if (!item?.custom || !state.typing || !bound)
|
|
63
|
+
return IGNORE;
|
|
64
|
+
const custom = message.text.trim();
|
|
65
|
+
if (!custom)
|
|
66
|
+
return { kind: 'rejected', reason: 'Reply with your answer as text.' };
|
|
67
|
+
return advance({
|
|
68
|
+
call,
|
|
69
|
+
state,
|
|
70
|
+
answer: {
|
|
71
|
+
header: item.header,
|
|
72
|
+
selected: item.multiple ? selectedLabels({ item, selected: state.selected }) : [],
|
|
73
|
+
custom,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function advance({ answer, call, state, }) {
|
|
78
|
+
const answers = [...state.answers.slice(0, state.q), answer];
|
|
79
|
+
if (answers.length === call.input.questions.length) {
|
|
80
|
+
return { kind: 'answer', output: { answers } };
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
kind: 'partial',
|
|
84
|
+
state: { q: state.q + 1, page: 0, answers, selected: [], typing: false },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/questions/parse.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAIvC,MAAM,MAAM,GAAwB,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEvD,MAAM,CAAC,MAAM,qBAAqB,GAAmC,CAAC,EACpE,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,OAAO,GACR,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,IAAI,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,IAAI,EACJ,KAAK,GAKN;IACC,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAElC,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAE3B,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAE1D,IAAI,MAAM,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAEnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE3C,IAAI,CAAC,IAAI;QAAE,OAAO,MAAM,CAAC;IAEzB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;gBAAE,OAAO,MAAM,CAAC;YAE5C,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7F,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,OAAO,MAAM,CAAC;YAEjE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBACpD,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC;gBAC1D,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5D,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;QAC5D,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO,MAAM,CAAC;YAElC,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEpE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;YACpF,CAAC;YAED,OAAO,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;QAEvF,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAEjE,KAAK,MAAM;YACT,OAAO,MAAM,CAAC,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM;gBAC3C,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE;gBAC7D,CAAC,CAAC,MAAM,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,EAClB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,KAAK,GAMN;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAEnE,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK;QAAE,OAAO,MAAM,CAAC;IAE5D,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IAEpF,OAAO,OAAO,CAAC;QACb,IAAI;QACJ,KAAK;QACL,MAAM,EAAE;YACN,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;YACjF,MAAM;SACP;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,OAAO,CAAC,EACf,MAAM,EACN,IAAI,EACJ,KAAK,GAKN;IACC,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE7D,IAAI,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACnD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IACjD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;KACzE,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/questions/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAOtD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CA0BrF,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { questionMessage } from './keyboard.js';
|
|
2
|
+
import { initialState } from './state.js';
|
|
3
|
+
import { postedAt, telegramTarget } from './telegramThread.js';
|
|
4
|
+
export const renderTelegramQuestion = async ({ calls, client, thread, }) => {
|
|
5
|
+
const [call] = calls;
|
|
6
|
+
if (!call)
|
|
7
|
+
return [];
|
|
8
|
+
const target = telegramTarget(thread.id);
|
|
9
|
+
const state = initialState();
|
|
10
|
+
const response = await client.call('sendMessage', {
|
|
11
|
+
...target,
|
|
12
|
+
...questionMessage({ call, state }),
|
|
13
|
+
});
|
|
14
|
+
const sent = response.result;
|
|
15
|
+
if (typeof sent?.message_id !== 'number') {
|
|
16
|
+
throw new Error('Telegram sendMessage did not return a message id.');
|
|
17
|
+
}
|
|
18
|
+
const id = `${String(sent.chat?.id ?? target.chat_id)}:${sent.message_id}`;
|
|
19
|
+
return [{ calls: [call.toolCallId], messages: [{ id, postedAt: postedAt(sent.date) }], state }];
|
|
20
|
+
};
|
|
21
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/questions/render.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAI/D,MAAM,CAAC,MAAM,sBAAsB,GAAuD,KAAK,EAAE,EAC/F,KAAK,EACL,MAAM,EACN,MAAM,GACP,EAAE,EAAE;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAErB,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IAErB,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,YAAY,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;QAChD,GAAG,MAAM;QACT,GAAG,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;KACpC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAiC,CAAC;IAExD,IAAI,OAAO,IAAI,EAAE,UAAU,KAAK,QAAQ,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IAE3E,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settled.d.ts","sourceRoot":"","sources":["../../src/questions/settled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKtD,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,SAAS,CA8BtF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { settledMessage } from './keyboard.js';
|
|
2
|
+
import { readState } from './state.js';
|
|
3
|
+
import { actorName, editQuestionMessage } from './telegramThread.js';
|
|
4
|
+
export const settleTelegramQuestion = async ({ actor, call, client, outcome, question, req, thread, }) => {
|
|
5
|
+
const view = {
|
|
6
|
+
...(actorName(actor) ? { actor: actorName(actor) } : {}),
|
|
7
|
+
...('output' in outcome ? { answers: outcome.output.answers } : {}),
|
|
8
|
+
};
|
|
9
|
+
const body = settledMessage({ ...view, call });
|
|
10
|
+
try {
|
|
11
|
+
await Promise.all(question.messages.map(({ id }) => editQuestionMessage({ body, client, messageId: id, threadId: thread.id })));
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
req.frogbot.logger.error({ err: error, piece: 'telegramBot', toolCallId: call.toolCallId }, '[piece-telegram-bot] Could not mark a question answered.');
|
|
15
|
+
}
|
|
16
|
+
return { state: { ...readState(question.state), settled: view } };
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=settled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settled.js","sourceRoot":"","sources":["../../src/questions/settled.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAA4B,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,CAAC,MAAM,sBAAsB,GAAwD,KAAK,EAAE,EAChG,KAAK,EACL,IAAI,EACJ,MAAM,EACN,OAAO,EACP,QAAQ,EACR,GAAG,EACH,MAAM,GACP,EAAE,EAAE;IACH,MAAM,IAAI,GAAwB;QAChC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpE,CAAC;IAEF,MAAM,IAAI,GAAG,cAAc,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAC/B,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAC1E,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACtB,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EACjE,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;AACpE,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { QuestionOutput } from 'frogbot/pieces';
|
|
2
|
+
export type TelegramQuestionAnswer = QuestionOutput['answers'][number];
|
|
3
|
+
export type TelegramSettledView = {
|
|
4
|
+
actor?: string;
|
|
5
|
+
answers?: TelegramQuestionAnswer[];
|
|
6
|
+
};
|
|
7
|
+
export type TelegramQuestionState = {
|
|
8
|
+
q: number;
|
|
9
|
+
page: number;
|
|
10
|
+
answers: TelegramQuestionAnswer[];
|
|
11
|
+
selected: number[];
|
|
12
|
+
typing: boolean;
|
|
13
|
+
settled?: TelegramSettledView;
|
|
14
|
+
};
|
|
15
|
+
export declare function initialState(): TelegramQuestionState;
|
|
16
|
+
export declare function readState(state: unknown): TelegramQuestionState;
|
|
17
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/questions/state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B,CAAC;AAEF,wBAAgB,YAAY,IAAI,qBAAqB,CAEpD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAa/D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function initialState() {
|
|
2
|
+
return { q: 0, page: 0, answers: [], selected: [], typing: false };
|
|
3
|
+
}
|
|
4
|
+
export function readState(state) {
|
|
5
|
+
if (!state || typeof state !== 'object')
|
|
6
|
+
return initialState();
|
|
7
|
+
const value = state;
|
|
8
|
+
const valid = isIndex(value.q) &&
|
|
9
|
+
isIndex(value.page) &&
|
|
10
|
+
Array.isArray(value.answers) &&
|
|
11
|
+
Array.isArray(value.selected) &&
|
|
12
|
+
typeof value.typing === 'boolean';
|
|
13
|
+
return valid ? value : initialState();
|
|
14
|
+
}
|
|
15
|
+
function isIndex(value) {
|
|
16
|
+
return Number.isInteger(value) && value >= 0;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/questions/state.ts"],"names":[],"mappings":"AAkBA,MAAM,UAAU,YAAY;IAC1B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAc;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,YAAY,EAAE,CAAC;IAE/D,MAAM,KAAK,GAAG,KAAuC,CAAC;IAEtD,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QACnB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC7B,OAAO,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC;IAEpC,OAAO,KAAK,CAAC,CAAC,CAAE,KAA+B,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;AACnE,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAK,KAAgB,IAAI,CAAC,CAAC;AAC3D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supports.d.ts","sourceRoot":"","sources":["../../src/questions/supports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAExC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supports.js","sourceRoot":"","sources":["../../src/questions/supports.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAmD,CAAC,EACvF,MAAM,GACP,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { QuestionInteraction, TurnActor } from 'frogbot/pieces';
|
|
2
|
+
import { type TelegramBotClient } from '../client.js';
|
|
3
|
+
import type { TelegramMessageBody } from './keyboard.js';
|
|
4
|
+
export type TelegramTarget = {
|
|
5
|
+
chat_id: string;
|
|
6
|
+
message_thread_id?: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function telegramTarget(threadId: string): TelegramTarget;
|
|
9
|
+
export declare function telegramMessageId(messageId: string): number;
|
|
10
|
+
export declare function postedAt(date: unknown): string;
|
|
11
|
+
export declare function responderName(interaction: QuestionInteraction): string;
|
|
12
|
+
export declare function actorName(actor: TurnActor | null): string | undefined;
|
|
13
|
+
export declare function editQuestionMessage({ body, client, messageId, threadId, }: {
|
|
14
|
+
body: TelegramMessageBody;
|
|
15
|
+
client: TelegramBotClient;
|
|
16
|
+
messageId: string;
|
|
17
|
+
threadId: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=telegramThread.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegramThread.d.ts","sourceRoot":"","sources":["../../src/questions/telegramThread.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAErE,OAAO,EAAoB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAI/D;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE9C;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAKtE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,wBAAsB,mBAAmB,CAAC,EACxC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAehB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { TelegramApiError } from '../client.js';
|
|
2
|
+
export function telegramTarget(threadId) {
|
|
3
|
+
const [, chatId = '', topic] = threadId.split(':');
|
|
4
|
+
return { chat_id: chatId, ...(topic ? { message_thread_id: Number(topic) } : {}) };
|
|
5
|
+
}
|
|
6
|
+
export function telegramMessageId(messageId) {
|
|
7
|
+
return Number(messageId.split(':').at(-1));
|
|
8
|
+
}
|
|
9
|
+
export function postedAt(date) {
|
|
10
|
+
return typeof date === 'number' ? new Date(date * 1000).toISOString() : '';
|
|
11
|
+
}
|
|
12
|
+
export function responderName(interaction) {
|
|
13
|
+
const author = interaction.type === 'message' ? interaction.message.author : interaction.event.user;
|
|
14
|
+
return author.fullName || author.userName || author.userId;
|
|
15
|
+
}
|
|
16
|
+
export function actorName(actor) {
|
|
17
|
+
return actor?.channel?.name || actor?.channel?.username || undefined;
|
|
18
|
+
}
|
|
19
|
+
export async function editQuestionMessage({ body, client, messageId, threadId, }) {
|
|
20
|
+
const { chat_id } = telegramTarget(threadId);
|
|
21
|
+
try {
|
|
22
|
+
await client.call('editMessageText', {
|
|
23
|
+
chat_id,
|
|
24
|
+
message_id: telegramMessageId(messageId),
|
|
25
|
+
...body,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
const unchanged = error instanceof TelegramApiError && /message is not modified/i.test(error.description ?? '');
|
|
30
|
+
if (!unchanged)
|
|
31
|
+
throw error;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=telegramThread.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegramThread.js","sourceRoot":"","sources":["../../src/questions/telegramThread.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAA0B,MAAM,cAAc,CAAC;AAKxE,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEnD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAAiB;IACjD,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,IAAa;IACpC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,WAAgC;IAC5D,MAAM,MAAM,GACV,WAAW,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC;IAEvF,OAAO,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAuB;IAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,KAAK,EAAE,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EACxC,IAAI,EACJ,MAAM,EACN,SAAS,EACT,QAAQ,GAMT;IACC,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACnC,OAAO;YACP,UAAU,EAAE,iBAAiB,CAAC,SAAS,CAAC;YACxC,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,SAAS,GACb,KAAK,YAAY,gBAAgB,IAAI,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;QAEhG,IAAI,CAAC,SAAS;YAAE,MAAM,KAAK,CAAC;IAC9B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updated.d.ts","sourceRoot":"","sources":["../../src/questions/updated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAuB,MAAM,gBAAgB,CAAC;AAEjF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAKtD,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAC9C,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CA0BpD,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { decodeAction, questionMessage } from './keyboard.js';
|
|
2
|
+
import { readState } from './state.js';
|
|
3
|
+
import { editQuestionMessage } from './telegramThread.js';
|
|
4
|
+
export const updateTelegramQuestion = async ({ call, client, interaction, question, req, thread }) => {
|
|
5
|
+
const body = questionMessage({ call, state: readState(question.state) });
|
|
6
|
+
const redraw = () => editQuestionMessage({
|
|
7
|
+
body,
|
|
8
|
+
client,
|
|
9
|
+
messageId: question.messages.at(-1).id,
|
|
10
|
+
threadId: thread.id,
|
|
11
|
+
});
|
|
12
|
+
if (advances(interaction)) {
|
|
13
|
+
await redraw();
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
await redraw();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
req.frogbot.logger.error({ err: error, piece: 'telegramBot', toolCallId: call.toolCallId }, '[piece-telegram-bot] Could not redraw a question.');
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
function advances(interaction) {
|
|
24
|
+
if (!interaction || interaction.type === 'message')
|
|
25
|
+
return true;
|
|
26
|
+
if (interaction.type !== 'action')
|
|
27
|
+
return false;
|
|
28
|
+
const action = decodeAction(interaction.event.actionId);
|
|
29
|
+
return action?.kind === 'choose' || action?.kind === 'done';
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=updated.js.map
|