iobroker.telegram-menu 2.4.2 → 2.4.3

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.
@@ -289,9 +289,16 @@ div.MuiTabPanel-root {
289
289
  justify-content: center;
290
290
  }
291
291
 
292
+ .rename__card label {
293
+ margin-top: 1rem !important;
294
+ width: 100% !important;
295
+ display: flex;
296
+ justify-content: center;
297
+ }
292
298
 
293
299
  .rename__card input {
294
300
  margin-top: 1rem !important;
301
+ width: 100% !important;
295
302
  }
296
303
 
297
304
  .table__cell_icon {
@@ -11,7 +11,7 @@
11
11
  "addCreatedMenus": "Füge bereits erstellte Menüs als Schaltflächen hinzu",
12
12
  "addMenu": "Neuen Menünamen hinzufügen",
13
13
  "binding": "Bindungen: Zuerst Var mit ID, dann die Bedingung und der Text.",
14
- "breakpointNewline": "Haltepunkt für eine neue Zeile. Fügen Sie diesen nur in den Text ein",
14
+ "breakpointNewline": "Eine neue Zeile beginnen",
15
15
  "call": "Aufruf",
16
16
  "cancel": "Stornieren",
17
17
  "changeFunction": "Ändert den Wert im Rückgabetext, in diesem Fall von „true“ auf „on“ und von „false“ auf „off“.",
@@ -11,7 +11,7 @@
11
11
  "addCreatedMenus": "Add already created menus as buttons",
12
12
  "addMenu": "Add new Menu Name",
13
13
  "binding": "Bindings: First Var with id then the condition and the text.",
14
- "breakpointNewline": "Breakpoint for a new line, Only insert this in the Text",
14
+ "breakpointNewline": "Add new line",
15
15
  "call": "Call",
16
16
  "cancel": "Cancel",
17
17
  "changeFunction": "Changes the value in the return text, in this case from true to on and false to off",
package/admin/words.js CHANGED
@@ -20,10 +20,11 @@ systemDictionary = {
20
20
  "addCreatedMenus": { "en": "Add already created menus as buttons", "de": "Füge bereits erstellte Menüs als Schaltflächen hinzu", "ru": "Добавляйте уже созданные меню в виде кнопок", "pt": "Adicione menus já criados como botões", "nl": "Voeg reeds gemaakte menu's toe als knoppen", "fr": "Ajouter des menus déjà créés sous forme de boutons", "it": "Aggiungi menu già creati come pulsanti", "es": "Agregar menús ya creados como botones", "pl": "Dodaj już utworzone menu jako przyciski", "uk": "Додайте вже створені меню як кнопки", "zh-cn": "添加已创建的菜单作为按钮"},
21
21
  "addMenu": { "en": "Add new Menu Name", "de": "Neuen Menünamen hinzufügen", "ru": "Добавить новое имя меню", "pt": "Adicionar novo nome de menu", "nl": "Nieuwe menunaam toevoegen", "fr": "Ajouter un nouveau nom de menu", "it": "Aggiungi un nuovo nome al menu", "es": "Agregar nuevo nombre de menú", "pl": "Dodaj nową nazwę menu", "uk": "Додайте нову назву меню", "zh-cn": "添加新菜单名称"},
22
22
  "binding": { "en": "Bindings: First Var with id then the condition and the text.", "de": "Bindungen: Zuerst Var mit ID, dann die Bedingung und der Text.", "ru": "Привязки: сначала Var с идентификатором, затем условие и текст.", "pt": "Vinculações: primeiro Var com id, depois a condição e o texto.", "nl": "Bindingen: eerst Var met id, daarna de voorwaarde en de tekst.", "fr": "Reliures : D'abord Var avec l'identifiant puis la condition et le texte.", "it": "Binding: prima Var con id poi la condizione e il testo.", "es": "Enlaces: Primero Var con id, luego la condición y el texto.", "pl": "Powiązania: Najpierw Var z identyfikatorem, potem warunek i tekst.", "uk": "Прив’язки: спочатку Var з ідентифікатором, потім умова та текст.", "zh-cn": "绑定:首先是带有 id 的 Var,然后是条件和文本。"},
23
- "breakpointNewline": { "en": "Breakpoint for a new line, Only insert this in the Text", "de": "Haltepunkt für eine neue Zeile. Fügen Sie diesen nur in den Text ein", "ru": "Точка останова для новой строки. Вставьте ее только в текст.", "pt": "Ponto de interrupção para uma nova linha, insira apenas isso no texto", "nl": "Breekpunt voor een nieuwe regel. Voeg dit alleen in de tekst in", "fr": "Point d'arrêt pour une nouvelle ligne, insérez-le uniquement dans le texte", "it": "Punto di interruzione per una nuova riga, inseriscilo solo nel testo", "es": "Punto de interrupción para una nueva línea, solo inserte esto en el texto", "pl": "Punkt przerwania nowej linii. Wstaw go tylko w tekście", "uk": "Точка зупину для нового рядка, вставте це лише в текст", "zh-cn": "新行的断点,仅将其插入文本中"},
23
+ "breakpointNewline": { "en": "Add new line", "de": "Eine neue Zeile beginnen", "ru": "Точка останова для новой строки. Вставьте ее только в текст.", "pt": "Ponto de interrupção para uma nova linha, insira apenas isso no texto", "nl": "Breekpunt voor een nieuwe regel. Voeg dit alleen in de tekst in", "fr": "Point d'arrêt pour une nouvelle ligne, insérez-le uniquement dans le texte", "it": "Punto di interruzione per una nuova riga, inseriscilo solo nel testo", "es": "Punto de interrupción para una nueva línea, solo inserte esto en el texto", "pl": "Punkt przerwania nowej linii. Wstaw go tylko w tekście", "uk": "Точка зупину для нового рядка, вставте це лише в текст", "zh-cn": "新行的断点,仅将其插入文本中"},
24
24
  "call": { "en": "Call", "de": "Aufruf", "ru": "Вызов", "pt": "Chamar", "nl": "Telefoongesprek", "fr": "Appel", "it": "Chiamata", "es": "Llamar", "pl": "Dzwonić", "uk": "Телефонуйте", "zh-cn": "称呼"},
25
25
  "cancel": { "en": "Cancel", "de": "Stornieren", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Cancellare", "es": "Cancelar", "pl": "Anulować", "uk": "Скасувати", "zh-cn": "取消"},
26
26
  "changeFunction": { "en": "Changes the value in the return text, in this case from true to on and false to off", "de": "Ändert den Wert im Rückgabetext, in diesem Fall von „true“ auf „on“ und von „false“ auf „off“.", "ru": "Изменяет значение в возвращаемом тексте, в данном случае с true на on и с false на off.", "pt": "Altera o valor no texto de retorno, neste caso de verdadeiro para ativado e falso para desativado", "nl": "Verandert de waarde in de retourtekst, in dit geval van true naar on en false naar off", "fr": "Modifie la valeur dans le texte de retour, dans ce cas de true à on et false à off", "it": "Modifica il valore nel testo restituito, in questo caso da true a on e false a off", "es": "Cambia el valor en el texto devuelto, en este caso de verdadero a activado y de falso a desactivado.", "pl": "Zmienia wartość w tekście zwracanym, w tym przypadku z true na on i false na off", "uk": "Змінює значення у тексті, що повертається, у цьому випадку з істинного на увімкнене та з неправдивого на вимкнене", "zh-cn": "更改返回文本中的值,在本例中从 true 更改为 on,将 false 更改为 off"},
27
+ "choose": { "en": "Choose", "de": "Wähle aus", "ru": "Выбирать", "pt": "Escolher", "nl": "Kiezen", "fr": "Choisir", "it": "Scegliere", "es": "Elegir", "pl": "Wybierać", "uk": "Виберіть", "zh-cn": "选择"},
27
28
  "chooseAction": { "en": "Choose an action", "de": "Wählen Sie eine Aktion", "ru": "Выберите действие", "pt": "Escolha uma ação", "nl": "Kies een actie", "fr": "Choisissez une action", "it": "Scegli un'azione", "es": "Elige una acción", "pl": "Wybierz akcję", "uk": "Виберіть дію", "zh-cn": "选择一个动作"},
28
29
  "close": { "en": "Close", "de": "Schließen", "ru": "Закрывать", "pt": "Fechar", "nl": "Dichtbij", "fr": "Fermer", "it": "Vicino", "es": "Cerca", "pl": "Zamknąć", "uk": "Закрити", "zh-cn": "关闭"},
29
30
  "commonName": { "en": "Outputs the name of the data point", "de": "Gibt den Namen des Datenpunkts aus", "ru": "Выводит имя точки данных", "pt": "Produz o nome do ponto de dados", "nl": "Voert de naam van het gegevenspunt uit", "fr": "Affiche le nom du point de données", "it": "Restituisce il nome del punto dati", "es": "Muestra el nombre del punto de datos.", "pl": "Wyświetla nazwę punktu danych", "uk": "Виводить назву точки даних", "zh-cn": "输出数据点的名称"},
@@ -82,6 +83,7 @@ systemDictionary = {
82
83
  "notifiedByChangeOfAnotherState": { "en": "If you want to be notified of the change of another data point after you have set the data point in the ID input field. The change will only be shared if it is set with ack:true. It is mandatory to specify a text outside the {}, otherwise it will be added automatically.", "de": "Wenn Sie über die Änderung eines anderen Datenpunkts benachrichtigt werden möchten, nachdem Sie den Datenpunkt im Eingabefeld ID festgelegt haben. Die Änderung wird nur geteilt, wenn sie mit ack:true gesetzt ist. Es ist zwingend erforderlich, einen Text außerhalb des {} anzugeben, andernfalls wird er automatisch hinzugefügt.", "ru": "Если вы хотите получать уведомления об изменении другой точки данных после того, как вы установили точку данных в поле ввода идентификатора. Изменение будет опубликовано только в том случае, если для него установлено значение ack:true. Обязательно укажите текст за пределами {}, иначе он будет добавлен автоматически.", "pt": "Se você deseja ser notificado sobre a alteração de outro ponto de dados depois de definir o ponto de dados no campo de entrada ID. A alteração só será compartilhada se estiver definida com ack:true. É obrigatório especificar um texto fora do {}, caso contrário ele será adicionado automaticamente.", "nl": "Als u op de hoogte wilt worden gesteld van de wijziging van een ander datapunt nadat u het datapunt in het ID-invoerveld hebt ingesteld. De wijziging wordt alleen gedeeld als deze is ingesteld met ack:true. Het is verplicht om een ​​tekst buiten de {} op te geven, anders wordt deze automatisch toegevoegd.", "fr": "Si vous souhaitez être informé du changement d'un autre point de données après avoir défini le point de données dans le champ de saisie ID. La modification ne sera partagée que si elle est définie avec ack:true. Il est obligatoire de préciser un texte en dehors du {}, sinon il sera ajouté automatiquement.", "it": "Se desideri essere avvisato della modifica di un altro punto dati dopo aver impostato il punto dati nel campo di immissione ID. La modifica verrà condivisa solo se è impostata con ack:true. È obbligatorio specificare un testo fuori dal {}, altrimenti verrà aggiunto automaticamente.", "es": "Si desea recibir una notificación sobre el cambio de otro punto de datos después de haber configurado el punto de datos en el campo de entrada de ID. El cambio solo se compartirá si se establece con ack:true. Es obligatorio especificar un texto fuera del {}, de lo contrario se agregará automáticamente.", "pl": "Jeśli chcesz otrzymać powiadomienie o zmianie innego punktu danych po ustawieniu punktu danych w polu wprowadzania ID. Zmiana zostanie udostępniona tylko wtedy, gdy zostanie ustawiona opcja ack:true. Obowiązkowe jest podanie tekstu poza {}, w przeciwnym razie zostanie on dodany automatycznie.", "uk": "Якщо ви хочете отримувати сповіщення про зміну іншої точки даних після того, як ви встановили точку даних у полі введення ідентифікатора. Зміну буде надано спільний доступ, лише якщо для неї встановлено ack:true. Обов’язково вказувати текст поза {}, інакше він буде додано автоматично.", "zh-cn": "如果您在 ID 输入字段中设置数据点后希望收到另一个数据点更改的通知。仅当设置了 ack:true 时,更改才会被共享。必须在 {} 之外指定文本,否则将自动添加。"},
83
84
  "ok": { "en": "OK", "de": "OK", "ru": "ХОРОШО", "pt": "OK", "nl": "OK", "fr": "D'ACCORD", "it": "OK", "es": "DE ACUERDO", "pl": "OK", "uk": "добре", "zh-cn": "好的"},
84
85
  "oneTimeKey": { "en": "Requests clients to resize the keyboard vertically for optimal fit (e.g., make the keyboard smaller if there are just two rows of buttons). Defaults to false, in which case the custom keyboard is always of the same height as the app's standard keyboard.", "de": "Fordert Kunden auf, die Größe der Tastatur vertikal zu ändern, um eine optimale Passform zu erzielen (z. B. die Tastatur kleiner zu machen, wenn nur zwei Tastenreihen vorhanden sind). Der Standardwert ist „false“. In diesem Fall hat die benutzerdefinierte Tastatur immer die gleiche Höhe wie die Standardtastatur der App.", "ru": "Просит клиентов изменить размер клавиатуры по вертикали для оптимального соответствия (например, уменьшить клавиатуру, если на ней всего два ряда кнопок). По умолчанию установлено значение false. В этом случае пользовательская клавиатура всегда имеет ту же высоту, что и стандартная клавиатура приложения.", "pt": "Solicita que os clientes redimensionem o teclado verticalmente para um ajuste ideal (por exemplo, diminuam o tamanho do teclado se houver apenas duas fileiras de botões). O padrão é falso; nesse caso, o teclado personalizado terá sempre a mesma altura do teclado padrão do aplicativo.", "nl": "Verzoekt klanten om het toetsenbord verticaal aan te passen voor een optimale pasvorm (maak het toetsenbord bijvoorbeeld kleiner als er slechts twee rijen knoppen zijn). Standaard ingesteld op false, in welk geval het aangepaste toetsenbord altijd dezelfde hoogte heeft als het standaardtoetsenbord van de app.", "fr": "Demande aux clients de redimensionner le clavier verticalement pour un ajustement optimal (par exemple, réduire la taille du clavier s'il n'y a que deux rangées de boutons). La valeur par défaut est false, auquel cas le clavier personnalisé a toujours la même hauteur que le clavier standard de l'application.", "it": "Richiede ai client di ridimensionare la tastiera verticalmente per adattarla in modo ottimale (ad esempio, riduci la tastiera se sono presenti solo due file di pulsanti). Il valore predefinito è false, nel qual caso la tastiera personalizzata ha sempre la stessa altezza della tastiera standard dell'app.", "es": "Solicita a los clientes que cambien el tamaño del teclado verticalmente para lograr un ajuste óptimo (por ejemplo, reducir el tamaño del teclado si solo hay dos filas de botones). El valor predeterminado es falso, en cuyo caso el teclado personalizado siempre tiene la misma altura que el teclado estándar de la aplicación.", "pl": "Żąda od klientów zmiany rozmiaru klawiatury w pionie w celu zapewnienia optymalnego dopasowania (np. zmniejszenia klawiatury, jeśli są tylko dwa rzędy przycisków). Domyślnie ustawiona jest wartość false. W takim przypadku niestandardowa klawiatura ma zawsze tę samą wysokość co standardowa klawiatura aplikacji.", "uk": "Просить клієнтів змінити розмір клавіатури по вертикалі для оптимального припасування (наприклад, зробити клавіатуру меншою, якщо є лише два ряди кнопок). За замовчуванням значення false, у цьому випадку спеціальна клавіатура завжди має ту саму висоту, що й стандартна клавіатура програми.", "zh-cn": "要求客户垂直调整键盘大小以获得最佳配合(例如,如果只有两行按钮,则缩小键盘)。默认为 false,在这种情况下,自定义键盘始终与应用程序的标准键盘具有相同的高度。"},
86
+ "options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "Opties", "fr": "Options", "it": "Opzioni", "es": "Opción", "pl": "Opcje", "uk": "Варіанти", "zh-cn": "选项"},
85
87
  "overview": { "en": "Overview", "de": "Überblick", "ru": "Обзор", "pt": "Visão geral", "nl": "Overzicht", "fr": "Aperçu", "it": "Panoramica", "es": "Descripción general", "pl": "Przegląd", "uk": "Огляд", "zh-cn": "概述"},
86
88
  "parseMode": { "en": "Parse Mode HTML", "de": "HTML im Analysemodus", "ru": "Режим анализа HTML", "pt": "HTML do modo de análise", "nl": "Parseermodus HTML", "fr": "HTML en mode analyse", "it": "Modalità di analisi HTML", "es": "Modo de análisis HTML", "pl": "Tryb analizy kodu HTML", "uk": "Режим аналізу HTML", "zh-cn": "解析模式 HTML"},
87
89
  "parseModeBold": { "en": "Text in Parse-Mode is bold", "de": "Text im Parse-Modus ist fett", "ru": "Текст в режиме анализа выделен жирным шрифтом.", "pt": "O texto no modo Parse está em negrito", "nl": "Tekst in de parse-modus is vetgedrukt", "fr": "Le texte en mode analyse est en gras", "it": "Il testo in modalità analisi è in grassetto", "es": "El texto en modo Parse está en negrita", "pl": "Tekst w trybie analizy jest pogrubiony", "uk": "Текст у режимі аналізу виділяється жирним шрифтом", "zh-cn": "解析模式下的文本为粗体"},
@@ -130,6 +132,4 @@ systemDictionary = {
130
132
  "valueRound": { "en": "Rounds the value for example to 2 decimal places", "de": "Rundet den Wert beispielsweise auf 2 Dezimalstellen", "ru": "Округляет значение, например, до 2 десятичных знаков.", "pt": "Arredonda o valor, por exemplo, para 2 casas decimais", "nl": "Rondt de waarde bijvoorbeeld af op 2 decimalen", "fr": "Arrondit la valeur par exemple à 2 décimales", "it": "Arrotonda il valore, ad esempio, a 2 cifre decimali", "es": "Redondea el valor, por ejemplo, a 2 decimales.", "pl": "Zaokrągla wartość na przykład do 2 miejsc po przecinku", "uk": "Округлює значення, наприклад, до 2 знаків після коми", "zh-cn": "例如,将值四舍五入到小数点后两位"},
131
133
  "values": { "en": "Values", "de": "Werte", "ru": "Ценности", "pt": "Valores", "nl": "Waarden", "fr": "Valeurs", "it": "Valori", "es": "Valores", "pl": "Wartości", "uk": "Цінності", "zh-cn": "价值观"},
132
134
  "yes": { "en": "Yes", "de": "Ja", "ru": "Да", "pt": "Sim", "nl": "Ja", "fr": "Oui", "it": "SÌ", "es": "Sí", "pl": "Tak", "uk": "так", "zh-cn": "是的"},
133
- "choose": { "en": "Choose", "de": "Wähle aus", "ru": "Выбирать", "pt": "Escolher", "nl": "Kiezen", "fr": "Choisir", "it": "Scegliere", "es": "Elegir", "pl": "Wybierać", "uk": "Виберіть", "zh-cn": "选择"},
134
- "options": { "en": "Options", "de": "Optionen", "ru": "Параметры", "pt": "Opções", "nl": "Opties", "fr": "Options", "it": "Opzioni", "es": "Opción", "pl": "Opcje", "uk": "Варіанти", "zh-cn": "选项"},
135
135
  };
@@ -25,12 +25,12 @@ __export(dynamicValue_exports, {
25
25
  module.exports = __toCommonJS(dynamicValue_exports);
26
26
  var import_string = require("../lib/string");
27
27
  var import_telegram = require("./telegram");
28
- const setDynamicValueObj = {};
28
+ const dynamicValueObj = {};
29
29
  const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams, parse_mode, confirm) => {
30
- const { substring } = (0, import_string.decomposeText)(returnText, "{setDynamicValue:", "}");
31
- let array = substring.split(":");
30
+ const { substringExcludeSearch } = (0, import_string.decomposeText)(returnText, "{setDynamicValue:", "}");
31
+ let array = substringExcludeSearch.split(":");
32
32
  array = isBraceDeleteEntry(array);
33
- const text = array[1];
33
+ const text = array[0];
34
34
  if (text) {
35
35
  await (0, import_telegram.sendToTelegram)({
36
36
  userToSend,
@@ -39,7 +39,7 @@ const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams,
39
39
  parse_mode
40
40
  });
41
41
  }
42
- setDynamicValueObj[userToSend] = {
42
+ dynamicValueObj[userToSend] = {
43
43
  id,
44
44
  ack,
45
45
  returnText: text,
@@ -47,20 +47,21 @@ const setDynamicValue = async (returnText, ack, id, userToSend, telegramParams,
47
47
  parse_mode,
48
48
  confirm,
49
49
  telegramParams,
50
- valueType: array[2]
50
+ valueType: array[1],
51
+ navToGoTo: array[3]
51
52
  };
52
- if (array[3] && array[3] != "") {
53
- return { confirmText: array[3], id: array[4] };
53
+ if (array[2] && array[2] != "") {
54
+ return { confirmText: array[2], id: array[3] !== "" ? array[3] : void 0 };
54
55
  }
55
56
  return { confirmText: "", id: void 0 };
56
57
  };
57
58
  const getDynamicValue = (userToSend) => {
58
59
  var _a;
59
- return (_a = setDynamicValueObj[userToSend]) != null ? _a : null;
60
+ return (_a = dynamicValueObj[userToSend]) != null ? _a : null;
60
61
  };
61
62
  const removeUserFromDynamicValue = (userToSend) => {
62
- if (setDynamicValueObj[userToSend]) {
63
- delete setDynamicValueObj[userToSend];
63
+ if (dynamicValueObj[userToSend]) {
64
+ delete dynamicValueObj[userToSend];
64
65
  return true;
65
66
  }
66
67
  return false;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/app/dynamicValue.ts"],
4
- "sourcesContent": ["import { decomposeText } from '../lib/string';\nimport { sendToTelegram } from './telegram';\nimport type { SetDynamicValue, SetDynamicValueObj, TelegramParams } from '../types/types';\n\nconst setDynamicValueObj: SetDynamicValueObj = {};\nexport const setDynamicValue = async (\n returnText: string,\n ack: boolean,\n id: string,\n userToSend: string,\n telegramParams: TelegramParams,\n parse_mode: boolean,\n confirm: string,\n): Promise<{ confirmText: string; id: string | undefined }> => {\n const { substring } = decomposeText(returnText, '{setDynamicValue:', '}');\n let array = substring.split(':');\n array = isBraceDeleteEntry(array);\n const text = array[1];\n if (text) {\n await sendToTelegram({\n userToSend,\n textToSend: text,\n telegramParams,\n parse_mode,\n });\n }\n setDynamicValueObj[userToSend] = {\n id,\n ack,\n returnText: text,\n userToSend,\n parse_mode,\n confirm,\n telegramParams,\n valueType: array[2],\n };\n\n if (array[3] && array[3] != '') {\n return { confirmText: array[3], id: array[4] };\n }\n return { confirmText: '', id: undefined };\n};\n\nexport const getDynamicValue = (userToSend: string): SetDynamicValue | null => setDynamicValueObj[userToSend] ?? null;\n\nexport const removeUserFromDynamicValue = (userToSend: string): boolean => {\n if (setDynamicValueObj[userToSend]) {\n delete setDynamicValueObj[userToSend];\n return true;\n }\n return false;\n};\n\nfunction isBraceDeleteEntry(array: string[]): string[] {\n if (array[4] === '}') {\n return array.slice(0, 4);\n }\n return array;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8B;AAC9B,sBAA+B;AAG/B,MAAM,qBAAyC,CAAC;AACzC,MAAM,kBAAkB,OAC3B,YACA,KACA,IACA,YACA,gBACA,YACA,YAC2D;AAC3D,QAAM,EAAE,UAAU,QAAI,6BAAc,YAAY,qBAAqB,GAAG;AACxE,MAAI,QAAQ,UAAU,MAAM,GAAG;AAC/B,UAAQ,mBAAmB,KAAK;AAChC,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,MAAM;AACN,cAAM,gCAAe;AAAA,MACjB;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACA,qBAAmB,UAAU,IAAI;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM,CAAC;AAAA,EACtB;AAEA,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI;AAC5B,WAAO,EAAE,aAAa,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,EAAE;AAAA,EACjD;AACA,SAAO,EAAE,aAAa,IAAI,IAAI,OAAU;AAC5C;AAEO,MAAM,kBAAkB,CAAC,eAA4C;AA3C5E;AA2C+E,kCAAmB,UAAU,MAA7B,YAAkC;AAAA;AAE1G,MAAM,6BAA6B,CAAC,eAAgC;AACvE,MAAI,mBAAmB,UAAU,GAAG;AAChC,WAAO,mBAAmB,UAAU;AACpC,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,SAAS,mBAAmB,OAA2B;AACnD,MAAI,MAAM,CAAC,MAAM,KAAK;AAClB,WAAO,MAAM,MAAM,GAAG,CAAC;AAAA,EAC3B;AACA,SAAO;AACX;",
4
+ "sourcesContent": ["import { decomposeText } from '../lib/string';\nimport { sendToTelegram } from './telegram';\nimport type { SetDynamicValue, SetDynamicValueObj, TelegramParams } from '../types/types';\n\nconst dynamicValueObj: SetDynamicValueObj = {};\nexport const setDynamicValue = async (\n returnText: string,\n ack: boolean,\n id: string,\n userToSend: string,\n telegramParams: TelegramParams,\n parse_mode: boolean,\n confirm: string,\n): Promise<{ confirmText: string; id: string | undefined }> => {\n const { substringExcludeSearch } = decomposeText(returnText, '{setDynamicValue:', '}');\n let array = substringExcludeSearch.split(':');\n array = isBraceDeleteEntry(array);\n const text = array[0];\n if (text) {\n await sendToTelegram({\n userToSend,\n textToSend: text,\n telegramParams,\n parse_mode,\n });\n }\n dynamicValueObj[userToSend] = {\n id,\n ack,\n returnText: text,\n userToSend,\n parse_mode,\n confirm,\n telegramParams,\n valueType: array[1],\n navToGoTo: array[3],\n };\n\n if (array[2] && array[2] != '') {\n return { confirmText: array[2], id: array[3] !== '' ? array[3] : undefined };\n }\n return { confirmText: '', id: undefined };\n};\n\nexport const getDynamicValue = (userToSend: string): SetDynamicValue | null => dynamicValueObj[userToSend] ?? null;\n\nexport const removeUserFromDynamicValue = (userToSend: string): boolean => {\n if (dynamicValueObj[userToSend]) {\n delete dynamicValueObj[userToSend];\n return true;\n }\n return false;\n};\n\nfunction isBraceDeleteEntry(array: string[]): string[] {\n if (array[4] === '}') {\n return array.slice(0, 4);\n }\n return array;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA8B;AAC9B,sBAA+B;AAG/B,MAAM,kBAAsC,CAAC;AACtC,MAAM,kBAAkB,OAC3B,YACA,KACA,IACA,YACA,gBACA,YACA,YAC2D;AAC3D,QAAM,EAAE,uBAAuB,QAAI,6BAAc,YAAY,qBAAqB,GAAG;AACrF,MAAI,QAAQ,uBAAuB,MAAM,GAAG;AAC5C,UAAQ,mBAAmB,KAAK;AAChC,QAAM,OAAO,MAAM,CAAC;AACpB,MAAI,MAAM;AACN,cAAM,gCAAe;AAAA,MACjB;AAAA,MACA,YAAY;AAAA,MACZ;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACA,kBAAgB,UAAU,IAAI;AAAA,IAC1B;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,MAAM,CAAC;AAAA,IAClB,WAAW,MAAM,CAAC;AAAA,EACtB;AAEA,MAAI,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI;AAC5B,WAAO,EAAE,aAAa,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,OAAU;AAAA,EAC/E;AACA,SAAO,EAAE,aAAa,IAAI,IAAI,OAAU;AAC5C;AAEO,MAAM,kBAAkB,CAAC,eAA4C;AA5C5E;AA4C+E,+BAAgB,UAAU,MAA1B,YAA+B;AAAA;AAEvG,MAAM,6BAA6B,CAAC,eAAgC;AACvE,MAAI,gBAAgB,UAAU,GAAG;AAC7B,WAAO,gBAAgB,UAAU;AACjC,WAAO;AAAA,EACX;AACA,SAAO;AACX;AAEA,SAAS,mBAAmB,OAA2B;AACnD,MAAI,MAAM,CAAC,MAAM,KAAK;AAClB,WAAO,MAAM,MAAM,GAAG,CAAC;AAAA,EAC3B;AACA,SAAO;AACX;",
6
6
  "names": []
7
7
  }
@@ -40,7 +40,7 @@ var import_validateMenus = require("./validateMenus");
40
40
  let timeouts = [];
41
41
  async function checkEveryMenuForData({
42
42
  menuData,
43
- calledValue,
43
+ navToGoTo,
44
44
  userToSend,
45
45
  telegramParams,
46
46
  menus,
@@ -55,7 +55,7 @@ async function checkEveryMenuForData({
55
55
  import_main.adapter.log.debug(`Nav : ${(0, import_string.jsonString)(menuData[menu])}`);
56
56
  if (await processData({
57
57
  menuData,
58
- calledValue,
58
+ calledValue: navToGoTo,
59
59
  userToSend,
60
60
  groupWithUser: menu,
61
61
  telegramParams,
@@ -89,17 +89,17 @@ async function processData({
89
89
  }) {
90
90
  try {
91
91
  let part = {};
92
- const res = (0, import_dynamicValue.getDynamicValue)(userToSend);
93
- if (res) {
94
- const valueToSet = (res == null ? void 0 : res.valueType) ? (0, import_action.adjustValueType)(calledValue, res.valueType) : calledValue;
95
- valueToSet && (res == null ? void 0 : res.id) ? await (0, import_setstate.setstateIobroker)({ id: res.id, value: valueToSet, ack: res == null ? void 0 : res.ack }) : await (0, import_telegram.sendToTelegram)({
92
+ const dynamicValue = (0, import_dynamicValue.getDynamicValue)(userToSend);
93
+ if (dynamicValue) {
94
+ const valueToSet = (dynamicValue == null ? void 0 : dynamicValue.valueType) ? (0, import_action.adjustValueType)(calledValue, dynamicValue.valueType) : calledValue;
95
+ valueToSet && (dynamicValue == null ? void 0 : dynamicValue.id) ? await (0, import_setstate.setstateIobroker)({ id: dynamicValue.id, value: valueToSet, ack: dynamicValue == null ? void 0 : dynamicValue.ack }) : await (0, import_telegram.sendToTelegram)({
96
96
  userToSend,
97
- textToSend: `You insert a wrong Type of value, please insert type : ${res == null ? void 0 : res.valueType}`,
97
+ textToSend: `You insert a wrong Type of value, please insert type : ${dynamicValue == null ? void 0 : dynamicValue.valueType}`,
98
98
  telegramParams
99
99
  });
100
100
  (0, import_dynamicValue.removeUserFromDynamicValue)(userToSend);
101
101
  const result = await (0, import_backMenu.switchBack)(userToSend, allMenusWithData, menus, true);
102
- if (result) {
102
+ if (result && !dynamicValue.navToGoTo) {
103
103
  const { textToSend, keyboard, parse_mode } = result;
104
104
  await (0, import_telegram.sendToTelegram)({ userToSend, textToSend, keyboard, telegramParams, parse_mode });
105
105
  return true;
@@ -127,7 +127,7 @@ async function processData({
127
127
  if (result == null ? void 0 : result.newNav) {
128
128
  await checkEveryMenuForData({
129
129
  menuData,
130
- calledValue: result.newNav,
130
+ navToGoTo: result.newNav,
131
131
  userToSend,
132
132
  telegramParams,
133
133
  menus,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/app/processData.ts"],
4
- "sourcesContent": ["import { adapter } from '../main';\nimport { sendLocationToTelegram, sendToTelegram } from './telegram';\nimport { sendNav } from './sendNav';\nimport { callSubMenu } from './subMenu';\nimport { backMenuFunc, switchBack } from './backMenu';\nimport { handleSetState, setstateIobroker } from './setstate';\nimport { getState } from './getstate';\nimport { sendPic } from './sendpic';\nimport { getDynamicValue, removeUserFromDynamicValue } from './dynamicValue';\nimport { adjustValueType } from './action';\nimport { getChart } from './echarts';\nimport { httpRequest } from './httpRequest';\nimport { errorLogger } from './logging';\nimport type { CheckEveryMenuForDataType, Part, ProcessDataType, Timeouts } from '../types/types';\nimport { jsonString } from '../lib/string';\nimport { isSubmenuOrMenu } from './validateMenus';\n\nlet timeouts: Timeouts[] = [];\n\nexport async function checkEveryMenuForData({\n menuData,\n calledValue,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n}: CheckEveryMenuForDataType): Promise<boolean> {\n for (const menu of menus) {\n const groupData = menuData[menu];\n\n adapter.log.debug(`Menu : ${menu}`);\n adapter.log.debug(`Nav : ${jsonString(menuData[menu])}`);\n\n if (\n await processData({\n menuData,\n calledValue,\n userToSend,\n groupWithUser: menu,\n telegramParams,\n allMenusWithData: menuData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n })\n ) {\n adapter.log.debug('Menu found');\n return true;\n }\n }\n return false;\n}\n\nasync function processData({\n menuData,\n calledValue,\n userToSend,\n groupWithUser,\n telegramParams,\n allMenusWithData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n}: ProcessDataType): Promise<boolean | undefined> {\n try {\n let part: Part | undefined = {} as Part;\n\n const res = getDynamicValue(userToSend);\n if (res) {\n const valueToSet = res?.valueType ? adjustValueType(calledValue, res.valueType) : calledValue;\n\n valueToSet && res?.id\n ? await setstateIobroker({ id: res.id, value: valueToSet, ack: res?.ack })\n : await sendToTelegram({\n userToSend,\n textToSend: `You insert a wrong Type of value, please insert type : ${res?.valueType}`,\n telegramParams,\n });\n\n removeUserFromDynamicValue(userToSend);\n const result = await switchBack(userToSend, allMenusWithData, menus, true);\n\n if (result) {\n const { textToSend, keyboard, parse_mode } = result;\n await sendToTelegram({ userToSend, textToSend, keyboard, telegramParams, parse_mode });\n return true;\n }\n\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n const call = calledValue.includes('menu:') ? calledValue.split(':')[2] : calledValue;\n part = groupData[call];\n\n if (!calledValue.toString().includes('menu:') && isUserActiveCheckbox[groupWithUser]) {\n const nav = part?.nav;\n if (nav) {\n adapter.log.debug(`Menu to Send: ${jsonString(nav)}`);\n\n backMenuFunc({ activePage: call, navigation: nav, userToSend });\n\n if (jsonString(nav).includes('menu:')) {\n adapter.log.debug(`Submenu: ${jsonString(nav)}`);\n\n const result = await callSubMenu({\n jsonStringNav: jsonString(nav),\n userToSend,\n telegramParams,\n part,\n allMenusWithData,\n menus,\n });\n if (result?.newNav) {\n await checkEveryMenuForData({\n menuData,\n calledValue: result.newNav,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n }\n return true;\n }\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.switch) {\n await handleSetState(part, userToSend, 0, telegramParams);\n return true;\n }\n\n if (part?.getData) {\n await getState(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.sendPic) {\n timeouts = sendPic(part, userToSend, telegramParams, token, directoryPicture, timeouts, timeoutKey);\n return true;\n }\n\n if (part?.location) {\n adapter.log.debug('Send location');\n await sendLocationToTelegram(userToSend, part.location, telegramParams);\n return true;\n }\n\n if (part?.echarts) {\n adapter.log.debug('Send echarts');\n getChart(part.echarts, directoryPicture, userToSend, telegramParams);\n return true;\n }\n\n if (part?.httpRequest) {\n adapter.log.debug('Send http request');\n const result = await httpRequest(part, userToSend, telegramParams, directoryPicture);\n return !!result;\n }\n }\n if (isSubmenuOrMenu(calledValue) && menuData[groupWithUser][call]) {\n adapter.log.debug('Call Submenu');\n await callSubMenu({\n jsonStringNav: calledValue,\n userToSend: userToSend,\n telegramParams: telegramParams,\n part: part,\n allMenusWithData: allMenusWithData,\n menus: menus,\n });\n return true;\n }\n return false;\n } catch (e: any) {\n errorLogger('Error processData:', e, adapter);\n }\n}\n\nexport function getTimeouts(): Timeouts[] {\n return timeouts;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { adapter } from '../main';\nimport { sendLocationToTelegram, sendToTelegram } from './telegram';\nimport { sendNav } from './sendNav';\nimport { callSubMenu } from './subMenu';\nimport { backMenuFunc, switchBack } from './backMenu';\nimport { handleSetState, setstateIobroker } from './setstate';\nimport { getState } from './getstate';\nimport { sendPic } from './sendpic';\nimport { getDynamicValue, removeUserFromDynamicValue } from './dynamicValue';\nimport { adjustValueType } from './action';\nimport { getChart } from './echarts';\nimport { httpRequest } from './httpRequest';\nimport { errorLogger } from './logging';\nimport type { CheckEveryMenuForDataType, Part, ProcessDataType, Timeouts } from '../types/types';\nimport { jsonString } from '../lib/string';\nimport { isSubmenuOrMenu } from './validateMenus';\n\nlet timeouts: Timeouts[] = [];\n\nexport async function checkEveryMenuForData({\n menuData,\n navToGoTo,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n}: CheckEveryMenuForDataType): Promise<boolean> {\n for (const menu of menus) {\n const groupData = menuData[menu];\n\n adapter.log.debug(`Menu : ${menu}`);\n adapter.log.debug(`Nav : ${jsonString(menuData[menu])}`);\n\n if (\n await processData({\n menuData,\n calledValue: navToGoTo,\n userToSend,\n groupWithUser: menu,\n telegramParams,\n allMenusWithData: menuData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n })\n ) {\n adapter.log.debug('Menu found');\n return true;\n }\n }\n return false;\n}\n\nasync function processData({\n menuData,\n calledValue,\n userToSend,\n groupWithUser,\n telegramParams,\n allMenusWithData,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n groupData,\n}: ProcessDataType): Promise<boolean | undefined> {\n try {\n let part: Part | undefined = {} as Part;\n\n const dynamicValue = getDynamicValue(userToSend);\n if (dynamicValue) {\n const valueToSet = dynamicValue?.valueType\n ? adjustValueType(calledValue, dynamicValue.valueType)\n : calledValue;\n\n valueToSet && dynamicValue?.id\n ? await setstateIobroker({ id: dynamicValue.id, value: valueToSet, ack: dynamicValue?.ack })\n : await sendToTelegram({\n userToSend,\n textToSend: `You insert a wrong Type of value, please insert type : ${dynamicValue?.valueType}`,\n telegramParams,\n });\n\n removeUserFromDynamicValue(userToSend);\n const result = await switchBack(userToSend, allMenusWithData, menus, true);\n\n if (result && !dynamicValue.navToGoTo) {\n const { textToSend, keyboard, parse_mode } = result;\n await sendToTelegram({ userToSend, textToSend, keyboard, telegramParams, parse_mode });\n return true;\n }\n\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n const call = calledValue.includes('menu:') ? calledValue.split(':')[2] : calledValue;\n part = groupData[call];\n\n if (!calledValue.toString().includes('menu:') && isUserActiveCheckbox[groupWithUser]) {\n const nav = part?.nav;\n if (nav) {\n adapter.log.debug(`Menu to Send: ${jsonString(nav)}`);\n\n backMenuFunc({ activePage: call, navigation: nav, userToSend });\n\n if (jsonString(nav).includes('menu:')) {\n adapter.log.debug(`Submenu: ${jsonString(nav)}`);\n\n const result = await callSubMenu({\n jsonStringNav: jsonString(nav),\n userToSend,\n telegramParams,\n part,\n allMenusWithData,\n menus,\n });\n if (result?.newNav) {\n await checkEveryMenuForData({\n menuData,\n navToGoTo: result.newNav,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n }\n return true;\n }\n await sendNav(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.switch) {\n await handleSetState(part, userToSend, 0, telegramParams);\n return true;\n }\n\n if (part?.getData) {\n await getState(part, userToSend, telegramParams);\n return true;\n }\n\n if (part?.sendPic) {\n timeouts = sendPic(part, userToSend, telegramParams, token, directoryPicture, timeouts, timeoutKey);\n return true;\n }\n\n if (part?.location) {\n adapter.log.debug('Send location');\n await sendLocationToTelegram(userToSend, part.location, telegramParams);\n return true;\n }\n\n if (part?.echarts) {\n adapter.log.debug('Send echarts');\n getChart(part.echarts, directoryPicture, userToSend, telegramParams);\n return true;\n }\n\n if (part?.httpRequest) {\n adapter.log.debug('Send http request');\n const result = await httpRequest(part, userToSend, telegramParams, directoryPicture);\n return !!result;\n }\n }\n if (isSubmenuOrMenu(calledValue) && menuData[groupWithUser][call]) {\n adapter.log.debug('Call Submenu');\n await callSubMenu({\n jsonStringNav: calledValue,\n userToSend: userToSend,\n telegramParams: telegramParams,\n part: part,\n allMenusWithData: allMenusWithData,\n menus: menus,\n });\n return true;\n }\n return false;\n } catch (e: any) {\n errorLogger('Error processData:', e, adapter);\n }\n}\n\nexport function getTimeouts(): Timeouts[] {\n return timeouts;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -95,6 +95,7 @@ const handleSetState = async (part, userToSend, valueFromSubmenu, telegramParams
95
95
  userToSend
96
96
  });
97
97
  }
98
+ return;
98
99
  }
99
100
  if (!returnText.includes("{'id':'")) {
100
101
  await (0, import_setStateIdsToListenTo.addSetStateIds)({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/app/setstate.ts"],
4
- "sourcesContent": ["import { sendToTelegram } from './telegram';\nimport { transformValueToTypeOfId } from '../lib/utilities';\nimport { setDynamicValue } from './dynamicValue';\nimport { adapter } from '../main';\nimport { errorLogger } from './logging';\nimport type { Part, TelegramParams } from '../types/types';\nimport { decomposeText, isNonEmptyString, jsonString, parseJSON } from '../lib/string';\nimport { isDefined } from '../lib/utils';\nimport { config } from '../config/config';\nimport { addSetStateIds } from './setStateIdsToListenTo';\nimport { exchangeValue } from '../lib/exchangeValue';\n\nconst modifiedValue = (valueFromSubmenu: string, value: string): string => {\n return value.includes(config.modifiedValue)\n ? value.replace(config.modifiedValue, valueFromSubmenu)\n : valueFromSubmenu;\n};\n\nconst isDynamicValueToSet = async (value: string | number | boolean): Promise<string | number | boolean> => {\n if (typeof value === 'string' && value.includes(config.dynamicValue.start)) {\n const { substring, substringExcludeSearch: id } = decomposeText(\n value,\n config.dynamicValue.start,\n config.dynamicValue.end,\n );\n\n const newValue = await adapter.getForeignStateAsync(id);\n\n return value.replace(substring, String(newValue?.val));\n }\n return value;\n};\n\nexport const setstateIobroker = async ({\n id,\n value,\n ack,\n}: {\n id: string;\n value: string | number | boolean;\n ack: boolean;\n}): Promise<void> => {\n try {\n const val = await transformValueToTypeOfId(id, value);\n\n adapter.log.debug(`Value to Set: ${jsonString(val)}`);\n if (isDefined(val)) {\n await adapter.setForeignStateAsync(id, val, ack);\n }\n } catch (error: any) {\n errorLogger('Error Setstate', error, adapter);\n }\n};\n\nconst setValue = async (\n id: string,\n value: string,\n valueFromSubmenu: string | number | boolean,\n ack: boolean,\n): Promise<void> => {\n try {\n // If Value is set in Config the value will set to datapoint otherwise the value from submenu, so submenuValuePriority is obsolete\n const valueToSet =\n isDefined(value) && isNonEmptyString(value)\n ? await isDynamicValueToSet(value)\n : modifiedValue(String(valueFromSubmenu), value);\n\n await setstateIobroker({ id, value: valueToSet, ack });\n } catch (error: any) {\n errorLogger('Error setValue', error, adapter);\n }\n};\n\nexport const handleSetState = async (\n part: Part,\n userToSend: string,\n valueFromSubmenu: string | number | boolean,\n telegramParams: TelegramParams,\n): Promise<void> => {\n try {\n if (!part.switch) {\n return;\n }\n for (const { returnText: text, id: ID, parse_mode, confirm, ack, toggle, value } of part.switch) {\n let returnText = text;\n if (returnText.includes(config.setDynamicValue)) {\n const { confirmText, id } = await setDynamicValue(\n returnText,\n ack,\n ID,\n userToSend,\n telegramParams,\n parse_mode,\n confirm,\n );\n\n if (confirm) {\n await addSetStateIds({\n id: id ?? ID,\n confirm,\n returnText: confirmText,\n userToSend,\n });\n }\n }\n\n if (!returnText.includes(\"{'id':'\")) {\n await addSetStateIds({\n id: ID,\n confirm,\n returnText,\n userToSend,\n parse_mode,\n });\n } else {\n returnText = returnText.replace(/'/g, '\"');\n const { substring } = decomposeText(returnText, '{\"id\":', '}');\n const { json, isValidJson } = parseJSON<{ text: string; id: string }>(substring);\n if (!isValidJson) {\n return;\n }\n const text = returnText.replace(substring, json.text);\n const { textToSend } = exchangeValue(adapter, text, valueFromSubmenu);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n telegramParams,\n parse_mode,\n });\n\n await addSetStateIds({\n id: json.id,\n confirm: true,\n returnText: json.text,\n userToSend: userToSend,\n });\n }\n if (toggle) {\n const state = await adapter.getForeignStateAsync(ID);\n\n state\n ? await setstateIobroker({ id: ID, value: !state.val, ack })\n : await setstateIobroker({ id: ID, value: false, ack });\n } else {\n await setValue(ID, value, valueFromSubmenu, ack);\n }\n }\n } catch (error: any) {\n errorLogger('Error Switch', error, adapter);\n }\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { sendToTelegram } from './telegram';\nimport { transformValueToTypeOfId } from '../lib/utilities';\nimport { setDynamicValue } from './dynamicValue';\nimport { adapter } from '../main';\nimport { errorLogger } from './logging';\nimport type { Part, TelegramParams } from '../types/types';\nimport { decomposeText, isNonEmptyString, jsonString, parseJSON } from '../lib/string';\nimport { isDefined } from '../lib/utils';\nimport { config } from '../config/config';\nimport { addSetStateIds } from './setStateIdsToListenTo';\nimport { exchangeValue } from '../lib/exchangeValue';\n\nconst modifiedValue = (valueFromSubmenu: string, value: string): string => {\n return value.includes(config.modifiedValue)\n ? value.replace(config.modifiedValue, valueFromSubmenu)\n : valueFromSubmenu;\n};\n\nconst isDynamicValueToSet = async (value: string | number | boolean): Promise<string | number | boolean> => {\n if (typeof value === 'string' && value.includes(config.dynamicValue.start)) {\n const { substring, substringExcludeSearch: id } = decomposeText(\n value,\n config.dynamicValue.start,\n config.dynamicValue.end,\n );\n\n const newValue = await adapter.getForeignStateAsync(id);\n\n return value.replace(substring, String(newValue?.val));\n }\n return value;\n};\n\nexport const setstateIobroker = async ({\n id,\n value,\n ack,\n}: {\n id: string;\n value: string | number | boolean;\n ack: boolean;\n}): Promise<void> => {\n try {\n const val = await transformValueToTypeOfId(id, value);\n\n adapter.log.debug(`Value to Set: ${jsonString(val)}`);\n if (isDefined(val)) {\n await adapter.setForeignStateAsync(id, val, ack);\n }\n } catch (error: any) {\n errorLogger('Error Setstate', error, adapter);\n }\n};\n\nconst setValue = async (\n id: string,\n value: string,\n valueFromSubmenu: string | number | boolean,\n ack: boolean,\n): Promise<void> => {\n try {\n // If Value is set in Config the value will set to datapoint otherwise the value from submenu, so submenuValuePriority is obsolete\n const valueToSet =\n isDefined(value) && isNonEmptyString(value)\n ? await isDynamicValueToSet(value)\n : modifiedValue(String(valueFromSubmenu), value);\n\n await setstateIobroker({ id, value: valueToSet, ack });\n } catch (error: any) {\n errorLogger('Error setValue', error, adapter);\n }\n};\n\nexport const handleSetState = async (\n part: Part,\n userToSend: string,\n valueFromSubmenu: string | number | boolean,\n telegramParams: TelegramParams,\n): Promise<void> => {\n try {\n if (!part.switch) {\n return;\n }\n for (const { returnText: text, id: ID, parse_mode, confirm, ack, toggle, value } of part.switch) {\n let returnText = text;\n if (returnText.includes(config.setDynamicValue)) {\n const { confirmText, id } = await setDynamicValue(\n returnText,\n ack,\n ID,\n userToSend,\n telegramParams,\n parse_mode,\n confirm,\n );\n\n if (confirm) {\n await addSetStateIds({\n id: id ?? ID,\n confirm,\n returnText: confirmText,\n userToSend,\n });\n }\n return;\n }\n\n if (!returnText.includes(\"{'id':'\")) {\n await addSetStateIds({\n id: ID,\n confirm,\n returnText,\n userToSend,\n parse_mode,\n });\n } else {\n returnText = returnText.replace(/'/g, '\"');\n const { substring } = decomposeText(returnText, '{\"id\":', '}');\n const { json, isValidJson } = parseJSON<{ text: string; id: string }>(substring);\n if (!isValidJson) {\n return;\n }\n const text = returnText.replace(substring, json.text);\n const { textToSend } = exchangeValue(adapter, text, valueFromSubmenu);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n telegramParams,\n parse_mode,\n });\n\n await addSetStateIds({\n id: json.id,\n confirm: true,\n returnText: json.text,\n userToSend: userToSend,\n });\n }\n if (toggle) {\n const state = await adapter.getForeignStateAsync(ID);\n\n state\n ? await setstateIobroker({ id: ID, value: !state.val, ack })\n : await setstateIobroker({ id: ID, value: false, ack });\n } else {\n await setValue(ID, value, valueFromSubmenu, ack);\n }\n }\n } catch (error: any) {\n errorLogger('Error Switch', error, adapter);\n }\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["text"]
7
7
  }
@@ -71,7 +71,9 @@ const checkStatus = async (text) => {
71
71
  return (0, import_time.integrateTimeIntoText)(textExcludeSubstring, stateValueString).replace(stateValueString, "");
72
72
  }
73
73
  if (!shouldChangeByStatusParameter) {
74
- return text.replace(substring, stateValueString);
74
+ const modifiedText = text.replace(substring, "&&");
75
+ const { textToSend: textToSend2, error: error2 } = (0, import_exchangeValue.exchangeValue)(import_main.adapter, modifiedText, stateValue.val);
76
+ return !error2 ? textToSend2 : modifiedText;
75
77
  }
76
78
  const { textToSend, error } = (0, import_exchangeValue.exchangeValue)(import_main.adapter, textExcludeSubstring, stateValue.val);
77
79
  return !error ? textToSend : textExcludeSubstring;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/utilities.ts"],
4
- "sourcesContent": ["import { isDefined } from './utils';\nimport { decomposeText, isEmptyString, jsonString, replaceAllItems } from './string';\nimport { errorLogger } from '../app/logging';\nimport { extractTimeValues, getTimeWithPad, integrateTimeIntoText } from './time';\nimport { adapter } from '../main';\nimport { config } from '../config/config';\nimport { isSameType, statusIdAndParams, timeStringReplacer } from './appUtils';\nimport { setstateIobroker } from '../app/setstate';\nimport { getProcessTimeValues } from './splitValues';\nimport { exchangeValue } from './exchangeValue';\n\nexport const processTimeIdLc = async (textToSend: string, id?: string): Promise<string> => {\n const { substring, substringExcludeSearch } = decomposeText(\n textToSend,\n config.timestamp.start,\n config.timestamp.end,\n ); //{time.lc,(DD MM YYYY hh:mm:ss:sss),id:'ID'}\n const { typeofTimestamp, timeString, idString } = getProcessTimeValues(substringExcludeSearch);\n\n if (!id && (!idString || idString.length < 5)) {\n return textToSend.replace(substring, 'Invalid ID');\n }\n const value = await adapter.getForeignStateAsync(id ?? idString);\n\n if (!value) {\n return textToSend.replace(substring, 'Invalid ID');\n }\n const timeStringUser = replaceAllItems(timeString, [',(', ')', '}']); //\"(DD MM YYYY hh:mm:ss:sss)\"\n const unixTs = value[typeofTimestamp];\n\n const timeWithPad = getTimeWithPad(extractTimeValues(unixTs));\n const timeStringReplaced = timeStringReplacer(timeWithPad, timeStringUser);\n\n return timeStringReplaced ?? textToSend;\n};\n\nexport const checkStatus = async (text: string): Promise<string> => {\n const { substring, substringExcludeSearch, textExcludeSubstring } = decomposeText(\n text,\n config.status.start,\n config.status.end,\n ); //substring {status:'ID':true} new | old {status:'id':'ID':true}\n\n const { id, shouldChangeByStatusParameter } = statusIdAndParams(substringExcludeSearch);\n\n const stateValue = await adapter.getForeignStateAsync(id);\n\n if (!isDefined(stateValue?.val)) {\n adapter.log.debug(`State not found for id : \"${id}\"`);\n return text.replace(substring, '');\n }\n\n const stateValueString = String(stateValue.val);\n\n if (text.includes(config.time)) {\n return integrateTimeIntoText(textExcludeSubstring, stateValueString).replace(stateValueString, '');\n }\n\n if (!shouldChangeByStatusParameter) {\n return text.replace(substring, stateValueString);\n }\n\n const { textToSend, error } = exchangeValue(adapter, textExcludeSubstring, stateValue.val);\n\n return !error ? textToSend : textExcludeSubstring;\n};\n\nexport const returnTextModifier = async (text?: string): Promise<string> => {\n if (!text) {\n return '';\n }\n try {\n const inputText = text;\n\n if (text.includes(config.status.start)) {\n while (text.includes(config.status.start)) {\n text = await checkStatus(text);\n }\n }\n if (text.includes(config.timestamp.lc) || text.includes(config.timestamp.ts)) {\n text = await processTimeIdLc(text);\n }\n if (text.includes(config.set.start)) {\n const { substring, textExcludeSubstring } = decomposeText(text, config.set.start, config.set.end);\n const id = substring.split(',')[0].replace(\"{set:'id':\", '').replace(/'/g, '');\n const importedValue = substring.split(',')[1];\n\n text = textExcludeSubstring;\n const convertedValue = await transformValueToTypeOfId(id, importedValue);\n\n const ack = substring.split(',')[2].replace('}', '') == 'true';\n\n if (isEmptyString(text)) {\n text = 'W\u00E4hle eine Aktion';\n }\n if (convertedValue) {\n await setstateIobroker({ id, value: convertedValue, ack });\n }\n }\n\n text === inputText\n ? adapter.log.debug(`Return text : ${text} `)\n : adapter.log.debug(`Return text was modified from \"${inputText}\" to \"${text}\" `);\n return text;\n } catch (e: any) {\n errorLogger('Error returnTextModifier:', e, adapter);\n return '';\n }\n};\n\nexport async function transformValueToTypeOfId(\n id: string,\n value: ioBroker.StateValue,\n): Promise<ioBroker.StateValue | undefined> {\n try {\n const receivedType = typeof value;\n const obj = await adapter.getForeignObjectAsync(id);\n\n if (!obj || !isDefined(value) || isSameType(receivedType, obj)) {\n return value;\n }\n\n adapter.log.debug(`Change Value type from \"${receivedType}\" to \"${obj.common.type}\"`);\n\n switch (obj.common.type) {\n case 'string':\n return String(value);\n case 'number':\n return typeof value === 'string' ? parseFloat(value) : parseFloat(jsonString(value));\n case 'boolean':\n return isDefined(value) && !['false', false, 0, '0', 'null', 'undefined'].includes(value);\n default:\n return value;\n }\n } catch (e: any) {\n errorLogger('Error checkTypeOfId:', e, adapter);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import { isDefined } from './utils';\nimport { decomposeText, isEmptyString, jsonString, replaceAllItems } from './string';\nimport { errorLogger } from '../app/logging';\nimport { extractTimeValues, getTimeWithPad, integrateTimeIntoText } from './time';\nimport { adapter } from '../main';\nimport { config } from '../config/config';\nimport { isSameType, statusIdAndParams, timeStringReplacer } from './appUtils';\nimport { setstateIobroker } from '../app/setstate';\nimport { getProcessTimeValues } from './splitValues';\nimport { exchangeValue } from './exchangeValue';\n\nexport const processTimeIdLc = async (textToSend: string, id?: string): Promise<string> => {\n const { substring, substringExcludeSearch } = decomposeText(\n textToSend,\n config.timestamp.start,\n config.timestamp.end,\n ); //{time.lc,(DD MM YYYY hh:mm:ss:sss),id:'ID'}\n const { typeofTimestamp, timeString, idString } = getProcessTimeValues(substringExcludeSearch);\n\n if (!id && (!idString || idString.length < 5)) {\n return textToSend.replace(substring, 'Invalid ID');\n }\n const value = await adapter.getForeignStateAsync(id ?? idString);\n\n if (!value) {\n return textToSend.replace(substring, 'Invalid ID');\n }\n const timeStringUser = replaceAllItems(timeString, [',(', ')', '}']); //\"(DD MM YYYY hh:mm:ss:sss)\"\n const unixTs = value[typeofTimestamp];\n\n const timeWithPad = getTimeWithPad(extractTimeValues(unixTs));\n const timeStringReplaced = timeStringReplacer(timeWithPad, timeStringUser);\n\n return timeStringReplaced ?? textToSend;\n};\n\nexport const checkStatus = async (text: string): Promise<string> => {\n const { substring, substringExcludeSearch, textExcludeSubstring } = decomposeText(\n text,\n config.status.start,\n config.status.end,\n ); //substring {status:'ID':true} new | old {status:'id':'ID':true}\n\n const { id, shouldChangeByStatusParameter } = statusIdAndParams(substringExcludeSearch);\n\n const stateValue = await adapter.getForeignStateAsync(id);\n\n if (!isDefined(stateValue?.val)) {\n adapter.log.debug(`State not found for id : \"${id}\"`);\n return text.replace(substring, '');\n }\n\n const stateValueString = String(stateValue.val);\n\n if (text.includes(config.time)) {\n return integrateTimeIntoText(textExcludeSubstring, stateValueString).replace(stateValueString, '');\n }\n\n if (!shouldChangeByStatusParameter) {\n const modifiedText = text.replace(substring, '&&');\n const { textToSend, error } = exchangeValue(adapter, modifiedText, stateValue.val);\n return !error ? textToSend : modifiedText;\n }\n\n const { textToSend, error } = exchangeValue(adapter, textExcludeSubstring, stateValue.val);\n\n return !error ? textToSend : textExcludeSubstring;\n};\n\nexport const returnTextModifier = async (text?: string): Promise<string> => {\n if (!text) {\n return '';\n }\n try {\n const inputText = text;\n\n if (text.includes(config.status.start)) {\n while (text.includes(config.status.start)) {\n text = await checkStatus(text);\n }\n }\n if (text.includes(config.timestamp.lc) || text.includes(config.timestamp.ts)) {\n text = await processTimeIdLc(text);\n }\n if (text.includes(config.set.start)) {\n const { substring, textExcludeSubstring } = decomposeText(text, config.set.start, config.set.end);\n const id = substring.split(',')[0].replace(\"{set:'id':\", '').replace(/'/g, '');\n const importedValue = substring.split(',')[1];\n\n text = textExcludeSubstring;\n const convertedValue = await transformValueToTypeOfId(id, importedValue);\n\n const ack = substring.split(',')[2].replace('}', '') == 'true';\n\n if (isEmptyString(text)) {\n text = 'W\u00E4hle eine Aktion';\n }\n if (convertedValue) {\n await setstateIobroker({ id, value: convertedValue, ack });\n }\n }\n\n text === inputText\n ? adapter.log.debug(`Return text : ${text} `)\n : adapter.log.debug(`Return text was modified from \"${inputText}\" to \"${text}\" `);\n return text;\n } catch (e: any) {\n errorLogger('Error returnTextModifier:', e, adapter);\n return '';\n }\n};\n\nexport async function transformValueToTypeOfId(\n id: string,\n value: ioBroker.StateValue,\n): Promise<ioBroker.StateValue | undefined> {\n try {\n const receivedType = typeof value;\n const obj = await adapter.getForeignObjectAsync(id);\n\n if (!obj || !isDefined(value) || isSameType(receivedType, obj)) {\n return value;\n }\n\n adapter.log.debug(`Change Value type from \"${receivedType}\" to \"${obj.common.type}\"`);\n\n switch (obj.common.type) {\n case 'string':\n return String(value);\n case 'number':\n return typeof value === 'string' ? parseFloat(value) : parseFloat(jsonString(value));\n case 'boolean':\n return isDefined(value) && !['false', false, 0, '0', 'null', 'undefined'].includes(value);\n default:\n return value;\n }\n } catch (e: any) {\n errorLogger('Error checkTypeOfId:', e, adapter);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["textToSend", "error"]
7
7
  }
package/build/main.js CHANGED
@@ -136,6 +136,7 @@ class TelegramMenu extends utils.Adapter {
136
136
  telegramParams
137
137
  );
138
138
  }
139
+ let menus = [];
139
140
  this.on("stateChange", async (id, state) => {
140
141
  var _a2, _b2;
141
142
  const setStateIdsToListenTo = (0, import_setStateIdsToListenTo.getStateIdsToListenTo)();
@@ -166,10 +167,10 @@ class TelegramMenu extends utils.Adapter {
166
167
  } else if (this.isMenuToSend(state, id, telegramID, userToSend)) {
167
168
  const value = state.val.toString();
168
169
  const calledValue = value.slice(value.indexOf("]") + 1, value.length);
169
- const menus = (0, import_appUtils.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
170
+ menus = (0, import_appUtils.getListOfMenusIncludingUser)(menusWithUsers, userToSend);
170
171
  const dataFound = await (0, import_processData.checkEveryMenuForData)({
171
172
  menuData,
172
- calledValue,
173
+ navToGoTo: calledValue,
173
174
  userToSend,
174
175
  telegramParams,
175
176
  menus,
@@ -220,8 +221,21 @@ class TelegramMenu extends utils.Adapter {
220
221
  if (!(0, import_utils.isFalsy)(confirm) && (state == null ? void 0 : state.ack)) {
221
222
  let textToSend = returnText;
222
223
  if (textToSend.includes("{confirmSet:")) {
223
- const { textExcludeSubstring } = (0, import_string.decomposeText)(textToSend, "{confirmSet:", "}");
224
- textToSend = textExcludeSubstring;
224
+ textToSend = (0, import_string.decomposeText)(
225
+ textToSend,
226
+ "{confirmSet:",
227
+ "}"
228
+ ).textExcludeSubstring;
229
+ }
230
+ if (textToSend.includes("{setDynamicValue")) {
231
+ const { textExcludeSubstring, substringExcludeSearch } = (0, import_string.decomposeText)(
232
+ textToSend,
233
+ "{setDynamicValue:",
234
+ "}"
235
+ );
236
+ const splitSubstring = substringExcludeSearch.split(":");
237
+ const confirmText = splitSubstring[2];
238
+ textToSend = `${textExcludeSubstring} ${confirmText}`;
225
239
  }
226
240
  const {
227
241
  textToSend: changedText,
package/build/main.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/main.ts"],
4
- "sourcesContent": ["'use strict';\n/*\n * Created with @iobroker/create-adapter v2.3.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core';\n\nimport { checkEvent, generateActions, getUserToSendFromUserListWithChatID } from './app/action.js';\nimport { _subscribeForeignStates } from './app/subscribeStates.js';\nimport { sendToTelegram } from './app/telegram.js';\nimport { createState } from './app/createState.js';\nimport { saveMessageIds } from './app/messageIds.js';\nimport { adapterStartMenuSend } from './app/adapterStartMenuSend.js';\nimport { checkEveryMenuForData, getTimeouts } from './app/processData.js';\nimport { deleteMessageAndSendNewShoppingList, shoppingListSubscribeStateAndDeleteItem } from './app/shoppingList.js';\nimport { errorLogger } from './app/logging.js';\nimport type { MenuData, SetStateIds, TelegramParams } from './types/types';\nimport { checkIsTelegramActive } from './app/connection.js';\nimport { decomposeText, isString, jsonString } from './lib/string';\nimport { isDefined, isFalsy, isTruthy } from './lib/utils';\nimport { getListOfMenusIncludingUser, getNewStructure, getStartSides, splitNavigation } from './lib/appUtils';\nimport { getConfigVariables } from './app/configVariables';\nimport { getStateIdsToListenTo } from './app/setStateIdsToListenTo';\nimport { exchangePlaceholderWithValue, exchangeValue } from './lib/exchangeValue';\n\nconst timeoutKey = '0';\nexport let adapter: TelegramMenu;\n\nexport default class TelegramMenu extends utils.Adapter {\n private static instance: TelegramMenu;\n\n /**\n * @param [options] - Adapter options\n */\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'telegram-menu',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n TelegramMenu.instance = this;\n }\n\n private async onReady(): Promise<void> {\n adapter = this;\n await this.setState('info.connection', false, true);\n await createState(this);\n\n const {\n requestMessageID,\n directoryPicture,\n telegramParams,\n telegramID,\n menusWithUsers,\n infoConnectionOfTelegram,\n listOfMenus,\n isUserActiveCheckbox,\n checkboxNoEntryFound,\n textNoEntryFound,\n botSendMessageID,\n sendMenuAfterRestart,\n token,\n dataObject,\n checkboxes,\n } = getConfigVariables(this.config);\n const { telegramInstance } = telegramParams;\n\n const menuData: MenuData = {};\n const startSides = getStartSides(menusWithUsers, dataObject);\n try {\n await this.getForeignObject(infoConnectionOfTelegram, async (err, obj) => {\n if (err || !obj) {\n this.log.error(`The State ${infoConnectionOfTelegram} was not found! ${err}`);\n return;\n }\n\n if (!(await checkIsTelegramActive(infoConnectionOfTelegram))) {\n return;\n }\n\n const { nav, action } = dataObject;\n\n this.log.info('Telegram was found');\n\n for (const name in nav) {\n const splittedNavigation = splitNavigation(nav[name]);\n const newStructure = getNewStructure(splittedNavigation);\n const generatedActions = generateActions({ action: action?.[name], userObject: newStructure });\n\n menuData[name] = newStructure;\n if (generatedActions) {\n menuData[name] = generatedActions?.obj;\n const subscribeForeignStateIds = generatedActions?.ids;\n if (subscribeForeignStateIds?.length) {\n await _subscribeForeignStates(subscribeForeignStateIds);\n }\n } else {\n adapter.log.debug('No Actions generated!');\n }\n\n // Subscribe Events\n if (dataObject.action?.[name]?.events) {\n for (const event of dataObject.action[name].events) {\n await _subscribeForeignStates(event.ID);\n }\n }\n adapter.log.debug(`Menu: ${name}`);\n adapter.log.debug(`Array Buttons: ${jsonString(splittedNavigation)}`);\n adapter.log.debug(`Gen. Actions: ${jsonString(menuData[name])}`);\n }\n\n adapter.log.debug(`Checkbox: ${jsonString(checkboxes)}`);\n adapter.log.debug(`MenuList: ${jsonString(listOfMenus)}`);\n\n if (sendMenuAfterRestart) {\n await adapterStartMenuSend(\n listOfMenus,\n startSides,\n isUserActiveCheckbox,\n menusWithUsers,\n menuData,\n telegramParams,\n );\n }\n\n this.on('stateChange', async (id, state) => {\n const setStateIdsToListenTo: SetStateIds[] = getStateIdsToListenTo();\n\n const isTelegramInstanceActive = await this.checkInfoConnection(id, infoConnectionOfTelegram);\n if (!isTelegramInstanceActive) {\n return;\n }\n\n const { userToSend, error } = await this.getChatIDAndUserToSend(telegramParams);\n if (error) {\n return;\n }\n\n if (this.isAddToShoppingList(id, userToSend)) {\n await deleteMessageAndSendNewShoppingList(telegramParams, userToSend);\n return;\n }\n\n if (!state || !isDefined(state.val)) {\n return;\n }\n\n if (isString(state.val) && state.val.includes('sList:')) {\n await shoppingListSubscribeStateAndDeleteItem(state.val, telegramParams);\n return;\n }\n\n if (await checkEvent(dataObject, id, state, menuData, telegramParams, menusWithUsers)) {\n return;\n }\n\n if (this.isMessageID(id, botSendMessageID, requestMessageID)) {\n await saveMessageIds(state, telegramInstance);\n } else if (this.isMenuToSend(state, id, telegramID, userToSend)) {\n const value = state.val.toString();\n\n const calledValue = value.slice(value.indexOf(']') + 1, value.length);\n const menus = getListOfMenusIncludingUser(menusWithUsers, userToSend);\n\n const dataFound = await checkEveryMenuForData({\n menuData,\n calledValue,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n\n this.log.debug(`Groups with searched User: ${jsonString(menus)}`);\n\n if (!dataFound && checkboxNoEntryFound) {\n adapter.log.debug('No Entry found');\n await sendToTelegram({\n userToSend,\n textToSend: textNoEntryFound,\n telegramParams,\n });\n }\n return;\n }\n if (state && setStateIdsToListenTo?.find(element => element.id == id)) {\n adapter.log.debug(`Subscribed state changed: { id : ${id} , state : ${jsonString(state)} }`);\n\n for (const el of setStateIdsToListenTo) {\n const { id: elId, userToSend, confirm, returnText, parse_mode } = el;\n const key: number = setStateIdsToListenTo.indexOf(el);\n\n if (elId == id) {\n adapter.log.debug(`Send Value: ${jsonString(el)}`);\n adapter.log.debug(`State: ${jsonString(state)}`);\n\n if (isTruthy(confirm) && !state?.ack && returnText.includes('{confirmSet:')) {\n const { substring } = decomposeText(returnText, '{confirmSet:', '}');\n const splitSubstring = substring.split(':');\n\n let text = '';\n if (isDefined(state.val)) {\n text = splitSubstring[2]?.includes('noValue')\n ? splitSubstring[1]\n : exchangePlaceholderWithValue(splitSubstring[1], state.val.toString());\n }\n adapter.log.debug(`Return-text: ${text}`);\n\n if (text === '') {\n adapter.log.error('The return text cannot be empty, please check.');\n }\n\n await sendToTelegram({\n textToSend: text,\n parse_mode: parse_mode,\n userToSend,\n telegramParams,\n });\n continue;\n }\n adapter.log.debug(`Data: ${jsonString({ confirm, ack: state?.ack, val: state?.val })}`);\n\n if (!isFalsy(confirm) && state?.ack) {\n let textToSend = returnText;\n\n if (textToSend.includes('{confirmSet:')) {\n const { textExcludeSubstring } = decomposeText(textToSend, '{confirmSet:', '}');\n textToSend = textExcludeSubstring;\n }\n\n const {\n textToSend: changedText,\n error,\n newValue,\n } = exchangeValue(adapter, textToSend, state.val?.toString());\n\n if (!error) {\n textToSend = changedText;\n }\n\n adapter.log.debug(`Value to send: ${newValue}`);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n parse_mode: parse_mode,\n telegramParams,\n });\n\n setStateIdsToListenTo.splice(key, 1);\n }\n }\n }\n }\n });\n });\n } catch (e: any) {\n errorLogger('Error onReady', e, adapter);\n }\n\n await this.subscribeForeignStatesAsync(botSendMessageID);\n await this.subscribeForeignStatesAsync(requestMessageID);\n await this.subscribeForeignStatesAsync(`${telegramInstance}.communicate.requestChatId`);\n await this.subscribeForeignStatesAsync(telegramID);\n await this.subscribeForeignStatesAsync(`${telegramInstance}.info.connection`);\n }\n\n private isMessageID(id: string, botSendMessageID: string, requestMessageID: string): boolean {\n return id == botSendMessageID || id == requestMessageID;\n }\n\n private isAddToShoppingList(id: string, userToSend: string): boolean {\n return !!(id.includes('alexa-shoppinglist') && !id.includes('add_position') && userToSend);\n }\n\n private isMenuToSend(\n state: ioBroker.State | null | undefined,\n id: string,\n telegramID: string,\n userToSend: string | null,\n ): boolean {\n return !!(typeof state?.val === 'string' && state.val != '' && id == telegramID && state?.ack && userToSend);\n }\n\n private async checkInfoConnection(id: string, infoConnectionOfTelegram: string): Promise<boolean> {\n if (id === infoConnectionOfTelegram) {\n if (!(await checkIsTelegramActive(infoConnectionOfTelegram))) {\n this.log.debug('Telegram is not active');\n return false;\n }\n return true;\n }\n return true;\n }\n\n private async getChatIDAndUserToSend(\n telegramParams: TelegramParams,\n ): Promise<{ chatID: string; userToSend: string; error: boolean; errorMessage?: string }> {\n const { telegramInstance, userListWithChatID } = telegramParams;\n const chatIDState = await this.getForeignStateAsync(`${telegramInstance}.communicate.requestChatId`);\n\n if (!chatIDState?.val) {\n adapter.log.debug('ChatID not found');\n return { chatID: '', userToSend: '', error: true, errorMessage: 'ChatId not found' };\n }\n\n const userToSend = getUserToSendFromUserListWithChatID(userListWithChatID, chatIDState.val.toString());\n if (!userToSend) {\n this.log.debug('User to send not found');\n return { chatID: chatIDState.val.toString(), userToSend: '', error: true, errorMessage: 'User not found' };\n }\n return { chatID: chatIDState.val.toString(), userToSend, error: false };\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n *\n * @param callback - Is called when adapter has closed all connections and released all resources\n */\n private onUnload(callback: () => void): void {\n const timeouts = getTimeouts();\n try {\n // Here you must clear all timeouts or intervals that may still be active\n timeouts.forEach(({ timeout }) => {\n adapter.clearTimeout(timeout);\n });\n\n callback();\n } catch (e: any) {\n errorLogger(e, 'Error onUnload', adapter);\n callback();\n }\n }\n\n onMessage(obj: ioBroker.Message): void {\n if (typeof obj === 'object' && obj.message) {\n if (obj.command === 'send') {\n // e.g. send email or pushover or whatever\n this.log.info('send command');\n // Send response in callback if required\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, 'Message received', obj.callback);\n }\n }\n }\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n /**\n * @param [options] - Adapter options\n */\n module.exports = (options: Partial<utils.AdapterOptions<undefined, undefined>> | undefined): TelegramMenu =>\n new TelegramMenu(options);\n} else {\n // otherwise start the instance directly\n (() => new TelegramMenu())();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["'use strict';\n/*\n * Created with @iobroker/create-adapter v2.3.0\n */\n\n// The adapter-core module gives you access to the core ioBroker functions\n// you need to create an adapter\nimport * as utils from '@iobroker/adapter-core';\n\nimport { checkEvent, generateActions, getUserToSendFromUserListWithChatID } from './app/action.js';\nimport { _subscribeForeignStates } from './app/subscribeStates.js';\nimport { sendToTelegram } from './app/telegram.js';\nimport { createState } from './app/createState.js';\nimport { saveMessageIds } from './app/messageIds.js';\nimport { adapterStartMenuSend } from './app/adapterStartMenuSend.js';\nimport { checkEveryMenuForData, getTimeouts } from './app/processData.js';\nimport { deleteMessageAndSendNewShoppingList, shoppingListSubscribeStateAndDeleteItem } from './app/shoppingList.js';\nimport { errorLogger } from './app/logging.js';\nimport type { MenuData, SetStateIds, TelegramParams } from './types/types';\nimport { checkIsTelegramActive } from './app/connection.js';\nimport { decomposeText, isString, jsonString } from './lib/string';\nimport { isDefined, isFalsy, isTruthy } from './lib/utils';\nimport { getListOfMenusIncludingUser, getNewStructure, getStartSides, splitNavigation } from './lib/appUtils';\nimport { getConfigVariables } from './app/configVariables';\nimport { getStateIdsToListenTo } from './app/setStateIdsToListenTo';\nimport { exchangePlaceholderWithValue, exchangeValue } from './lib/exchangeValue';\n\nconst timeoutKey = '0';\nexport let adapter: TelegramMenu;\n\nexport default class TelegramMenu extends utils.Adapter {\n private static instance: TelegramMenu;\n\n /**\n * @param [options] - Adapter options\n */\n public constructor(options: Partial<utils.AdapterOptions> = {}) {\n super({\n ...options,\n name: 'telegram-menu',\n });\n this.on('ready', this.onReady.bind(this));\n this.on('unload', this.onUnload.bind(this));\n TelegramMenu.instance = this;\n }\n\n private async onReady(): Promise<void> {\n adapter = this;\n await this.setState('info.connection', false, true);\n await createState(this);\n\n const {\n requestMessageID,\n directoryPicture,\n telegramParams,\n telegramID,\n menusWithUsers,\n infoConnectionOfTelegram,\n listOfMenus,\n isUserActiveCheckbox,\n checkboxNoEntryFound,\n textNoEntryFound,\n botSendMessageID,\n sendMenuAfterRestart,\n token,\n dataObject,\n checkboxes,\n } = getConfigVariables(this.config);\n const { telegramInstance } = telegramParams;\n\n const menuData: MenuData = {};\n const startSides = getStartSides(menusWithUsers, dataObject);\n try {\n await this.getForeignObject(infoConnectionOfTelegram, async (err, obj) => {\n if (err || !obj) {\n this.log.error(`The State ${infoConnectionOfTelegram} was not found! ${err}`);\n return;\n }\n\n if (!(await checkIsTelegramActive(infoConnectionOfTelegram))) {\n return;\n }\n\n const { nav, action } = dataObject;\n\n this.log.info('Telegram was found');\n\n for (const name in nav) {\n const splittedNavigation = splitNavigation(nav[name]);\n const newStructure = getNewStructure(splittedNavigation);\n const generatedActions = generateActions({ action: action?.[name], userObject: newStructure });\n\n menuData[name] = newStructure;\n if (generatedActions) {\n menuData[name] = generatedActions?.obj;\n const subscribeForeignStateIds = generatedActions?.ids;\n if (subscribeForeignStateIds?.length) {\n await _subscribeForeignStates(subscribeForeignStateIds);\n }\n } else {\n adapter.log.debug('No Actions generated!');\n }\n\n // Subscribe Events\n if (dataObject.action?.[name]?.events) {\n for (const event of dataObject.action[name].events) {\n await _subscribeForeignStates(event.ID);\n }\n }\n adapter.log.debug(`Menu: ${name}`);\n adapter.log.debug(`Array Buttons: ${jsonString(splittedNavigation)}`);\n adapter.log.debug(`Gen. Actions: ${jsonString(menuData[name])}`);\n }\n\n adapter.log.debug(`Checkbox: ${jsonString(checkboxes)}`);\n adapter.log.debug(`MenuList: ${jsonString(listOfMenus)}`);\n\n if (sendMenuAfterRestart) {\n await adapterStartMenuSend(\n listOfMenus,\n startSides,\n isUserActiveCheckbox,\n menusWithUsers,\n menuData,\n telegramParams,\n );\n }\n let menus: string[] = [];\n this.on('stateChange', async (id, state) => {\n const setStateIdsToListenTo: SetStateIds[] = getStateIdsToListenTo();\n\n const isTelegramInstanceActive = await this.checkInfoConnection(id, infoConnectionOfTelegram);\n if (!isTelegramInstanceActive) {\n return;\n }\n\n const { userToSend, error } = await this.getChatIDAndUserToSend(telegramParams);\n if (error) {\n return;\n }\n\n if (this.isAddToShoppingList(id, userToSend)) {\n await deleteMessageAndSendNewShoppingList(telegramParams, userToSend);\n return;\n }\n\n if (!state || !isDefined(state.val)) {\n return;\n }\n\n if (isString(state.val) && state.val.includes('sList:')) {\n await shoppingListSubscribeStateAndDeleteItem(state.val, telegramParams);\n return;\n }\n\n if (await checkEvent(dataObject, id, state, menuData, telegramParams, menusWithUsers)) {\n return;\n }\n\n if (this.isMessageID(id, botSendMessageID, requestMessageID)) {\n await saveMessageIds(state, telegramInstance);\n } else if (this.isMenuToSend(state, id, telegramID, userToSend)) {\n const value = state.val.toString();\n\n const calledValue = value.slice(value.indexOf(']') + 1, value.length);\n menus = getListOfMenusIncludingUser(menusWithUsers, userToSend);\n\n const dataFound = await checkEveryMenuForData({\n menuData,\n navToGoTo: calledValue,\n userToSend,\n telegramParams,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n\n this.log.debug(`Groups with searched User: ${jsonString(menus)}`);\n\n if (!dataFound && checkboxNoEntryFound) {\n adapter.log.debug('No Entry found');\n await sendToTelegram({\n userToSend,\n textToSend: textNoEntryFound,\n telegramParams,\n });\n }\n return;\n }\n if (state && setStateIdsToListenTo?.find(element => element.id == id)) {\n adapter.log.debug(`Subscribed state changed: { id : ${id} , state : ${jsonString(state)} }`);\n\n for (const el of setStateIdsToListenTo) {\n const { id: elId, userToSend, confirm, returnText, parse_mode } = el;\n const key: number = setStateIdsToListenTo.indexOf(el);\n\n if (elId == id) {\n adapter.log.debug(`Send Value: ${jsonString(el)}`);\n adapter.log.debug(`State: ${jsonString(state)}`);\n\n if (isTruthy(confirm) && !state?.ack && returnText.includes('{confirmSet:')) {\n const { substring } = decomposeText(returnText, '{confirmSet:', '}');\n const splitSubstring = substring.split(':');\n\n let text = '';\n if (isDefined(state.val)) {\n text = splitSubstring[2]?.includes('noValue')\n ? splitSubstring[1]\n : exchangePlaceholderWithValue(splitSubstring[1], state.val.toString());\n }\n adapter.log.debug(`Return-text: ${text}`);\n\n if (text === '') {\n adapter.log.error('The return text cannot be empty, please check.');\n }\n\n await sendToTelegram({\n textToSend: text,\n parse_mode: parse_mode,\n userToSend,\n telegramParams,\n });\n continue;\n }\n adapter.log.debug(`Data: ${jsonString({ confirm, ack: state?.ack, val: state?.val })}`);\n\n if (!isFalsy(confirm) && state?.ack) {\n let textToSend = returnText;\n\n if (textToSend.includes('{confirmSet:')) {\n textToSend = decomposeText(\n textToSend,\n '{confirmSet:',\n '}',\n ).textExcludeSubstring;\n }\n\n if (textToSend.includes('{setDynamicValue')) {\n const { textExcludeSubstring, substringExcludeSearch } = decomposeText(\n textToSend,\n '{setDynamicValue:',\n '}',\n );\n const splitSubstring = substringExcludeSearch.split(':');\n const confirmText = splitSubstring[2];\n textToSend = `${textExcludeSubstring} ${confirmText}`;\n }\n\n const {\n textToSend: changedText,\n error,\n newValue,\n } = exchangeValue(adapter, textToSend, state.val?.toString());\n\n if (!error) {\n textToSend = changedText;\n }\n\n adapter.log.debug(`Value to send: ${newValue}`);\n\n await sendToTelegram({\n userToSend,\n textToSend,\n parse_mode,\n telegramParams,\n });\n setStateIdsToListenTo.splice(key, 1);\n }\n }\n }\n }\n });\n });\n } catch (e: any) {\n errorLogger('Error onReady', e, adapter);\n }\n\n await this.subscribeForeignStatesAsync(botSendMessageID);\n await this.subscribeForeignStatesAsync(requestMessageID);\n await this.subscribeForeignStatesAsync(`${telegramInstance}.communicate.requestChatId`);\n await this.subscribeForeignStatesAsync(telegramID);\n await this.subscribeForeignStatesAsync(`${telegramInstance}.info.connection`);\n }\n\n private isMessageID(id: string, botSendMessageID: string, requestMessageID: string): boolean {\n return id == botSendMessageID || id == requestMessageID;\n }\n\n private isAddToShoppingList(id: string, userToSend: string): boolean {\n return !!(id.includes('alexa-shoppinglist') && !id.includes('add_position') && userToSend);\n }\n\n private isMenuToSend(\n state: ioBroker.State | null | undefined,\n id: string,\n telegramID: string,\n userToSend: string | null,\n ): boolean {\n return !!(typeof state?.val === 'string' && state.val != '' && id == telegramID && state?.ack && userToSend);\n }\n\n private async checkInfoConnection(id: string, infoConnectionOfTelegram: string): Promise<boolean> {\n if (id === infoConnectionOfTelegram) {\n if (!(await checkIsTelegramActive(infoConnectionOfTelegram))) {\n this.log.debug('Telegram is not active');\n return false;\n }\n return true;\n }\n return true;\n }\n\n private async getChatIDAndUserToSend(\n telegramParams: TelegramParams,\n ): Promise<{ chatID: string; userToSend: string; error: boolean; errorMessage?: string }> {\n const { telegramInstance, userListWithChatID } = telegramParams;\n const chatIDState = await this.getForeignStateAsync(`${telegramInstance}.communicate.requestChatId`);\n\n if (!chatIDState?.val) {\n adapter.log.debug('ChatID not found');\n return { chatID: '', userToSend: '', error: true, errorMessage: 'ChatId not found' };\n }\n\n const userToSend = getUserToSendFromUserListWithChatID(userListWithChatID, chatIDState.val.toString());\n if (!userToSend) {\n this.log.debug('User to send not found');\n return { chatID: chatIDState.val.toString(), userToSend: '', error: true, errorMessage: 'User not found' };\n }\n return { chatID: chatIDState.val.toString(), userToSend, error: false };\n }\n\n /**\n * Is called when adapter shuts down - callback has to be called under any circumstances!\n *\n * @param callback - Is called when adapter has closed all connections and released all resources\n */\n private onUnload(callback: () => void): void {\n const timeouts = getTimeouts();\n try {\n // Here you must clear all timeouts or intervals that may still be active\n timeouts.forEach(({ timeout }) => {\n adapter.clearTimeout(timeout);\n });\n\n callback();\n } catch (e: any) {\n errorLogger(e, 'Error onUnload', adapter);\n callback();\n }\n }\n\n onMessage(obj: ioBroker.Message): void {\n if (typeof obj === 'object' && obj.message) {\n if (obj.command === 'send') {\n // e.g. send email or pushover or whatever\n this.log.info('send command');\n // Send response in callback if required\n if (obj.callback) {\n this.sendTo(obj.from, obj.command, 'Message received', obj.callback);\n }\n }\n }\n }\n}\n\nif (require.main !== module) {\n // Export the constructor in compact mode\n /**\n * @param [options] - Adapter options\n */\n module.exports = (options: Partial<utils.AdapterOptions<undefined, undefined>> | undefined): TelegramMenu =>\n new TelegramMenu(options);\n} else {\n // otherwise start the instance directly\n (() => new TelegramMenu())();\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,YAAuB;AAEvB,oBAAiF;AACjF,6BAAwC;AACxC,sBAA+B;AAC/B,yBAA4B;AAC5B,wBAA+B;AAC/B,kCAAqC;AACrC,yBAAmD;AACnD,0BAA6F;AAC7F,qBAA4B;AAE5B,wBAAsC;AACtC,oBAAoD;AACpD,mBAA6C;AAC7C,sBAA6F;AAC7F,6BAAmC;AACnC,mCAAsC;AACtC,2BAA4D;AAE5D,MAAM,aAAa;AACZ,IAAI;AAEX,MAAO,qBAAmC,MAAM,QAAQ;AAAA,EACpD,OAAe;AAAA;AAAA;AAAA;AAAA,EAKR,YAAY,UAAyC,CAAC,GAAG;AAC5D,UAAM;AAAA,MACF,GAAG;AAAA,MACH,MAAM;AAAA,IACV,CAAC;AACD,SAAK,GAAG,SAAS,KAAK,QAAQ,KAAK,IAAI,CAAC;AACxC,SAAK,GAAG,UAAU,KAAK,SAAS,KAAK,IAAI,CAAC;AAC1C,iBAAa,WAAW;AAAA,EAC5B;AAAA,EAEA,MAAc,UAAyB;AACnC,cAAU;AACV,UAAM,KAAK,SAAS,mBAAmB,OAAO,IAAI;AAClD,cAAM,gCAAY,IAAI;AAEtB,UAAM;AAAA,MACF;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ,QAAI,2CAAmB,KAAK,MAAM;AAClC,UAAM,EAAE,iBAAiB,IAAI;AAE7B,UAAM,WAAqB,CAAC;AAC5B,UAAM,iBAAa,+BAAc,gBAAgB,UAAU;AAC3D,QAAI;AACA,YAAM,KAAK,iBAAiB,0BAA0B,OAAO,KAAK,QAAQ;AAzEtF;AA0EgB,YAAI,OAAO,CAAC,KAAK;AACb,eAAK,IAAI,MAAM,aAAa,wBAAwB,mBAAmB,GAAG,EAAE;AAC5E;AAAA,QACJ;AAEA,YAAI,CAAE,UAAM,yCAAsB,wBAAwB,GAAI;AAC1D;AAAA,QACJ;AAEA,cAAM,EAAE,KAAK,OAAO,IAAI;AAExB,aAAK,IAAI,KAAK,oBAAoB;AAElC,mBAAW,QAAQ,KAAK;AACpB,gBAAM,yBAAqB,iCAAgB,IAAI,IAAI,CAAC;AACpD,gBAAM,mBAAe,iCAAgB,kBAAkB;AACvD,gBAAM,uBAAmB,+BAAgB,EAAE,QAAQ,iCAAS,OAAO,YAAY,aAAa,CAAC;AAE7F,mBAAS,IAAI,IAAI;AACjB,cAAI,kBAAkB;AAClB,qBAAS,IAAI,IAAI,qDAAkB;AACnC,kBAAM,2BAA2B,qDAAkB;AACnD,gBAAI,qEAA0B,QAAQ;AAClC,wBAAM,gDAAwB,wBAAwB;AAAA,YAC1D;AAAA,UACJ,OAAO;AACH,oBAAQ,IAAI,MAAM,uBAAuB;AAAA,UAC7C;AAGA,eAAI,sBAAW,WAAX,mBAAoB,UAApB,mBAA2B,QAAQ;AACnC,uBAAW,SAAS,WAAW,OAAO,IAAI,EAAE,QAAQ;AAChD,wBAAM,gDAAwB,MAAM,EAAE;AAAA,YAC1C;AAAA,UACJ;AACA,kBAAQ,IAAI,MAAM,SAAS,IAAI,EAAE;AACjC,kBAAQ,IAAI,MAAM,sBAAkB,0BAAW,kBAAkB,CAAC,EAAE;AACpE,kBAAQ,IAAI,MAAM,qBAAiB,0BAAW,SAAS,IAAI,CAAC,CAAC,EAAE;AAAA,QACnE;AAEA,gBAAQ,IAAI,MAAM,iBAAa,0BAAW,UAAU,CAAC,EAAE;AACvD,gBAAQ,IAAI,MAAM,iBAAa,0BAAW,WAAW,CAAC,EAAE;AAExD,YAAI,sBAAsB;AACtB,oBAAM;AAAA,YACF;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,QAAkB,CAAC;AACvB,aAAK,GAAG,eAAe,OAAO,IAAI,UAAU;AAhI5D,cAAAA,KAAAC;AAiIoB,gBAAM,4BAAuC,oDAAsB;AAEnE,gBAAM,2BAA2B,MAAM,KAAK,oBAAoB,IAAI,wBAAwB;AAC5F,cAAI,CAAC,0BAA0B;AAC3B;AAAA,UACJ;AAEA,gBAAM,EAAE,YAAY,MAAM,IAAI,MAAM,KAAK,uBAAuB,cAAc;AAC9E,cAAI,OAAO;AACP;AAAA,UACJ;AAEA,cAAI,KAAK,oBAAoB,IAAI,UAAU,GAAG;AAC1C,sBAAM,yDAAoC,gBAAgB,UAAU;AACpE;AAAA,UACJ;AAEA,cAAI,CAAC,SAAS,KAAC,wBAAU,MAAM,GAAG,GAAG;AACjC;AAAA,UACJ;AAEA,kBAAI,wBAAS,MAAM,GAAG,KAAK,MAAM,IAAI,SAAS,QAAQ,GAAG;AACrD,sBAAM,6DAAwC,MAAM,KAAK,cAAc;AACvE;AAAA,UACJ;AAEA,cAAI,UAAM,0BAAW,YAAY,IAAI,OAAO,UAAU,gBAAgB,cAAc,GAAG;AACnF;AAAA,UACJ;AAEA,cAAI,KAAK,YAAY,IAAI,kBAAkB,gBAAgB,GAAG;AAC1D,sBAAM,kCAAe,OAAO,gBAAgB;AAAA,UAChD,WAAW,KAAK,aAAa,OAAO,IAAI,YAAY,UAAU,GAAG;AAC7D,kBAAM,QAAQ,MAAM,IAAI,SAAS;AAEjC,kBAAM,cAAc,MAAM,MAAM,MAAM,QAAQ,GAAG,IAAI,GAAG,MAAM,MAAM;AACpE,wBAAQ,6CAA4B,gBAAgB,UAAU;AAE9D,kBAAM,YAAY,UAAM,0CAAsB;AAAA,cAC1C;AAAA,cACA,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ,CAAC;AAED,iBAAK,IAAI,MAAM,kCAA8B,0BAAW,KAAK,CAAC,EAAE;AAEhE,gBAAI,CAAC,aAAa,sBAAsB;AACpC,sBAAQ,IAAI,MAAM,gBAAgB;AAClC,wBAAM,gCAAe;AAAA,gBACjB;AAAA,gBACA,YAAY;AAAA,gBACZ;AAAA,cACJ,CAAC;AAAA,YACL;AACA;AAAA,UACJ;AACA,cAAI,UAAS,+DAAuB,KAAK,aAAW,QAAQ,MAAM,MAAK;AACnE,oBAAQ,IAAI,MAAM,oCAAoC,EAAE,kBAAc,0BAAW,KAAK,CAAC,IAAI;AAE3F,uBAAW,MAAM,uBAAuB;AACpC,oBAAM,EAAE,IAAI,MAAM,YAAAC,aAAY,SAAS,YAAY,WAAW,IAAI;AAClE,oBAAM,MAAc,sBAAsB,QAAQ,EAAE;AAEpD,kBAAI,QAAQ,IAAI;AACZ,wBAAQ,IAAI,MAAM,mBAAe,0BAAW,EAAE,CAAC,EAAE;AACjD,wBAAQ,IAAI,MAAM,cAAU,0BAAW,KAAK,CAAC,EAAE;AAE/C,wBAAI,uBAAS,OAAO,KAAK,EAAC,+BAAO,QAAO,WAAW,SAAS,cAAc,GAAG;AACzE,wBAAM,EAAE,UAAU,QAAI,6BAAc,YAAY,gBAAgB,GAAG;AACnE,wBAAM,iBAAiB,UAAU,MAAM,GAAG;AAE1C,sBAAI,OAAO;AACX,0BAAI,wBAAU,MAAM,GAAG,GAAG;AACtB,6BAAOF,MAAA,eAAe,CAAC,MAAhB,gBAAAA,IAAmB,SAAS,cAC7B,eAAe,CAAC,QAChB,mDAA6B,eAAe,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC;AAAA,kBAC9E;AACA,0BAAQ,IAAI,MAAM,gBAAgB,IAAI,EAAE;AAExC,sBAAI,SAAS,IAAI;AACb,4BAAQ,IAAI,MAAM,gDAAgD;AAAA,kBACtE;AAEA,4BAAM,gCAAe;AAAA,oBACjB,YAAY;AAAA,oBACZ;AAAA,oBACA,YAAAE;AAAA,oBACA;AAAA,kBACJ,CAAC;AACD;AAAA,gBACJ;AACA,wBAAQ,IAAI,MAAM,aAAS,0BAAW,EAAE,SAAS,KAAK,+BAAO,KAAK,KAAK,+BAAO,IAAI,CAAC,CAAC,EAAE;AAEtF,oBAAI,KAAC,sBAAQ,OAAO,MAAK,+BAAO,MAAK;AACjC,sBAAI,aAAa;AAEjB,sBAAI,WAAW,SAAS,cAAc,GAAG;AACrC,qCAAa;AAAA,sBACT;AAAA,sBACA;AAAA,sBACA;AAAA,oBACJ,EAAE;AAAA,kBACN;AAEA,sBAAI,WAAW,SAAS,kBAAkB,GAAG;AACzC,0BAAM,EAAE,sBAAsB,uBAAuB,QAAI;AAAA,sBACrD;AAAA,sBACA;AAAA,sBACA;AAAA,oBACJ;AACA,0BAAM,iBAAiB,uBAAuB,MAAM,GAAG;AACvD,0BAAM,cAAc,eAAe,CAAC;AACpC,iCAAa,GAAG,oBAAoB,IAAI,WAAW;AAAA,kBACvD;AAEA,wBAAM;AAAA,oBACF,YAAY;AAAA,oBACZ,OAAAC;AAAA,oBACA;AAAA,kBACJ,QAAI,oCAAc,SAAS,aAAYF,MAAA,MAAM,QAAN,gBAAAA,IAAW,UAAU;AAE5D,sBAAI,CAACE,QAAO;AACR,iCAAa;AAAA,kBACjB;AAEA,0BAAQ,IAAI,MAAM,kBAAkB,QAAQ,EAAE;AAE9C,4BAAM,gCAAe;AAAA,oBACjB,YAAAD;AAAA,oBACA;AAAA,oBACA;AAAA,oBACA;AAAA,kBACJ,CAAC;AACD,wCAAsB,OAAO,KAAK,CAAC;AAAA,gBACvC;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ,CAAC;AAAA,MACL,CAAC;AAAA,IACL,SAAS,GAAQ;AACb,sCAAY,iBAAiB,GAAG,OAAO;AAAA,IAC3C;AAEA,UAAM,KAAK,4BAA4B,gBAAgB;AACvD,UAAM,KAAK,4BAA4B,gBAAgB;AACvD,UAAM,KAAK,4BAA4B,GAAG,gBAAgB,4BAA4B;AACtF,UAAM,KAAK,4BAA4B,UAAU;AACjD,UAAM,KAAK,4BAA4B,GAAG,gBAAgB,kBAAkB;AAAA,EAChF;AAAA,EAEQ,YAAY,IAAY,kBAA0B,kBAAmC;AACzF,WAAO,MAAM,oBAAoB,MAAM;AAAA,EAC3C;AAAA,EAEQ,oBAAoB,IAAY,YAA6B;AACjE,WAAO,CAAC,EAAE,GAAG,SAAS,oBAAoB,KAAK,CAAC,GAAG,SAAS,cAAc,KAAK;AAAA,EACnF;AAAA,EAEQ,aACJ,OACA,IACA,YACA,YACO;AACP,WAAO,CAAC,EAAE,QAAO,+BAAO,SAAQ,YAAY,MAAM,OAAO,MAAM,MAAM,eAAc,+BAAO,QAAO;AAAA,EACrG;AAAA,EAEA,MAAc,oBAAoB,IAAY,0BAAoD;AAC9F,QAAI,OAAO,0BAA0B;AACjC,UAAI,CAAE,UAAM,yCAAsB,wBAAwB,GAAI;AAC1D,aAAK,IAAI,MAAM,wBAAwB;AACvC,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAc,uBACV,gBACsF;AACtF,UAAM,EAAE,kBAAkB,mBAAmB,IAAI;AACjD,UAAM,cAAc,MAAM,KAAK,qBAAqB,GAAG,gBAAgB,4BAA4B;AAEnG,QAAI,EAAC,2CAAa,MAAK;AACnB,cAAQ,IAAI,MAAM,kBAAkB;AACpC,aAAO,EAAE,QAAQ,IAAI,YAAY,IAAI,OAAO,MAAM,cAAc,mBAAmB;AAAA,IACvF;AAEA,UAAM,iBAAa,mDAAoC,oBAAoB,YAAY,IAAI,SAAS,CAAC;AACrG,QAAI,CAAC,YAAY;AACb,WAAK,IAAI,MAAM,wBAAwB;AACvC,aAAO,EAAE,QAAQ,YAAY,IAAI,SAAS,GAAG,YAAY,IAAI,OAAO,MAAM,cAAc,iBAAiB;AAAA,IAC7G;AACA,WAAO,EAAE,QAAQ,YAAY,IAAI,SAAS,GAAG,YAAY,OAAO,MAAM;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,SAAS,UAA4B;AACzC,UAAM,eAAW,gCAAY;AAC7B,QAAI;AAEA,eAAS,QAAQ,CAAC,EAAE,QAAQ,MAAM;AAC9B,gBAAQ,aAAa,OAAO;AAAA,MAChC,CAAC;AAED,eAAS;AAAA,IACb,SAAS,GAAQ;AACb,sCAAY,GAAG,kBAAkB,OAAO;AACxC,eAAS;AAAA,IACb;AAAA,EACJ;AAAA,EAEA,UAAU,KAA6B;AACnC,QAAI,OAAO,QAAQ,YAAY,IAAI,SAAS;AACxC,UAAI,IAAI,YAAY,QAAQ;AAExB,aAAK,IAAI,KAAK,cAAc;AAE5B,YAAI,IAAI,UAAU;AACd,eAAK,OAAO,IAAI,MAAM,IAAI,SAAS,oBAAoB,IAAI,QAAQ;AAAA,QACvE;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,IAAI,QAAQ,SAAS,QAAQ;AAKzB,SAAO,UAAU,CAAC,YACd,IAAI,aAAa,OAAO;AAChC,OAAO;AAEH,GAAC,MAAM,IAAI,aAAa,GAAG;AAC/B;",
6
6
  "names": ["_a", "_b", "userToSend", "error"]
7
7
  }