@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.
Files changed (57) hide show
  1. package/dist/actions/index.d.ts +46 -46
  2. package/dist/adapter.d.ts +11 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +41 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/client.d.ts +11 -0
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +27 -6
  9. package/dist/client.js.map +1 -1
  10. package/dist/files.d.ts +2 -2
  11. package/dist/index.d.ts +55 -49
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +5 -3
  14. package/dist/index.js.map +1 -1
  15. package/dist/questions/index.d.ts +4 -0
  16. package/dist/questions/index.d.ts.map +1 -0
  17. package/dist/questions/index.js +17 -0
  18. package/dist/questions/index.js.map +1 -0
  19. package/dist/questions/keyboard.d.ts +60 -0
  20. package/dist/questions/keyboard.d.ts.map +1 -0
  21. package/dist/questions/keyboard.js +195 -0
  22. package/dist/questions/keyboard.js.map +1 -0
  23. package/dist/questions/notify.d.ts +8 -0
  24. package/dist/questions/notify.d.ts.map +1 -0
  25. package/dist/questions/notify.js +49 -0
  26. package/dist/questions/notify.js.map +1 -0
  27. package/dist/questions/parse.d.ts +3 -0
  28. package/dist/questions/parse.d.ts.map +1 -0
  29. package/dist/questions/parse.js +87 -0
  30. package/dist/questions/parse.js.map +1 -0
  31. package/dist/questions/render.d.ts +4 -0
  32. package/dist/questions/render.d.ts.map +1 -0
  33. package/dist/questions/render.js +21 -0
  34. package/dist/questions/render.js.map +1 -0
  35. package/dist/questions/settled.d.ts +4 -0
  36. package/dist/questions/settled.d.ts.map +1 -0
  37. package/dist/questions/settled.js +18 -0
  38. package/dist/questions/settled.js.map +1 -0
  39. package/dist/questions/state.d.ts +17 -0
  40. package/dist/questions/state.d.ts.map +1 -0
  41. package/dist/questions/state.js +18 -0
  42. package/dist/questions/state.js.map +1 -0
  43. package/dist/questions/supports.d.ts +3 -0
  44. package/dist/questions/supports.d.ts.map +1 -0
  45. package/dist/questions/supports.js +2 -0
  46. package/dist/questions/supports.js.map +1 -0
  47. package/dist/questions/telegramThread.d.ts +19 -0
  48. package/dist/questions/telegramThread.d.ts.map +1 -0
  49. package/dist/questions/telegramThread.js +34 -0
  50. package/dist/questions/telegramThread.js.map +1 -0
  51. package/dist/questions/updated.d.ts +4 -0
  52. package/dist/questions/updated.d.ts.map +1 -0
  53. package/dist/questions/updated.js +31 -0
  54. package/dist/questions/updated.js.map +1 -0
  55. package/dist/triggers/newUpdate.d.ts +1 -1
  56. package/dist/webhook.d.ts +2 -2
  57. 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('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
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":"AAIA,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC;AAEhC,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,MAAM,YAAY,GAAG,GAAG,CAAC;AACzB,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,WAAW,GAAG,GAAG,CAAC;AACxB,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,mBAAmB,GAAG,EAAE,CAAC;AAsB/B,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,MAAM,EAAE,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE;IACzD,MAAM,EAAE,CAAC,CAAS,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE;IACzD,IAAI,EAAE,CAAC,CAAS,EAAE,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE;IACrD,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;IAC/B,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;IAC/B,OAAO,EAAE,KAAK;CACf,CAAC;AAEF,MAAM,cAAc,GAAG,6CAA6C,CAAC;AAErE,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAW,CAAC;AAC5D,MAAM,WAAW,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAW,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,IAAI,KAAK,SAAS,CAAC,OAAO;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAE3D,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAE1C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAE3C,IAAI,KAAK;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAiC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAEzF,IAAI,OAAO,KAAK,GAAG;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAEhF,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,OAAqC,CAAC;QAC1D,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAkB;IAC5C,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,IAAI,IAAI,GAAa,EAAE,CAAC;IACxB,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzD,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,KAAK,gBAAgB,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,IAAI,GAAG,aAAa,CAAC,CAAC;QAEvF,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,GAAG,EAAE,CAAC;YACV,IAAI,GAAG,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,IAAI,IAAI,IAAI,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAC9B,IAAI,EACJ,KAAK,GAIN;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;IACjC,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC;IACjC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAE,CAAC;IAE/B,MAAM,KAAK,GACT,SAAS,CAAC,MAAM,GAAG,CAAC;QAClB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,CAAC,OAAO,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3E,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAExB,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IAErE,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,QAAQ,GAAG,cAAc,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;QAEpE,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC1F,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,yCAAyC,CAAC,CAAC,CAAC;QAEvE,OAAO,OAAO,CAAC,KAAK,EAAE;YACpB,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;SAClF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAEhF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC;IAExD,MAAM,KAAK,GAAG;QACZ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;YAClB,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAE,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,GAAG,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YAC5E,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;QAEjE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAE3E,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAExD,OAAO,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,EAAE,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CACvB,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAE,CAAC,KAAK,CAAC,CAAC,MAAM,IAAI,mBAAmB,CAChF,CAAC;IAEF,MAAM,UAAU,GAAG;QACjB,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC;YAC9B,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5D,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IAEF,MAAM,IAAI,GAAG;QACX,GAAG,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE;YACE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC;SACrC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,OAAO,EACP,IAAI,GAKL;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;QAClD,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5B,OAAO;YACL,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;YACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;YACrD,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAE5D,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAE7E,IAAI,IAAI,GAAG,IAAI,GAAG,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAE/B,MAAM;QACR,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9B,IAAI,IAAI,IAAI,CAAC;IACf,CAAC;IAED,OAAO,OAAO,CAAC,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GAIT;IACC,OAAO,CAAC,GAAG,QAAQ,CAAC;SACjB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACrB,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,SAAS,UAAU,CAAC,MAAsB;IACxC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,YAAY,CAAC;IAE5D,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;IAExD,OAAO,MAAM,CAAC,WAAW;QACvB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,EAA0B;IAC9D,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,IAAwB;IACtD,OAAO;QACL,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9C,UAAU,EAAE,MAAM;QAClB,oBAAoB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE;QAC3C,YAAY,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,IAAY;IACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,IAAI,CAAC,KAAa;IACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC3B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,KAAK;IACZ,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,IAAI,CAAC,GAAG,KAAa;IAC5B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;KAC7C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa,EAAE,KAAa;IAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAErC,OAAO,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3F,CAAC;AAED,SAAS,KAAK,CAAI,MAAW,EAAE,IAAY;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAC1E,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAC/C,CAAC;AACJ,CAAC"}
@@ -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,3 @@
1
+ import type { PieceChannelQuestions } from 'frogbot/pieces';
2
+ export declare const parseTelegramQuestion: PieceChannelQuestions['parse'];
3
+ //# sourceMappingURL=parse.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ import type { PieceChannelQuestions } from 'frogbot/pieces';
2
+ import type { TelegramBotClient } from '../client.js';
3
+ export declare const renderTelegramQuestion: PieceChannelQuestions<TelegramBotClient>['render'];
4
+ //# sourceMappingURL=render.d.ts.map
@@ -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,4 @@
1
+ import type { PieceChannelQuestions } from 'frogbot/pieces';
2
+ import type { TelegramBotClient } from '../client.js';
3
+ export declare const settleTelegramQuestion: PieceChannelQuestions<TelegramBotClient>['settled'];
4
+ //# sourceMappingURL=settled.d.ts.map
@@ -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,3 @@
1
+ import type { PieceChannelQuestions } from 'frogbot/pieces';
2
+ export declare const supportsTelegramQuestion: NonNullable<PieceChannelQuestions['supports']>;
3
+ //# sourceMappingURL=supports.d.ts.map
@@ -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,2 @@
1
+ export const supportsTelegramQuestion = ({ thread, }) => !thread.id.startsWith('telegram:biz:');
2
+ //# sourceMappingURL=supports.js.map
@@ -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,4 @@
1
+ import type { PieceChannelQuestions } from 'frogbot/pieces';
2
+ import type { TelegramBotClient } from '../client.js';
3
+ export declare const updateTelegramQuestion: NonNullable<PieceChannelQuestions<TelegramBotClient>['updated']>;
4
+ //# sourceMappingURL=updated.d.ts.map
@@ -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