iobroker.telegram-menu 2.2.0 → 2.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -1
- package/admin/build/index.js +56 -56
- package/admin/build/index.js.map +4 -4
- package/admin/css/button.css +66 -32
- package/admin/css/colors.css +140 -0
- package/admin/css/custom_classes.css +20 -0
- package/admin/css/description.css +4 -4
- package/admin/css/edit-container.css +43 -31
- package/admin/css/editor-header.css +10 -8
- package/admin/css/header.css +11 -15
- package/admin/css/input-select.css +131 -0
- package/admin/css/row-editor.css +4 -4
- package/admin/css/scrollbar.css +21 -0
- package/admin/css/style.css +194 -509
- package/admin/css/table.css +46 -46
- package/admin/css/textarea.css +3 -3
- package/admin/i18n/de/translations.json +123 -122
- package/admin/i18n/en/translations.json +123 -122
- package/admin/i18n/es/translations.json +7 -6
- package/admin/i18n/fr/translations.json +7 -6
- package/admin/i18n/it/translations.json +7 -6
- package/admin/i18n/nl/translations.json +7 -6
- package/admin/i18n/pl/translations.json +7 -6
- package/admin/i18n/pt/translations.json +7 -6
- package/admin/i18n/ru/translations.json +7 -6
- package/admin/i18n/uk/translations.json +7 -6
- package/admin/i18n/zh-cn/translations.json +7 -6
- package/admin/words.js +10 -4
- package/build/lib/getstate.js +6 -5
- package/build/lib/getstate.js.map +3 -3
- package/build/lib/global.js +6 -18
- package/build/lib/global.js.map +2 -2
- package/build/lib/string.js +29 -0
- package/build/lib/string.js.map +7 -0
- package/build/lib/utilities.js +8 -6
- package/build/lib/utilities.js.map +2 -2
- package/io-package.json +14 -14
- package/package.json +1 -1
- package/admin/css/input.css +0 -104
|
@@ -24,11 +24,15 @@
|
|
|
24
24
|
"confirmDelete": "Усі дані буде втрачено. Підтвердити?",
|
|
25
25
|
"confirmMessage": "Підтвердьте повідомленням",
|
|
26
26
|
"confirmSet": "Увага. Значення лише встановлено, але ще не підтверджено адаптером. Ви можете видалити noValue, тоді значення відобразиться. Позиція && замінюється значенням або буде розміщено в кінці",
|
|
27
|
+
"contactDeveloperForExistingMenu": "Якщо меню існує, але його не знайдено, створіть проблему на Github!",
|
|
27
28
|
"convertsUnixTimestamp": "Перетворює мітку часу Unix на місцевий час",
|
|
28
29
|
"copy": "Копія",
|
|
29
30
|
"createMenu": "Будь ласка, створіть меню!",
|
|
30
31
|
"delay": "Затримка (мс)",
|
|
31
32
|
"delete": "Видалити",
|
|
33
|
+
"description": "опис",
|
|
34
|
+
"descriptionInfo": "Тут можна ввести інформацію про дзвінки. Вони відображаються, коли ви натискаєте кнопку навігації в навігації, і вона не має прямого посилання, а перехоплюється за допомогою власного сценарію. Таким чином ви зможете мати кращий огляд.",
|
|
35
|
+
"descriptions": "Описи",
|
|
32
36
|
"directory": "Довідник",
|
|
33
37
|
"doubleTrigger": "У вас є подвійні тригери, будь ласка, видаліть їх!",
|
|
34
38
|
"edit": "Редагувати",
|
|
@@ -38,6 +42,7 @@
|
|
|
38
42
|
"hide": "Сховати",
|
|
39
43
|
"identification": "Ідентифікація",
|
|
40
44
|
"inactive": "Неактивний",
|
|
45
|
+
"info": "Інформація",
|
|
41
46
|
"insertID": "Щоб вставити ідентифікатор, просто спочатку вставте блок, виберіть ідентифікатор. Потім його буде автоматично вставлено у відповідне місце, навіть якщо ID потрібно змінити. Якщо код не розпізнає блок, ідентифікатор додається в кінці.",
|
|
42
47
|
"instance": "Екземпляр",
|
|
43
48
|
"isSubmenu": "Це підменю!",
|
|
@@ -51,6 +56,7 @@
|
|
|
51
56
|
"math": "Перетворює значення, /10 можна замінити",
|
|
52
57
|
"menu": "Меню",
|
|
53
58
|
"menuBack": "При натисканні відбувається повернення до попереднього меню",
|
|
59
|
+
"menuCannotBeFound": "Вибране меню не знайдено!",
|
|
54
60
|
"menuDeleteAll": "Генерує кнопку для видалення всіх повідомлень від бота. Навігація необов'язкова. Просто залиште це поле порожнім, інакше ви зможете увійти в меню, яке слід викликати.",
|
|
55
61
|
"menuDynamicSwitch": "Генерує кілька кнопок, значення можна вставляти окремо. Замініть TRIGGER на унікальне значення. LengthOfRow є необов’язковим і може використовуватися для встановлення кількості кнопок у рядку. <br><strong class='breakingChange'>Критова зміна!!!</strong> Змініть вручну: `[Name1:Value1, Name2:Value2]` на `[Name1|Value1, Name2|Value2]`. Десяткові числа тепер також можна використовувати як значення.",
|
|
56
62
|
"menuList": "Список меню",
|
|
@@ -115,10 +121,5 @@
|
|
|
115
121
|
"valueRound": "Округлює значення, наприклад, до 2 знаків після коми",
|
|
116
122
|
"values": "Цінності",
|
|
117
123
|
"yes": "так",
|
|
118
|
-
"
|
|
119
|
-
"menuCannotBeFound": "Вибране меню не знайдено!",
|
|
120
|
-
"contactDeveloperForExistingMenu": "Якщо меню існує, але його не знайдено, створіть проблему на Github!",
|
|
121
|
-
"description": "опис",
|
|
122
|
-
"descriptions": "Описи",
|
|
123
|
-
"descriptionInfo": "Тут можна ввести інформацію про дзвінки. Вони відображаються, коли ви натискаєте кнопку навігації в навігації, і вона не має прямого посилання, а перехоплюється за допомогою власного сценарію. Таким чином ви зможете мати кращий огляд."
|
|
124
|
+
"choose": "Виберіть"
|
|
124
125
|
}
|
|
@@ -24,11 +24,15 @@
|
|
|
24
24
|
"confirmDelete": "所有数据都将丢失。确认?",
|
|
25
25
|
"confirmMessage": "短信确认",
|
|
26
26
|
"confirmSet": "注意力。该值仅被设置,但尚未被适配器确认。您可以删除 noValue,然后将显示该值。位置 && 替换为 Value 或将放在末尾",
|
|
27
|
+
"contactDeveloperForExistingMenu": "如果菜单存在但未找到,请在 Github 上创建问题!",
|
|
27
28
|
"convertsUnixTimestamp": "将 Unix 时间戳转换为本地时间",
|
|
28
29
|
"copy": "复制",
|
|
29
30
|
"createMenu": "请创建一个菜单!",
|
|
30
31
|
"delay": "延迟(毫秒)",
|
|
31
32
|
"delete": "删除",
|
|
33
|
+
"description": "描述",
|
|
34
|
+
"descriptionInfo": "您可以在此处输入有关呼叫的信息。当您单击导航中的导航按钮时会显示这些内容,并且它没有直接链接,而是通过其自己的脚本拦截。这样您就可以更好地了解情况。",
|
|
35
|
+
"descriptions": "描述",
|
|
32
36
|
"directory": "目录",
|
|
33
37
|
"doubleTrigger": "您有双触发器,请删除它们!",
|
|
34
38
|
"edit": "编辑",
|
|
@@ -38,6 +42,7 @@
|
|
|
38
42
|
"hide": "隐藏",
|
|
39
43
|
"identification": "鉴别",
|
|
40
44
|
"inactive": "不活跃",
|
|
45
|
+
"info": "信息",
|
|
41
46
|
"insertID": "要插入 ID,只需先插入块,然后选择 ID。即使要更改 ID,也会自动将其插入到适当的位置。如果代码无法识别该块,则将 ID 附加到末尾。",
|
|
42
47
|
"instance": "实例",
|
|
43
48
|
"isSubmenu": "这是一个子菜单!",
|
|
@@ -51,6 +56,7 @@
|
|
|
51
56
|
"math": "转换数值,/10可以替换",
|
|
52
57
|
"menu": "菜单",
|
|
53
58
|
"menuBack": "当按下时,您跳回到上一个菜单",
|
|
59
|
+
"menuCannotBeFound": "找不到点击的菜单!",
|
|
54
60
|
"menuDeleteAll": "生成一个按钮以删除机器人中的所有消息。导航是可选的。只需将其留空,否则您可以输入应调用的菜单。",
|
|
55
61
|
"menuDynamicSwitch": "生成乘法按钮,可以单独插入值。将 TRIGGER 替换为唯一值。 LengthOfRow 是可选的,可用于设置每行的按钮数量。 <br><strong class='writingChange'>重大更改!!!</strong> 请手动将“[Name1:Value1, Name2:Value2]”更改为“[Name1|Value1, Name2|Value2]”。十进制数现在也可以用作值。",
|
|
56
62
|
"menuList": "菜单列表",
|
|
@@ -115,10 +121,5 @@
|
|
|
115
121
|
"valueRound": "例如,将值四舍五入到小数点后两位",
|
|
116
122
|
"values": "价值观",
|
|
117
123
|
"yes": "是的",
|
|
118
|
-
"
|
|
119
|
-
"menuCannotBeFound": "找不到点击的菜单!",
|
|
120
|
-
"contactDeveloperForExistingMenu": "如果菜单存在但未找到,请在 Github 上创建问题!",
|
|
121
|
-
"description": "描述",
|
|
122
|
-
"descriptions": "描述",
|
|
123
|
-
"descriptionInfo": "您可以在此处输入有关呼叫的信息。当您单击导航中的导航按钮时会显示这些内容,并且它没有直接链接,而是通过其自己的脚本拦截。这样您就可以更好地了解情况。"
|
|
124
|
+
"choose": "选择"
|
|
124
125
|
}
|
package/admin/words.js
CHANGED
|
@@ -17,10 +17,11 @@ systemDictionary = {
|
|
|
17
17
|
"activeMenu": { "en": "Active Menu:", "de": "Aktives Menü:", "ru": "Активное меню:", "pt": "Menu Ativo:", "nl": "Actief menu:", "fr": "Menu actif :", "it": "Menù attivo:", "es": "Menú activo:", "pl": "Aktywne menu:", "uk": "Активне меню:", "zh-cn": "活动菜单:"},
|
|
18
18
|
"add": { "en": "Add", "de": "Hinzufügen", "ru": "Добавлять", "pt": "Adicionar", "nl": "Toevoegen", "fr": "Ajouter", "it": "Aggiungere", "es": "Agregar", "pl": "Dodać", "uk": "додати", "zh-cn": "添加"},
|
|
19
19
|
"addAction": { "en": "Add new Action", "de": "Neue Aktion hinzufügen", "ru": "Добавить новое действие", "pt": "Adicionar nova ação", "nl": "Nieuwe actie toevoegen", "fr": "Ajouter une nouvelle action", "it": "Aggiungi nuova azione", "es": "Agregar nueva acción", "pl": "Dodaj nową akcję", "uk": "Додати нову дію", "zh-cn": "添加新动作"},
|
|
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": "添加已创建的菜单作为按钮"},
|
|
20
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": "添加新菜单名称"},
|
|
21
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,然后是条件和文本。"},
|
|
22
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
|
-
"call": { "en": "Call", "de": "
|
|
24
|
+
"call": { "en": "Call", "de": "Aufruf", "ru": "Вызов", "pt": "Chamar", "nl": "Telefoongesprek", "fr": "Appel", "it": "Chiamata", "es": "Llamar", "pl": "Dzwonić", "uk": "Телефонуйте", "zh-cn": "称呼"},
|
|
24
25
|
"cancel": { "en": "Cancel", "de": "Stornieren", "ru": "Отмена", "pt": "Cancelar", "nl": "Annuleren", "fr": "Annuler", "it": "Cancellare", "es": "Cancelar", "pl": "Anulować", "uk": "Скасувати", "zh-cn": "取消"},
|
|
25
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"},
|
|
26
27
|
"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": "选择一个动作"},
|
|
@@ -32,11 +33,15 @@ systemDictionary = {
|
|
|
32
33
|
"confirmDelete": { "en": "All data will be lost. Confirm?", "de": "Alle Daten gehen verloren. Bestätigen?", "ru": "Все данные будут потеряны. Подтверждать?", "pt": "Todos os dados serão perdidos. Confirmar?", "nl": "Alle gegevens gaan verloren. Bevestigen?", "fr": "Toutes les données seront perdues. Confirmer?", "it": "Tutti i dati andranno persi. Confermare?", "es": "Todos los datos se perderán. ¿Confirmar?", "pl": "Wszystkie dane zostaną utracone. Potwierdzać?", "uk": "Усі дані буде втрачено. Підтвердити?", "zh-cn": "所有数据都将丢失。确认?"},
|
|
33
34
|
"confirmMessage": { "en": "Confirm with message", "de": "Mit Nachricht bestätigen", "ru": "Подтвердите сообщением", "pt": "Confirme com mensagem", "nl": "Bevestig met bericht", "fr": "Confirmer par message", "it": "Conferma con messaggio", "es": "Confirmar con mensaje", "pl": "Potwierdź komunikatem", "uk": "Підтвердьте повідомленням", "zh-cn": "短信确认"},
|
|
34
35
|
"confirmSet": { "en": "Attention. The value has only been set but not yet confirmed by the Adapter. You can remove noValue, then the value will displayed. Position && replaced by Value or will be put at the End", "de": "Aufmerksamkeit. Der Wert wurde vom Adapter nur gesetzt, aber noch nicht bestätigt. Sie können noValue entfernen, dann wird der Wert angezeigt. Position && wird durch Wert ersetzt oder ans Ende gestellt", "ru": "Внимание. Значение только установлено, но еще не подтверждено адаптером. Вы можете удалить noValue, тогда значение будет отображаться. Позиция && заменяется значением или будет помещена в конец", "pt": "Atenção. O valor foi apenas definido, mas ainda não confirmado pelo Adaptador. Você pode remover noValue e o valor será exibido. Posição && substituída por Valor ou será colocada no final", "nl": "Aandacht. De waarde is alleen ingesteld, maar nog niet bevestigd door de adapter. U kunt noValue verwijderen, waarna de waarde wordt weergegeven. Positie && vervangen door Waarde of wordt aan het Einde gezet", "fr": "Attention. La valeur a seulement été définie mais n'a pas encore été confirmée par l'adaptateur. Vous pouvez supprimer noValue, la valeur s'affichera alors. Position && remplacé par Value ou sera mis à la fin", "it": "Attenzione. Il valore è stato solo impostato ma non ancora confermato dall'adattatore. Puoi rimuovere noValue, quindi il valore verrà visualizzato. Posizione && sostituito da Valore o verrà inserito alla fine", "es": "Atención. El valor sólo ha sido establecido pero aún no confirmado por el Adaptador. Puede eliminar noValue, luego se mostrará el valor. Posición && reemplazada por Valor o se pondrá al final", "pl": "Uwaga. Wartość została ustawiona, ale jeszcze nie potwierdzona przez adapter. Możesz usunąć noValue, wtedy wartość zostanie wyświetlona. Pozycja && zostanie zastąpiona wartością lub zostanie umieszczona na końcu", "uk": "Увага. Значення лише встановлено, але ще не підтверджено адаптером. Ви можете видалити noValue, тоді значення відобразиться. Позиція && замінюється значенням або буде розміщено в кінці", "zh-cn": "注意力。该值仅被设置,但尚未被适配器确认。您可以删除 noValue,然后将显示该值。位置 && 替换为 Value 或将放在末尾"},
|
|
36
|
+
"contactDeveloperForExistingMenu": { "en": "If the menu exists but was not found, please create an issue on Github!", "de": "Wenn das Menü existiert, aber nicht gefunden wurde, erstellen Sie bitte ein Issue auf Github!", "ru": "Если меню существует, но не найдено, создайте проблему на Github!", "pt": "Se o menu existir, mas não foi encontrado, crie um problema no Github!", "nl": "Als het menu bestaat maar niet is gevonden, maak dan een probleem aan op Github!", "fr": "Si le menu existe mais n'a pas été trouvé, veuillez créer un problème sur Github !", "it": "Se il menu esiste ma non è stato trovato, crea un problema su Github!", "es": "Si el menú existe pero no se encontró, ¡cree un problema en Github!", "pl": "Jeśli menu istnieje, ale nie zostało znalezione, utwórz problem na Githubie!", "uk": "Якщо меню існує, але його не знайдено, створіть проблему на Github!", "zh-cn": "如果菜单存在但未找到,请在 Github 上创建问题!"},
|
|
35
37
|
"convertsUnixTimestamp": { "en": "Converts a Unix timestamp to a local time", "de": "Konvertiert einen Unix-Zeitstempel in eine lokale Zeit", "ru": "Преобразует временную метку Unix в местное время.", "pt": "Converte um carimbo de data/hora Unix em uma hora local", "nl": "Converteert een Unix-tijdstempel naar een lokale tijd", "fr": "Convertit un horodatage Unix en heure locale", "it": "Converte un timestamp Unix in un'ora locale", "es": "Convierte una marca de tiempo de Unix a una hora local", "pl": "Konwertuje znacznik czasu Uniksa na czas lokalny", "uk": "Перетворює мітку часу Unix на місцевий час", "zh-cn": "将 Unix 时间戳转换为本地时间"},
|
|
36
38
|
"copy": { "en": "Copy", "de": "Kopieren", "ru": "Копировать", "pt": "Cópia", "nl": "Kopiëren", "fr": "Copie", "it": "Copia", "es": "Copiar", "pl": "Kopia", "uk": "Копія", "zh-cn": "复制"},
|
|
37
39
|
"createMenu": { "en": "Please create a menu!", "de": "Bitte erstellen Sie ein Menü!", "ru": "Пожалуйста, создайте меню!", "pt": "Por favor, crie um menu!", "nl": "Maak alstublieft een menu aan!", "fr": "S'il vous plaît, créez un menu !", "it": "Per favore crea un menu!", "es": "¡Por favor crea un menú!", "pl": "Proszę stworzyć menu!", "uk": "Будь ласка, створіть меню!", "zh-cn": "请创建一个菜单!"},
|
|
38
40
|
"delay": { "en": "Delay (ms)", "de": "Verzögerung (ms)", "ru": "Задержка (мс)", "pt": "Atraso (ms)", "nl": "Vertraging (ms)", "fr": "Délai (ms)", "it": "Ritardo (ms)", "es": "Retraso (ms)", "pl": "Opóźnienie (ms)", "uk": "Затримка (мс)", "zh-cn": "延迟(毫秒)"},
|
|
39
41
|
"delete": { "en": "Delete", "de": "Löschen", "ru": "Удалить", "pt": "Excluir", "nl": "Verwijderen", "fr": "Supprimer", "it": "Eliminare", "es": "Borrar", "pl": "Usuwać", "uk": "Видалити", "zh-cn": "删除"},
|
|
42
|
+
"description": { "en": "Description", "de": "Beschreibung", "ru": "Описание", "pt": "Descrição", "nl": "Beschrijving", "fr": "Description", "it": "Descrizione", "es": "Descripción", "pl": "Opis", "uk": "опис", "zh-cn": "描述"},
|
|
43
|
+
"descriptionInfo": { "en": "Here you can enter information about calls. These are displayed when you click on a navigation button in the navigation and it does not have a direct link, but is intercepted via its own script. This way you can keep a better overview.", "de": "Hier können Sie Informationen zu Anrufen eingeben. Diese werden angezeigt, wenn Sie in der Navigation auf einen Navigationsbutton klicken und keinen direkten Link haben, sondern über ein eigenes Skript abgefangen werden. So behalten Sie einen besseren Überblick.", "ru": "Здесь вы можете ввести информацию о звонках. Они отображаются при нажатии на кнопку навигации в навигации и не имеют прямой ссылки, а перехватываются собственным скриптом. Таким образом, вы сможете лучше видеть ситуацию.", "pt": "Aqui você pode inserir informações sobre chamadas. Estes são exibidos quando você clica em um botão de navegação na navegação e não possui link direto, mas é interceptado através de script próprio. Dessa forma, você pode manter uma visão geral melhor.", "nl": "Hier kunt u informatie over oproepen invoeren. Deze worden weergegeven wanneer u op een navigatieknop in de navigatie klikt en deze heeft geen directe link, maar wordt via een eigen script onderschept. Zo behoud je een beter overzicht.", "fr": "Ici, vous pouvez saisir des informations sur les appels. Ceux-ci sont affichés lorsque vous cliquez sur un bouton de navigation dans la navigation et celui-ci n'a pas de lien direct, mais est intercepté via son propre script. De cette façon, vous pouvez garder une meilleure vue d’ensemble.", "it": "Qui è possibile inserire le informazioni sulle chiamate. Questi vengono visualizzati quando si fa clic su un pulsante di navigazione nella navigazione e non hanno un collegamento diretto, ma vengono intercettati tramite un proprio script. In questo modo puoi mantenere una migliore visione d'insieme.", "es": "Aquí puede ingresar información sobre las llamadas. Estos se muestran cuando hace clic en un botón de navegación en la navegación y no tiene un enlace directo, sino que se intercepta a través de su propio script. De esta manera podrá tener una mejor visión general.", "pl": "Tutaj możesz wprowadzić informacje o połączeniach. Są one wyświetlane po kliknięciu przycisku nawigacyjnego w nawigacji i nie mają bezpośredniego łącza, ale są przechwytywane za pomocą własnego skryptu. W ten sposób będziesz mieć lepszy przegląd.", "uk": "Тут можна ввести інформацію про дзвінки. Вони відображаються, коли ви натискаєте кнопку навігації в навігації, і вона не має прямого посилання, а перехоплюється за допомогою власного сценарію. Таким чином ви зможете мати кращий огляд.", "zh-cn": "您可以在此处输入有关呼叫的信息。当您单击导航中的导航按钮时会显示这些内容,并且它没有直接链接,而是通过其自己的脚本拦截。这样您就可以更好地了解情况。"},
|
|
44
|
+
"descriptions": { "en": "Descriptions", "de": "Beschreibungen", "ru": "Описания", "pt": "Descrições", "nl": "Beschrijvingen", "fr": "Descriptions", "it": "Descrizioni", "es": "Descripciones", "pl": "Opisy", "uk": "Описи", "zh-cn": "描述"},
|
|
40
45
|
"directory": { "en": "Directory", "de": "Verzeichnis", "ru": "Каталог", "pt": "Diretório", "nl": "Directory", "fr": "Annuaire", "it": "Direttorio", "es": "Directorio", "pl": "Informator", "uk": "Довідник", "zh-cn": "目录"},
|
|
41
46
|
"doubleTrigger": { "en": "You have double triggers, please remove them!", "de": "Sie haben Doppelauslöser, bitte entfernen Sie diese!", "ru": "У вас есть двойные триггеры, пожалуйста, удалите их!", "pt": "Você tem gatilhos duplos, remova-os!", "nl": "U heeft dubbele triggers, verwijder deze alstublieft!", "fr": "Vous avez des doubles déclencheurs, veuillez les supprimer !", "it": "Hai doppi trigger, rimuovili!", "es": "Tienes activadores dobles, ¡elimítalos!", "pl": "Masz podwójne wyzwalacze, usuń je!", "uk": "У вас є подвійні тригери, будь ласка, видаліть їх!", "zh-cn": "您有双触发器,请删除它们!"},
|
|
42
47
|
"edit": { "en": "Edit", "de": "Bearbeiten", "ru": "Редактировать", "pt": "Editar", "nl": "Bewerking", "fr": "Modifier", "it": "Modificare", "es": "Editar", "pl": "Redagować", "uk": "Редагувати", "zh-cn": "编辑"},
|
|
@@ -46,9 +51,9 @@ systemDictionary = {
|
|
|
46
51
|
"hide": { "en": "Hide", "de": "Verstecken", "ru": "Скрывать", "pt": "Esconder", "nl": "Verbergen", "fr": "Cacher", "it": "Nascondere", "es": "Esconder", "pl": "Ukrywać", "uk": "Сховати", "zh-cn": "隐藏"},
|
|
47
52
|
"identification": { "en": "Identification", "de": "Identifikation", "ru": "Идентификация", "pt": "Identificação", "nl": "Identificatie", "fr": "Identification", "it": "Identificazione", "es": "Identificación", "pl": "Identyfikacja", "uk": "Ідентифікація", "zh-cn": "鉴别"},
|
|
48
53
|
"inactive": { "en": "Inactive", "de": "Inaktiv", "ru": "Неактивный", "pt": "Inativo", "nl": "Inactief", "fr": "Inactif", "it": "Inattivo", "es": "Inactivo", "pl": "Nieaktywny", "uk": "Неактивний", "zh-cn": "不活跃"},
|
|
54
|
+
"info": { "en": "Info", "de": "Info", "ru": "Информация", "pt": "Informações", "nl": "Info", "fr": "Informations", "it": "Informazioni", "es": "Información", "pl": "Informacje", "uk": "Інформація", "zh-cn": "信息"},
|
|
49
55
|
"insertID": { "en": "To insert an ID, simply insert the block first, select the ID. This will then be automatically inserted in the appropriate place, even if the ID is to be changed. If the code does not recognize the block, the ID is appended to the end.", "de": "Um eine ID einzufügen, fügen Sie einfach zuerst den Block ein und wählen Sie die ID aus. Diese wird dann automatisch an der entsprechenden Stelle eingefügt, auch wenn die ID geändert werden soll. Wenn der Code den Block nicht erkennt, wird die ID am Ende angehängt.", "ru": "Чтобы вставить идентификатор, просто сначала вставьте блок, выберите идентификатор. Затем он будет автоматически вставлен в соответствующее место, даже если идентификатор необходимо изменить. Если код не распознает блок, идентификатор добавляется в конец.", "pt": "Para inserir um ID, basta inserir primeiro o bloco e selecionar o ID. Este será então inserido automaticamente no local apropriado, mesmo que o ID deva ser alterado. Se o código não reconhecer o bloco, o ID será anexado ao final.", "nl": "Om een ID in te voegen, voegt u eenvoudigweg eerst het blok in en selecteert u de ID. Deze wordt dan automatisch op de juiste plaats ingevoegd, ook als de ID moet worden gewijzigd. Als de code het blok niet herkent, wordt de ID aan het einde toegevoegd.", "fr": "Pour insérer un ID, insérez simplement le bloc en premier, sélectionnez l'ID. Celui-ci sera alors automatiquement inséré à l'endroit approprié, même si l'ID doit être modifié. Si le code ne reconnaît pas le bloc, l'ID est ajouté à la fin.", "it": "Per inserire un ID è sufficiente inserire prima il blocco, selezionare l'ID. Questo verrà poi inserito automaticamente nell'apposito posto, anche nel caso in cui si voglia modificare l'ID. Se il codice non riconosce il blocco, l'ID viene aggiunto alla fine.", "es": "Para insertar una ID, simplemente inserte el bloque primero, seleccione la ID. Este se insertará automáticamente en el lugar apropiado, incluso si se va a cambiar el ID. Si el código no reconoce el bloque, se añade el ID al final.", "pl": "Aby wstawić identyfikator, wystarczy najpierw wstawić blok i wybrać identyfikator. Zostanie on następnie automatycznie wstawiony w odpowiednim miejscu, nawet jeśli identyfikator ma zostać zmieniony. Jeżeli kod nie rozpoznaje bloku, na końcu dodawany jest identyfikator.", "uk": "Щоб вставити ідентифікатор, просто спочатку вставте блок, виберіть ідентифікатор. Потім його буде автоматично вставлено у відповідне місце, навіть якщо ID потрібно змінити. Якщо код не розпізнає блок, ідентифікатор додається в кінці.", "zh-cn": "要插入 ID,只需先插入块,然后选择 ID。即使要更改 ID,也会自动将其插入到适当的位置。如果代码无法识别该块,则将 ID 附加到末尾。"},
|
|
50
56
|
"instance": { "en": "Instance", "de": "Beispiel", "ru": "Пример", "pt": "Exemplo", "nl": "Aanleg", "fr": "Exemple", "it": "Esempio", "es": "Instancia", "pl": "Przykład", "uk": "Екземпляр", "zh-cn": "实例"},
|
|
51
|
-
"isSubmenu": { "en": "This is a Submenu!", "de": "Dies ist ein Untermenü!", "ru": "Это подменю!", "pt": "Este é um submenu!", "nl": "Dit is een submenu!", "fr": "Ceci est un sous-menu !", "it": "Questo è un sottomenu!", "es": "¡Este es un submenú!", "pl": "To jest podmenu!", "uk": "Це підменю!", "zh-cn": "这是一个子菜单!"},
|
|
52
57
|
"jsonShoppingList": { "en": "The same as above, but when you click on a button, the item will be deleted,the Key for the Items is `name:`, you can also add `time:`. <strong>Important!!!</strong> 'shoppinglist' may not be changed.", "de": "Das Gleiche wie oben, aber wenn Sie auf eine Schaltfläche klicken, wird das Element gelöscht. Der Schlüssel für die Elemente ist „Name:“, Sie können auch „Zeit:“ hinzufügen. <strong>Wichtig!!!</strong> 'Einkaufsliste' darf nicht geändert werden.", "ru": "То же, что и выше, но при нажатии на кнопку элемент будет удален. Ключом для элементов является `name:`, вы также можете добавить `time:`. <strong>Важно!!!</strong> «Список покупок» нельзя изменить.", "pt": "O mesmo que acima, mas quando você clica em um botão, o item será excluído, a chave para os itens é `nome:`, você também pode adicionar `tempo:`. <strong>Importante!!!</strong> 'lista de compras' não pode ser alterada.", "nl": "Hetzelfde als hierboven, maar wanneer u op een knop klikt, wordt het item verwijderd. De sleutel voor de items is `naam:`, u kunt ook `tijd:` toevoegen. <strong>Belangrijk!!!</strong> 'boodschappenlijstje' mag niet worden gewijzigd.", "fr": "Comme ci-dessus, mais lorsque vous cliquez sur un bouton, l'élément sera supprimé, la clé des éléments est « nom : », vous pouvez également ajouter « heure : ». <strong>Important !!!</strong> La « liste de courses » ne peut pas être modifiée.", "it": "Come sopra, ma quando fai clic su un pulsante, l'elemento verrà eliminato, la chiave per gli elementi è \"nome:\", puoi anche aggiungere \"ora:\". <strong>Importante!!!</strong> la 'lista della spesa' non può essere modificata.", "es": "Lo mismo que arriba, pero cuando haces clic en un botón, el elemento se eliminará. La clave para los elementos es \"nombre:\", también puedes agregar \"hora:\". <strong>¡¡¡Importante!!!</strong> La 'lista de compras' no se puede cambiar.", "pl": "To samo co powyżej, ale kiedy klikniesz przycisk, element zostanie usunięty, kluczem do pozycji jest „nazwa:”, możesz także dodać „czas:”. <strong>Ważne!!!</strong> „listy zakupów” nie można zmieniać.", "uk": "Те саме, що й вище, але коли ви натискаєте кнопку, елемент буде видалено, ключем для елементів є `name:`, ви також можете додати `time:`. <strong>Важливо!!!</strong> \"список покупок\" не можна змінювати.", "zh-cn": "与上面相同,但是当您单击按钮时,该项目将被删除,项目的 Key 是 `name:`,您也可以添加 `time:`。 <strong>重要!!!</strong>“购物清单”可能无法更改。"},
|
|
53
58
|
"jsonTable": { "en": "!!! To use it, parseMode must not be active !!! Creates a table from a JSON as Text-Table. The first value is one key of the JSON ,behind it is the name of the column. You can use more than two values.The header must be filled in. Don´t change TextTable.", "de": "!!! Um es zu verwenden, darf parseMode nicht aktiv sein!!! Erstellt eine Tabelle aus einem JSON als Texttabelle. Der erste Wert ist ein Schlüssel des JSON, dahinter steht der Name der Spalte. Sie können mehr als zwei Werte verwenden. Die Kopfzeile muss ausgefüllt sein. Ändern Sie TextTable nicht.", "ru": "!!! Чтобы его использовать, parseMode не должен быть активным!!! Создает таблицу из JSON в виде текстовой таблицы. Первое значение — это один ключ JSON, за ним — имя столбца. Вы можете использовать более двух значений. Заголовок должен быть заполнен. Не меняйте TextTable.", "pt": "!!! Para usá-lo, parseMode não deve estar ativo!!! Cria uma tabela a partir de um JSON como Text-Table. O primeiro valor é uma chave do JSON, atrás dele está o nome da coluna. Você pode usar mais de dois valores. O cabeçalho deve ser preenchido. Não altere TextTable.", "nl": "!!! Om het te gebruiken, mag parseMode niet actief zijn !!! Creëert een tabel van een JSON als teksttabel. De eerste waarde is één sleutel van de JSON, daarachter staat de naam van de kolom. U kunt meer dan twee waarden gebruiken. De header moet worden ingevuld. Wijzig de TextTable niet.", "fr": "!!! Pour l'utiliser, parseMode ne doit pas être actif !!! Crée une table à partir d'un JSON en tant que Text-Table. La première valeur est une clé du JSON, derrière elle se trouve le nom de la colonne. Vous pouvez utiliser plus de deux valeurs. L'en-tête doit être renseigné. Ne modifiez pas TextTable.", "it": "!!! Per usarlo, parseMode non deve essere attivo!!! Crea una tabella da un JSON come tabella di testo. Il primo valore è una chiave del JSON, dietro c'è il nome della colonna. Puoi utilizzare più di due valori. L'intestazione deve essere compilata. Non modificare TextTable.", "es": "!!! ¡Para usarlo, parseMode no debe estar activo! Crea una tabla a partir de un JSON como Text-Table. El primer valor es una clave del JSON, detrás está el nombre de la columna. Puede utilizar más de dos valores. El encabezado debe estar completo. No cambie TextTable.", "pl": "!!! Aby z niego skorzystać, parseMode nie może być aktywny !!! Tworzy tabelę z JSON jako tabelę tekstową. Pierwsza wartość to jeden klucz JSON, za nią znajduje się nazwa kolumny. Możesz użyć więcej niż dwóch wartości. Nagłówek musi być wypełniony. Nie zmieniaj TextTable.", "uk": "!!! Щоб використовувати його, parseMode не має бути активним !!! Створює таблицю з JSON як Text-Table. Перше значення – це один ключ JSON, а за ним – назва стовпця. Ви можете використовувати більше двох значень. Заголовок має бути заповнений. Не змінюйте TextTable.", "zh-cn": "!!!要使用它,parseMode 一定不能处于活动状态!从 JSON 创建一个表作为文本表。第一个值是 JSON 的一个键,后面是列的名称。您可以使用两个以上的值。必须填写标题。不要更改 TextTable。"},
|
|
54
59
|
"latitude": { "en": "Latitude", "de": "Breitengrad", "ru": "Широта", "pt": "Latitude", "nl": "Breedte", "fr": "Latitude", "it": "Latitudine", "es": "Latitud", "pl": "Szerokość", "uk": "Широта", "zh-cn": "纬度"},
|
|
@@ -59,6 +64,7 @@ systemDictionary = {
|
|
|
59
64
|
"math": { "en": "Converts the value, /10 can be replaced", "de": "Wandelt den Wert um, /10 kann ersetzt werden", "ru": "Преобразует значение, /10 можно заменить", "pt": "Converte o valor, /10 pode ser substituído", "nl": "Converteert de waarde, /10 kan worden vervangen", "fr": "Convertit la valeur, /10 peut être remplacé", "it": "Converte il valore, /10 può essere sostituito", "es": "Convierte el valor, /10 se puede reemplazar", "pl": "Konwertuje wartość, /10 można zastąpić", "uk": "Перетворює значення, /10 можна замінити", "zh-cn": "转换数值,/10可以替换"},
|
|
60
65
|
"menu": { "en": "Menu", "de": "Speisekarte", "ru": "Меню", "pt": "Menu", "nl": "Menu", "fr": "Menu", "it": "Menu", "es": "Menú", "pl": "Menu", "uk": "Меню", "zh-cn": "菜单"},
|
|
61
66
|
"menuBack": { "en": "When pressed, you jump back to the previous menu", "de": "Beim Drücken springen Sie zurück zum vorherigen Menü", "ru": "При нажатии вы возвращаетесь в предыдущее меню.", "pt": "Quando pressionado, você volta ao menu anterior", "nl": "Wanneer u hierop drukt, springt u terug naar het vorige menu", "fr": "Lorsque vous appuyez dessus, vous revenez au menu précédent", "it": "Quando viene premuto, si torna al menu precedente", "es": "Al pulsarlo saltas al menú anterior.", "pl": "Po naciśnięciu następuje powrót do poprzedniego menu", "uk": "При натисканні відбувається повернення до попереднього меню", "zh-cn": "当按下时,您跳回到上一个菜单"},
|
|
67
|
+
"menuCannotBeFound": { "en": "The clicked menu cannot be found!", "de": "Das angeklickte Menü kann nicht gefunden werden!", "ru": "Выбранное меню не может быть найдено!", "pt": "O menu clicado não pode ser encontrado!", "nl": "Het aangeklikte menu kan niet worden gevonden!", "fr": "Le menu cliqué est introuvable !", "it": "Impossibile trovare il menu cliccato!", "es": "¡No se puede encontrar el menú en el que se hizo clic!", "pl": "Nie można znaleźć klikniętego menu!", "uk": "Вибране меню не знайдено!", "zh-cn": "找不到点击的菜单!"},
|
|
62
68
|
"menuDeleteAll": { "en": "Generates a button to delete all messages from the bot. The navigation is optional. Simply leave it blank otherwise you can enter a menu that should be called up.", "de": "Erzeugt eine Schaltfläche zum Löschen aller Nachrichten vom Bot. Die Navigation ist optional. Lassen Sie es einfach leer, sonst können Sie ein Menü eingeben, das aufgerufen werden soll.", "ru": "Создает кнопку для удаления всех сообщений от бота. Навигация не является обязательной. Просто оставьте это поле пустым, иначе вы сможете войти в меню, которое необходимо вызвать.", "pt": "Gera um botão para excluir todas as mensagens do bot. A navegação é opcional. Simplesmente deixe em branco, caso contrário você poderá entrar em um menu que deve ser acessado.", "nl": "Genereert een knop om alle berichten van de bot te verwijderen. De navigatie is optioneel. Laat het gewoon leeg, anders komt u in een menu dat moet worden opgeroepen.", "fr": "Génère un bouton pour supprimer tous les messages du bot. La navigation est facultative. Laissez-le simplement vide, sinon vous pourrez accéder à un menu qui devrait être appelé.", "it": "Genera un pulsante per eliminare tutti i messaggi dal bot. La navigazione è facoltativa. Basta lasciarlo vuoto altrimenti si accede ad un menu da richiamare.", "es": "Genera un botón para eliminar todos los mensajes del bot. La navegación es opcional. Simplemente déjelo en blanco, de lo contrario podrá ingresar a un menú que debería abrirse.", "pl": "Generuje przycisk umożliwiający usunięcie wszystkich wiadomości od bota. Nawigacja jest opcjonalna. Po prostu pozostaw to pole puste, w przeciwnym razie możesz wejść do menu, które należy wywołać.", "uk": "Генерує кнопку для видалення всіх повідомлень від бота. Навігація необов'язкова. Просто залиште це поле порожнім, інакше ви зможете увійти в меню, яке слід викликати.", "zh-cn": "生成一个按钮以删除机器人中的所有消息。导航是可选的。只需将其留空,否则您可以输入应调用的菜单。"},
|
|
63
69
|
"menuDynamicSwitch": { "en": "Generates multiply buttons, values can be insert individual. Replace TRIGGER with a unique value. LengthOfRow is optional and can be used to set the number of buttons per row. <br><strong class='breakingChange'>Breaking Change!!!</strong> Please change manually: `[Name1:Value1, Name2:Value2]` to `[Name1|Value1, Name2|Value2]`. Decimal numbers can now also be used as values.", "de": "Erzeugt Multiplikationsschaltflächen, Werte können individuell eingegeben werden. Ersetzen Sie TRIGGER durch einen eindeutigen Wert. LengthOfRow ist optional und kann verwendet werden, um die Anzahl der Schaltflächen pro Zeile festzulegen. <br><strong class='breakingChange'>Breaking Change!!!</strong> Bitte ändern Sie manuell: „[Name1:Wert1, Name2:Wert2]“ in „[Name1|Wert1, Name2|Wert2]“. Als Werte können nun auch Dezimalzahlen verwendet werden.", "ru": "Генерирует кнопки умножения, значения можно вставлять индивидуально. Замените TRIGGER уникальным значением. ДлинаOfRow является необязательной и может использоваться для установки количества кнопок в строке. <br><strong class='breakingChange'>Критическое изменение!!!</strong> Измените вручную: `[Name1:Value1, Name2:Value2]` на `[Name1|Value1, Name2|Value2]`. Десятичные числа теперь также можно использовать в качестве значений.", "pt": "Gera botões de multiplicação, os valores podem ser inseridos individualmente. Substitua TRIGGER por um valor exclusivo. LengthOfRow é opcional e pode ser usado para definir o número de botões por linha. <br><strong class='breakingChange'>Alteração significativa!!!</strong> Altere manualmente: `[Nome1:Valor1, Nome2:Valor2]` para `[Nome1|Valor1, Nome2|Valor2]`. Os números decimais agora também podem ser usados como valores.", "nl": "Genereert vermenigvuldigingsknoppen, waarden kunnen individueel worden ingevoegd. Vervang TRIGGER door een unieke waarde. LengthOfRow is optioneel en kan worden gebruikt om het aantal knoppen per rij in te stellen. <br><strong class='breakingChange'>Breekbare wijziging!!!</strong> Wijzig handmatig: `[Naam1:Waarde1, Naam2:Waarde2]` in `[Naam1|Waarde1, Naam2|Waarde2]`. Decimale getallen kunnen nu ook als waarden worden gebruikt.", "fr": "Génère des boutons de multiplication, les valeurs peuvent être insérées individuellement. Remplacez TRIGGER par une valeur unique. LengthOfRow est facultatif et peut être utilisé pour définir le nombre de boutons par ligne. <br><strong class='breakingChange'>Rupture de changement !!!</strong> Veuillez remplacer manuellement : `[Name1:Value1, Name2:Value2]` par `[Name1|Value1, Name2|Value2]`. Les nombres décimaux peuvent désormais également être utilisés comme valeurs.", "it": "Genera pulsanti moltiplicativi, i valori possono essere inseriti individualmente. Sostituisci TRIGGER con un valore univoco. LengthOfRow è facoltativo e può essere utilizzato per impostare il numero di pulsanti per riga. <br><strong class='breakingChange'>Modifica rivoluzionaria!!!</strong> Modifica manualmente: `[Nome1:Valore1, Nome2:Valore2]` in `[Nome1|Valore1, Nome2|Valore2]`. I numeri decimali ora possono essere utilizzati anche come valori.", "es": "Genera botones de multiplicar, los valores se pueden insertar individualmente. Reemplace TRIGGER con un valor único. LongitudDeRow es opcional y se puede utilizar para establecer el número de botones por fila. <br><strong class='breakingChange'>¡¡¡Cambio importante!!!</strong> Cambie manualmente: `[Nombre1:Valor1, Nombre2:Valor2]` a `[Nombre1|Valor1, Nombre2|Valor2]`. Ahora también se pueden utilizar números decimales como valores.", "pl": "Generuje przyciski mnożenia, wartości można wstawiać indywidualnie. Zastąp TRIGGER unikalną wartością. DługośćOfRow jest opcjonalna i można jej użyć do ustawienia liczby przycisków w rzędzie. <br><strong class='breakingChange'>Przerywanie zmiany!!!</strong> Zmień ręcznie: `[Nazwa1:Wartość1, Nazwa2:Wartość2]` na `[Nazwa1|Wartość1, Nazwa2|Wartość2]`. Liczb dziesiętnych można teraz używać także jako wartości.", "uk": "Генерує кілька кнопок, значення можна вставляти окремо. Замініть TRIGGER на унікальне значення. LengthOfRow є необов’язковим і може використовуватися для встановлення кількості кнопок у рядку. <br><strong class='breakingChange'>Критова зміна!!!</strong> Змініть вручну: `[Name1:Value1, Name2:Value2]` на `[Name1|Value1, Name2|Value2]`. Десяткові числа тепер також можна використовувати як значення.", "zh-cn": "生成乘法按钮,可以单独插入值。将 TRIGGER 替换为唯一值。 LengthOfRow 是可选的,可用于设置每行的按钮数量。 <br><strong class='writingChange'>重大更改!!!</strong> 请手动将“[Name1:Value1, Name2:Value2]”更改为“[Name1|Value1, Name2|Value2]”。十进制数现在也可以用作值。"},
|
|
64
70
|
"menuList": { "en": "Menu list", "de": "Menüliste", "ru": "Список меню", "pt": "Lista de cardápios", "nl": "Menulijst", "fr": "Liste des menus", "it": "Elenco dei menù", "es": "Lista de menú", "pl": "Lista menu", "uk": "Список меню", "zh-cn": "菜单列表"},
|
|
@@ -111,7 +117,7 @@ systemDictionary = {
|
|
|
111
117
|
"text": { "en": "Text", "de": "Text", "ru": "Текст", "pt": "Texto", "nl": "Tekst", "fr": "Texte", "it": "Testo", "es": "Texto", "pl": "Tekst", "uk": "текст", "zh-cn": "文本"},
|
|
112
118
|
"textNoEntry": { "en": "Text will be send if no entry was found!", "de": "Text wird gesendet, wenn kein Eintrag gefunden wurde!", "ru": "Текст будет отправлен, если запись не найдена!", "pt": "O texto será enviado se nenhuma entrada for encontrada!", "nl": "Er wordt een sms verzonden als er geen invoer is gevonden!", "fr": "Un texte sera envoyé si aucune entrée n'a été trouvée !", "it": "Il testo verrà inviato se non viene trovata alcuna voce!", "es": "¡Se enviará un mensaje de texto si no se encontró ninguna entrada!", "pl": "W przypadku braku wpisu zostanie wysłany SMS!", "uk": "Текст буде надіслано, якщо запис не знайдено!", "zh-cn": "如果未找到条目,将发送文本!"},
|
|
113
119
|
"toggle": { "en": "Toggle", "de": "Umschalten", "ru": "Переключать", "pt": "Alternar", "nl": "Schakelaar", "fr": "Basculer", "it": "Attiva/disattiva", "es": "Palanca", "pl": "Dźwignia kolankowa", "uk": "Перемикач", "zh-cn": "切换"},
|
|
114
|
-
"trigger": { "en": "Trigger", "de": "
|
|
120
|
+
"trigger": { "en": "Trigger", "de": "Auslöser", "ru": "Курок", "pt": "Acionar", "nl": "Trekker", "fr": "Déclenchement", "it": "Grilletto", "es": "Desencadenar", "pl": "Spust", "uk": "Тригер", "zh-cn": "扳机"},
|
|
115
121
|
"tsTimestamp": { "en": "TimeStamp. Converts a Unix timestamp to a local time, the format can be changed, for example to DD.MM.YYYY YY hh:mm:ss:sss", "de": "Zeitstempel. Konvertiert einen Unix-Zeitstempel in eine lokale Zeit. Das Format kann geändert werden, beispielsweise in TT.MM.JJJJ JJ hh:mm:ss:sss", "ru": "Временная метка. Преобразует временную метку Unix в местное время, формат можно изменить, например, на ДД.ММ.ГГГГ ГГ чч:мм:сс:сс", "pt": "Carimbo de hora. Converte um carimbo de data/hora Unix em uma hora local, o formato pode ser alterado, por exemplo, para DD.MM.AAAA AA hh:mm:ss:sss", "nl": "Tijdstempel. Converteert een Unix-tijdstempel naar een lokale tijd, het formaat kan worden gewijzigd, bijvoorbeeld naar DD.MM.JJJJ JJ uu:mm:ss:sss", "fr": "Horodatage. Convertit un horodatage Unix en heure locale, le format peut être modifié, par exemple en DD.MM.YYYY YY hh:mm:ss:sss", "it": "Timestamp. Converte un timestamp Unix in un'ora locale, il formato può essere modificato, ad esempio in GG.MM.AAAA AA hh:mm:ss:sss", "es": "Marca de tiempo. Convierte una marca de tiempo de Unix a una hora local; el formato se puede cambiar, por ejemplo a DD.MM.AAAA AA hh:mm:ss:sss", "pl": "Znacznik czasu. Konwertuje znacznik czasu Uniksa na czas lokalny, format można zmienić na przykład na DD.MM.RRRR YY gg:mm:ss:sss", "uk": "TimeStamp. Перетворює мітку часу Unix на місцевий час, формат можна змінити, наприклад, на ДД.ММ.РРРР РР год:хх:сс:сс", "zh-cn": "时间戳。将 Unix 时间戳转换为本地时间,格式可以更改,例如 DD.MM.YYYY YY hh:mm:ss:sss"},
|
|
116
122
|
"unusedTrigger": { "en": "Unused Trigger", "de": "Unbenutzter Auslöser", "ru": "Неиспользованный триггер", "pt": "Gatilho não utilizado", "nl": "Ongebruikte trekker", "fr": "Déclencheur inutilisé", "it": "Grilletto non utilizzato", "es": "Gatillo no utilizado", "pl": "Nieużywany wyzwalacz", "uk": "Невикористаний тригер", "zh-cn": "未使用的触发器"},
|
|
117
123
|
"url": { "en": "URL", "de": "URL", "ru": "URL-адрес", "pt": "URL", "nl": "URL", "fr": "URL", "it": "URL", "es": "URL", "pl": "Adres URL", "uk": "URL", "zh-cn": "网址"},
|
|
@@ -123,5 +129,5 @@ systemDictionary = {
|
|
|
123
129
|
"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": "例如,将值四舍五入到小数点后两位"},
|
|
124
130
|
"values": { "en": "Values", "de": "Werte", "ru": "Ценности", "pt": "Valores", "nl": "Waarden", "fr": "Valeurs", "it": "Valori", "es": "Valores", "pl": "Wartości", "uk": "Цінності", "zh-cn": "价值观"},
|
|
125
131
|
"yes": { "en": "Yes", "de": "Ja", "ru": "Да", "pt": "Sim", "nl": "Ja", "fr": "Oui", "it": "SÌ", "es": "Sí", "pl": "Tak", "uk": "так", "zh-cn": "是的"},
|
|
126
|
-
"
|
|
132
|
+
"isSubmenu": { "en": "Submenu", "de": "Untermenü", "ru": "Это подменю!", "pt": "Este é um submenu!", "nl": "Dit is een submenu!", "fr": "Ceci est un sous-menu !", "it": "Questo è un sottomenu!", "es": "¡Este es un submenú!", "pl": "To jest podmenu!", "uk": "Це підменю!", "zh-cn": "这是一个子菜单!"},
|
|
127
133
|
};
|
package/build/lib/getstate.js
CHANGED
|
@@ -79,7 +79,8 @@ function getState(part, userToSend, telegramInstance, one_time_keyboard, resize_
|
|
|
79
79
|
}
|
|
80
80
|
await _this.getForeignStateAsync(id).then(async (value) => {
|
|
81
81
|
var _a2, _b2;
|
|
82
|
-
if (!value) {
|
|
82
|
+
if (!(0, import_global.isDefined)(value)) {
|
|
83
|
+
(0, import_logging.error)([{ text: "The state is empty!" }]);
|
|
83
84
|
return;
|
|
84
85
|
}
|
|
85
86
|
const valueForJson = ((_a2 = value.val) == null ? void 0 : _a2.toString()) || "";
|
|
@@ -197,11 +198,11 @@ function getState(part, userToSend, telegramInstance, one_time_keyboard, resize_
|
|
|
197
198
|
}
|
|
198
199
|
i++;
|
|
199
200
|
});
|
|
200
|
-
} catch (
|
|
201
|
-
|
|
201
|
+
} catch (error2) {
|
|
202
|
+
error2({
|
|
202
203
|
array: [
|
|
203
|
-
{ text: "Error GetData:", val:
|
|
204
|
-
{ text: "Stack:", val:
|
|
204
|
+
{ text: "Error GetData:", val: error2.message },
|
|
205
|
+
{ text: "Stack:", val: error2.stack }
|
|
205
206
|
]
|
|
206
207
|
});
|
|
207
208
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/getstate.ts"],
|
|
4
|
-
"sourcesContent": ["import { sendToTelegram, sendToTelegramSubmenu } from './telegram';\nimport { bindingFunc, roundValue, calcValue, idBySelector } from './action';\nimport { createKeyboardFromJson, createTextTableFromJson } from './jsonTable';\nimport { processTimeIdLc, processTimeValue, changeValue } from './utilities';\nimport { decomposeText } from './global';\nimport { debug } from './logging';\nimport TelegramMenu from '../main';\nimport type { Part, UserListWithChatId } from './telegram-menu';\n\nfunction getState(\n part: Part,\n userToSend: string,\n telegramInstance: string,\n one_time_keyboard: boolean,\n resize_keyboard: boolean,\n userListWithChatID: UserListWithChatId[],\n): void {\n const _this = TelegramMenu.getInstance();\n let text = '';\n let i = 1;\n // Parse Mode ist nur immer im ersten Element\n const parse_mode = part.getData?.[0].parse_mode || 'false';\n\n part.getData?.forEach(async element => {\n try {\n debug([{ text: 'Get Value ID:', val: element.id }]);\n const specifiedSelektor = 'functions=';\n const id = element.id;\n let textToSend = '';\n\n if (id.indexOf(specifiedSelektor) != -1) {\n await idBySelector(\n _this,\n id,\n element.text,\n userToSend,\n element.newline,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n );\n return;\n }\n\n if (element.text.includes('binding:')) {\n debug([{ text: 'Binding' }]);\n await bindingFunc(\n element.text,\n userToSend,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n return;\n }\n\n await _this.getForeignStateAsync(id).then(async (value: ioBroker.State | null | undefined) => {\n if (!value) {\n return;\n }\n const valueForJson: string = value.val?.toString() || '';\n debug([{ text: 'State:', val: value }]);\n\n let val: string | number = JSON.stringify(value.val);\n val = val.replace(/\\\\/g, '').replace(/\"/g, '');\n\n let newline = '';\n if (element.newline === 'true') {\n newline = '\\n';\n }\n if (element.text) {\n textToSend = element.text.toString();\n if (element.text.includes('{time.lc') || element.text.includes('{time.ts')) {\n textToSend = (await processTimeIdLc(element.text, id)) || '';\n val = '';\n }\n if (textToSend.includes('{time}')) {\n textToSend = processTimeValue(textToSend, value);\n val = '';\n }\n if (textToSend.includes('math:')) {\n const result = calcValue(_this, textToSend, val);\n if (result) {\n textToSend = result.textToSend;\n val = result.val;\n _this.log.debug(JSON.stringify({ textToSend: textToSend, val: val }));\n }\n }\n if (textToSend.includes('round:')) {\n const result = roundValue(val, textToSend);\n if (result) {\n _this.log.debug(\n `The Value was rounded ${JSON.stringify(val)} to ${JSON.stringify(result.val)}`,\n );\n val = result.val;\n textToSend = result.textToSend;\n }\n }\n if (textToSend.includes('{json')) {\n if (decomposeText(textToSend, '{json', '}').substring.includes('TextTable')) {\n const result = createTextTableFromJson(valueForJson, textToSend);\n if (result) {\n await sendToTelegram(\n userToSend,\n result,\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n return;\n }\n _this.log.debug('Cannot create a Text-Table');\n } else {\n const result = createKeyboardFromJson(valueForJson, textToSend, element.id, userToSend);\n if (valueForJson && valueForJson.length > 0) {\n if (result && result.text && result.keyboard) {\n sendToTelegramSubmenu(\n userToSend,\n result.text,\n result.keyboard,\n telegramInstance,\n userListWithChatID,\n parse_mode,\n );\n }\n return;\n }\n await sendToTelegram(\n userToSend,\n 'The state is empty!',\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n _this.log.debug('The state is empty!');\n return;\n }\n }\n\n const resultChange = changeValue(textToSend, val);\n\n if (resultChange) {\n debug([{ text: 'Value Changed to:', val: resultChange }]);\n val = resultChange.val;\n textToSend = resultChange.textToSend;\n } else {\n debug([{ text: 'No Change' }]);\n }\n if (textToSend.indexOf('&&') != -1) {\n text += `${textToSend.replace('&&', val.toString())}${newline}`;\n } else {\n text += `${textToSend} ${val}${newline}`;\n }\n } else {\n text += `${val} ${newline}`;\n }\n debug([{ text: 'Text:', val: text }]);\n\n if (i == part.getData?.length) {\n if (userToSend) {\n await sendToTelegram(\n userToSend,\n text,\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n }\n }\n i++;\n });\n } catch (error: any) {\n error({\n array: [\n { text: 'Error GetData:', val: error.message },\n { text: 'Stack:', val: error.stack },\n ],\n });\n }\n });\n}\n\nexport { getState };\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAsD;AACtD,oBAAiE;AACjE,uBAAgE;AAChE,uBAA+D;AAC/D,
|
|
6
|
-
"names": ["TelegramMenu", "_a", "_b"]
|
|
4
|
+
"sourcesContent": ["import { sendToTelegram, sendToTelegramSubmenu } from './telegram';\nimport { bindingFunc, roundValue, calcValue, idBySelector } from './action';\nimport { createKeyboardFromJson, createTextTableFromJson } from './jsonTable';\nimport { processTimeIdLc, processTimeValue, changeValue } from './utilities';\nimport { decomposeText, isDefined } from './global';\nimport { debug, error } from './logging';\nimport TelegramMenu from '../main';\nimport type { Part, UserListWithChatId } from './telegram-menu';\n\nfunction getState(\n part: Part,\n userToSend: string,\n telegramInstance: string,\n one_time_keyboard: boolean,\n resize_keyboard: boolean,\n userListWithChatID: UserListWithChatId[],\n): void {\n const _this = TelegramMenu.getInstance();\n let text = '';\n let i = 1;\n // Parse Mode ist nur immer im ersten Element\n const parse_mode = part.getData?.[0].parse_mode || 'false';\n\n part.getData?.forEach(async element => {\n try {\n debug([{ text: 'Get Value ID:', val: element.id }]);\n const specifiedSelektor = 'functions=';\n const id = element.id;\n let textToSend = '';\n\n if (id.indexOf(specifiedSelektor) != -1) {\n await idBySelector(\n _this,\n id,\n element.text,\n userToSend,\n element.newline,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n );\n return;\n }\n\n if (element.text.includes('binding:')) {\n debug([{ text: 'Binding' }]);\n await bindingFunc(\n element.text,\n userToSend,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n return;\n }\n\n await _this.getForeignStateAsync(id).then(async (value: ioBroker.State | null | undefined) => {\n if (!isDefined(value)) {\n error([{ text: 'The state is empty!' }]);\n return;\n }\n const valueForJson: string = value.val?.toString() || '';\n debug([{ text: 'State:', val: value }]);\n\n let val: string | number = JSON.stringify(value.val);\n val = val.replace(/\\\\/g, '').replace(/\"/g, '');\n\n let newline = '';\n if (element.newline === 'true') {\n newline = '\\n';\n }\n if (element.text) {\n textToSend = element.text.toString();\n if (element.text.includes('{time.lc') || element.text.includes('{time.ts')) {\n textToSend = (await processTimeIdLc(element.text, id)) || '';\n val = '';\n }\n if (textToSend.includes('{time}')) {\n textToSend = processTimeValue(textToSend, value);\n val = '';\n }\n if (textToSend.includes('math:')) {\n const result = calcValue(_this, textToSend, val);\n if (result) {\n textToSend = result.textToSend;\n val = result.val;\n _this.log.debug(JSON.stringify({ textToSend: textToSend, val: val }));\n }\n }\n if (textToSend.includes('round:')) {\n const result = roundValue(val, textToSend);\n if (result) {\n _this.log.debug(\n `The Value was rounded ${JSON.stringify(val)} to ${JSON.stringify(result.val)}`,\n );\n val = result.val;\n textToSend = result.textToSend;\n }\n }\n if (textToSend.includes('{json')) {\n if (decomposeText(textToSend, '{json', '}').substring.includes('TextTable')) {\n const result = createTextTableFromJson(valueForJson, textToSend);\n if (result) {\n await sendToTelegram(\n userToSend,\n result,\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n return;\n }\n _this.log.debug('Cannot create a Text-Table');\n } else {\n const result = createKeyboardFromJson(valueForJson, textToSend, element.id, userToSend);\n if (valueForJson && valueForJson.length > 0) {\n if (result && result.text && result.keyboard) {\n sendToTelegramSubmenu(\n userToSend,\n result.text,\n result.keyboard,\n telegramInstance,\n userListWithChatID,\n parse_mode,\n );\n }\n return;\n }\n await sendToTelegram(\n userToSend,\n 'The state is empty!',\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n _this.log.debug('The state is empty!');\n return;\n }\n }\n\n const resultChange = changeValue(textToSend, val);\n\n if (resultChange) {\n debug([{ text: 'Value Changed to:', val: resultChange }]);\n val = resultChange.val;\n textToSend = resultChange.textToSend;\n } else {\n debug([{ text: 'No Change' }]);\n }\n if (textToSend.indexOf('&&') != -1) {\n text += `${textToSend.replace('&&', val.toString())}${newline}`;\n } else {\n text += `${textToSend} ${val}${newline}`;\n }\n } else {\n text += `${val} ${newline}`;\n }\n debug([{ text: 'Text:', val: text }]);\n\n if (i == part.getData?.length) {\n if (userToSend) {\n await sendToTelegram(\n userToSend,\n text,\n undefined,\n telegramInstance,\n one_time_keyboard,\n resize_keyboard,\n userListWithChatID,\n parse_mode,\n );\n }\n }\n i++;\n });\n } catch (error: any) {\n error({\n array: [\n { text: 'Error GetData:', val: error.message },\n { text: 'Stack:', val: error.stack },\n ],\n });\n }\n });\n}\n\nexport { getState };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["TelegramMenu", "_a", "_b", "error"]
|
|
7
7
|
}
|
package/build/lib/global.js
CHANGED
|
@@ -31,12 +31,9 @@ __export(global_exports, {
|
|
|
31
31
|
});
|
|
32
32
|
module.exports = __toCommonJS(global_exports);
|
|
33
33
|
var import_logging = require("./logging");
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
function replaceAll(text, searchValue, replaceValue) {
|
|
38
|
-
return text.replace(new RegExp(searchValue, "g"), replaceValue);
|
|
39
|
-
}
|
|
34
|
+
const isDefined = (value) => value !== void 0 && value !== null;
|
|
35
|
+
const deleteDoubleEntriesInArray = (arr) => arr.filter((item, index) => arr.indexOf(item) === index);
|
|
36
|
+
const replaceAll = (text, searchValue, replaceValue) => text.replace(new RegExp(searchValue, "g"), replaceValue);
|
|
40
37
|
function isJSON(_string) {
|
|
41
38
|
try {
|
|
42
39
|
JSON.parse(_string);
|
|
@@ -65,18 +62,9 @@ const deepCopy = (obj) => {
|
|
|
65
62
|
console.error(`Error deepCopy: ${JSON.stringify(err)}`);
|
|
66
63
|
}
|
|
67
64
|
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
function isTruthy(value) {
|
|
72
|
-
return value === "1" || value === 1 || value === true || value === "true";
|
|
73
|
-
}
|
|
74
|
-
function isFalsy(value) {
|
|
75
|
-
return ["0", 0, false, "false", void 0, null].includes(value);
|
|
76
|
-
}
|
|
77
|
-
function isDefined(value) {
|
|
78
|
-
return value !== null && value !== void 0;
|
|
79
|
-
}
|
|
65
|
+
const isString = (value) => typeof value === "string";
|
|
66
|
+
const isTruthy = (value) => ["1", 1, true, "true"].includes(value);
|
|
67
|
+
const isFalsy = (value) => ["0", 0, false, "false", void 0, null].includes(value);
|
|
80
68
|
function checkDirectoryIsOk(directory) {
|
|
81
69
|
if (["", null, void 0].includes(directory)) {
|
|
82
70
|
(0, import_logging.error)([
|
package/build/lib/global.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/global.ts"],
|
|
4
|
-
"sourcesContent": ["import type { DecomposeText } from './telegram-menu';\nimport { error } from './logging';\n\
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAsB;
|
|
4
|
+
"sourcesContent": ["import type { DecomposeText } from './telegram-menu';\nimport { error } from './logging';\n\nexport const isDefined = <T>(value: T | undefined | null): value is T => value !== undefined && value !== null;\n\nexport const deleteDoubleEntriesInArray = (arr: string[]): string[] =>\n arr.filter((item, index) => arr.indexOf(item) === index);\n\nexport const replaceAll = (text: string, searchValue: string, replaceValue: string): string =>\n text.replace(new RegExp(searchValue, 'g'), replaceValue);\n\nexport function isJSON(_string: string): boolean {\n try {\n JSON.parse(_string);\n return true;\n } catch (error) {\n console.error([{ text: 'Error:', val: error }]);\n return false;\n }\n}\n\nexport function decomposeText(text: string, searchValue: string, secondValue: string): DecomposeText {\n const startindex = text.indexOf(searchValue);\n const endindex = text.indexOf(secondValue, startindex);\n const substring = text.substring(startindex, endindex + secondValue.length);\n const textWithoutSubstring = text.replace(substring, '').trim();\n return {\n startindex: startindex,\n endindex: endindex,\n substring: substring,\n textWithoutSubstring: textWithoutSubstring,\n };\n}\n\nexport const deepCopy = <T>(obj: T): T | undefined => {\n try {\n return JSON.parse(JSON.stringify(obj));\n } catch (err) {\n console.error(`Error deepCopy: ${JSON.stringify(err)}`);\n }\n};\n\nexport const isString = (value: unknown): value is string => typeof value === 'string';\n\nexport const isTruthy = (value: string | number | boolean): boolean => ['1', 1, true, 'true'].includes(value);\n\nexport const isFalsy = (value: string | number | boolean | undefined | null): boolean =>\n ['0', 0, false, 'false', undefined, null].includes(value);\n\nexport function checkDirectoryIsOk(directory: string): boolean {\n if (['', null, undefined].includes(directory)) {\n error([\n {\n text: 'Error:',\n val: 'No directory to save the picture. Please add a directory in the settings with full read and write permissions.',\n },\n ]);\n return false;\n }\n return true;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,qBAAsB;AAEf,MAAM,YAAY,CAAI,UAA4C,UAAU,UAAa,UAAU;AAEnG,MAAM,6BAA6B,CAAC,QACvC,IAAI,OAAO,CAAC,MAAM,UAAU,IAAI,QAAQ,IAAI,MAAM,KAAK;AAEpD,MAAM,aAAa,CAAC,MAAc,aAAqB,iBAC1D,KAAK,QAAQ,IAAI,OAAO,aAAa,GAAG,GAAG,YAAY;AAEpD,SAAS,OAAO,SAA0B;AAC7C,MAAI;AACA,SAAK,MAAM,OAAO;AAClB,WAAO;AAAA,EACX,SAASA,QAAO;AACZ,YAAQ,MAAM,CAAC,EAAE,MAAM,UAAU,KAAKA,OAAM,CAAC,CAAC;AAC9C,WAAO;AAAA,EACX;AACJ;AAEO,SAAS,cAAc,MAAc,aAAqB,aAAoC;AACjG,QAAM,aAAa,KAAK,QAAQ,WAAW;AAC3C,QAAM,WAAW,KAAK,QAAQ,aAAa,UAAU;AACrD,QAAM,YAAY,KAAK,UAAU,YAAY,WAAW,YAAY,MAAM;AAC1E,QAAM,uBAAuB,KAAK,QAAQ,WAAW,EAAE,EAAE,KAAK;AAC9D,SAAO;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ;AACJ;AAEO,MAAM,WAAW,CAAI,QAA0B;AAClD,MAAI;AACA,WAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AAAA,EACzC,SAAS,KAAK;AACV,YAAQ,MAAM,mBAAmB,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,EAC1D;AACJ;AAEO,MAAM,WAAW,CAAC,UAAoC,OAAO,UAAU;AAEvE,MAAM,WAAW,CAAC,UAA8C,CAAC,KAAK,GAAG,MAAM,MAAM,EAAE,SAAS,KAAK;AAErG,MAAM,UAAU,CAAC,UACpB,CAAC,KAAK,GAAG,OAAO,SAAS,QAAW,IAAI,EAAE,SAAS,KAAK;AAErD,SAAS,mBAAmB,WAA4B;AAC3D,MAAI,CAAC,IAAI,MAAM,MAAS,EAAE,SAAS,SAAS,GAAG;AAC3C,8BAAM;AAAA,MACF;AAAA,QACI,MAAM;AAAA,QACN,KAAK;AAAA,MACT;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AACA,SAAO;AACX;",
|
|
6
6
|
"names": ["error"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var string_exports = {};
|
|
20
|
+
__export(string_exports, {
|
|
21
|
+
isDefined: () => isDefined
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(string_exports);
|
|
24
|
+
const isDefined = (value) => value !== void 0 && value !== null;
|
|
25
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
+
0 && (module.exports = {
|
|
27
|
+
isDefined
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=string.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/lib/string.ts"],
|
|
4
|
+
"sourcesContent": ["export const isDefined = <T>(value: T | undefined | null): value is T => value !== undefined && value !== null;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,YAAY,CAAI,UAA4C,UAAU,UAAa,UAAU;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/build/lib/utilities.js
CHANGED
|
@@ -43,20 +43,22 @@ var import_main = __toESM(require("../main"));
|
|
|
43
43
|
var import_global = require("./global");
|
|
44
44
|
var import_logging = require("./logging");
|
|
45
45
|
const processTimeValue = (textToSend, obj) => {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
const date = Number(obj.val);
|
|
47
|
+
if (!(0, import_global.isDefined)(date)) {
|
|
48
|
+
return textToSend;
|
|
49
|
+
}
|
|
50
|
+
const time = new Date(date);
|
|
51
|
+
if (isNaN(time.getTime())) {
|
|
52
|
+
(0, import_logging.error)([{ text: "Invalid Date:", val: date }]);
|
|
49
53
|
return textToSend;
|
|
50
54
|
}
|
|
51
|
-
const time = new Date(string);
|
|
52
55
|
const timeString = time.toLocaleDateString("de-DE", {
|
|
53
56
|
hour: "2-digit",
|
|
54
57
|
minute: "2-digit",
|
|
55
58
|
second: "2-digit",
|
|
56
59
|
hour12: false
|
|
57
60
|
});
|
|
58
|
-
|
|
59
|
-
return textToSend;
|
|
61
|
+
return textToSend.replace("{time}", timeString);
|
|
60
62
|
};
|
|
61
63
|
const getChatID = (userListWithChatID, user) => {
|
|
62
64
|
let chatId = "";
|