iobroker.telegram-menu 2.1.9 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +13 -2
  2. package/admin/build/index.js +68 -68
  3. package/admin/build/index.js.map +4 -4
  4. package/admin/css/button.css +1 -1
  5. package/admin/css/custom_classes.css +116 -0
  6. package/admin/css/description.css +29 -0
  7. package/admin/css/style.css +85 -36
  8. package/admin/css/textarea.css +22 -20
  9. package/admin/i18n/de/translations.json +10 -3
  10. package/admin/i18n/en/translations.json +122 -115
  11. package/admin/i18n/es/translations.json +8 -1
  12. package/admin/i18n/fr/translations.json +8 -1
  13. package/admin/i18n/it/translations.json +8 -1
  14. package/admin/i18n/nl/translations.json +8 -1
  15. package/admin/i18n/pl/translations.json +8 -1
  16. package/admin/i18n/pt/translations.json +8 -1
  17. package/admin/i18n/ru/translations.json +8 -1
  18. package/admin/i18n/uk/translations.json +8 -1
  19. package/admin/i18n/zh-cn/translations.json +8 -1
  20. package/admin/words.js +6 -5
  21. package/build/lib/action.js +1 -1
  22. package/build/lib/action.js.map +1 -1
  23. package/build/lib/echarts.js +8 -4
  24. package/build/lib/echarts.js.map +2 -2
  25. package/build/lib/global.js +32 -2
  26. package/build/lib/global.js.map +3 -3
  27. package/build/lib/httpRequest.js +10 -5
  28. package/build/lib/httpRequest.js.map +2 -2
  29. package/build/lib/processData.js +1 -1
  30. package/build/lib/processData.js.map +2 -2
  31. package/build/lib/sendNav.js +1 -1
  32. package/build/lib/sendNav.js.map +1 -1
  33. package/build/lib/sendpic.js +6 -2
  34. package/build/lib/sendpic.js.map +2 -2
  35. package/build/lib/telegram.js +3 -1
  36. package/build/lib/telegram.js.map +2 -2
  37. package/build/main.js +31 -14
  38. package/build/main.js.map +2 -2
  39. package/io-package.json +28 -28
  40. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/telegram.ts"],
4
- "sourcesContent": ["import { debug, error } from './logging';\nimport { newLine, getChatID, checkStatusInfo } from './utilities';\nimport TelegramMenu from '../main';\nimport type { NavPart, UserListWithChatId, BooleanString, ParseModeType, Location } from './telegram-menu';\n\nasync function sendToTelegram(\n user = '',\n textToSend: string,\n keyboard: NavPart = [],\n instance = 'telegram.0',\n resize_keyboard = true,\n one_time_keyboard = true,\n userListWithChatID: UserListWithChatId[],\n parse_mode: BooleanString | '',\n): Promise<void> {\n try {\n const _this = TelegramMenu.getInstance();\n const chatId = getChatID(userListWithChatID, user);\n const parse_modeType: ParseModeType = getParseMode(parse_mode);\n debug([\n { text: `Send to: ${user} => ${textToSend}` },\n { text: 'Instance:', val: instance },\n { text: 'UserListWithChatID\t:', val: userListWithChatID },\n { text: 'Parse_mode\t:', val: parse_mode },\n { text: 'ChatId\t:', val: chatId },\n { text: 'ParseModeType:', val: parse_modeType },\n ]);\n\n textToSend = newLine(textToSend);\n if (keyboard.length == 0) {\n _this.sendTo(\n instance,\n 'send',\n {\n text: textToSend,\n chatId: chatId,\n parse_mode: parse_modeType,\n },\n function (res: any) {\n _this.log.debug(`Sent Value to ${JSON.stringify(res)} users!`);\n },\n );\n } else {\n const text = await checkStatusInfo(textToSend);\n _this.sendTo(\n instance,\n 'send',\n {\n chatId: chatId,\n parse_mode: parse_modeType,\n text: text,\n reply_markup: {\n keyboard: keyboard,\n resize_keyboard: resize_keyboard,\n one_time_keyboard: one_time_keyboard,\n },\n },\n function (res: any) {\n debug([{ text: `Sent Value to ${res} users!` }]);\n },\n );\n }\n } catch (e: any) {\n error([\n { text: 'Error sendToTelegram:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nfunction sendToTelegramSubmenu(\n user: string,\n textToSend: string,\n keyboard: string,\n instance = 'telegram.0',\n userListWithChatID: UserListWithChatId[],\n parse_mode: BooleanString,\n): void {\n const _this = TelegramMenu.getInstance();\n const parseModeType = getParseMode(parse_mode);\n debug([{ text: 'Send this ParseMode:', val: parseModeType }]);\n try {\n const chatId = getChatID(userListWithChatID, user);\n textToSend = newLine(textToSend);\n _this.sendTo(instance, 'send', {\n chatId: chatId,\n parse_mode: parseModeType,\n text: textToSend,\n reply_markup: keyboard,\n });\n } catch (e: any) {\n error([\n { text: 'Error sendToTelegramSubmenu:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nconst sendLocationToTelegram = async (\n user: string,\n data: Location[],\n instance: string,\n userListWithChatID: UserListWithChatId[],\n): Promise<void> => {\n const _this = TelegramMenu.getInstance();\n try {\n const chatId = getChatID(userListWithChatID, user);\n for (const element of data) {\n if (!(element.latitude || element.longitude)) {\n continue;\n }\n\n const latitude = await _this.getForeignStateAsync(element.latitude);\n const longitude = await _this.getForeignStateAsync(element.longitude);\n if (!latitude || !longitude) {\n continue;\n }\n _this.sendTo(instance, {\n chatId: chatId,\n latitude: latitude.val,\n longitude: longitude.val,\n disable_notification: true,\n });\n }\n } catch (e: any) {\n error([\n { text: 'Error sendLocationToTelegram:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\n\nfunction getParseMode(val: BooleanString | boolean | ''): ParseModeType {\n if (val === 'true' || val === true) {\n return 'HTML';\n }\n return 'Markdown';\n}\n\nexport { sendToTelegram, sendToTelegramSubmenu, sendLocationToTelegram };\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { debug, error } from './logging';\nimport { newLine, getChatID, checkStatusInfo } from './utilities';\nimport TelegramMenu from '../main';\nimport type { NavPart, UserListWithChatId, BooleanString, ParseModeType, Location } from './telegram-menu';\nimport { isTruthy } from './global';\n\nasync function sendToTelegram(\n user = '',\n textToSend: string,\n keyboard: NavPart = [],\n instance = 'telegram.0',\n resize_keyboard = true,\n one_time_keyboard = true,\n userListWithChatID: UserListWithChatId[],\n parse_mode: BooleanString,\n): Promise<void> {\n try {\n const _this = TelegramMenu.getInstance();\n const chatId = getChatID(userListWithChatID, user);\n const parse_modeType: ParseModeType = getParseMode(parse_mode);\n debug([\n { text: `Send to: ${user} => ${textToSend}` },\n { text: 'Instance:', val: instance },\n { text: 'UserListWithChatID\t:', val: userListWithChatID },\n { text: 'Parse_mode\t:', val: parse_mode },\n { text: 'ChatId\t:', val: chatId },\n { text: 'ParseModeType:', val: parse_modeType },\n ]);\n\n textToSend = newLine(textToSend);\n if (keyboard.length == 0) {\n _this.log.debug('No Keyboard');\n _this.sendTo(\n instance,\n 'send',\n {\n text: textToSend,\n chatId: chatId,\n parse_mode: parse_modeType,\n },\n function (res: any) {\n _this.log.debug(`Sent Value to ${JSON.stringify(res)} users!`);\n },\n );\n } else {\n const text = await checkStatusInfo(textToSend);\n _this.sendTo(\n instance,\n 'send',\n {\n chatId: chatId,\n parse_mode: parse_modeType,\n text: text,\n reply_markup: {\n keyboard: keyboard,\n resize_keyboard: resize_keyboard,\n one_time_keyboard: one_time_keyboard,\n },\n },\n function (res: any) {\n debug([{ text: `Sent Value to ${res} users!` }]);\n },\n );\n }\n } catch (e: any) {\n error([\n { text: 'Error sendToTelegram:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nfunction sendToTelegramSubmenu(\n user: string,\n textToSend: string,\n keyboard: string,\n instance = 'telegram.0',\n userListWithChatID: UserListWithChatId[],\n parse_mode: BooleanString,\n): void {\n const _this = TelegramMenu.getInstance();\n const parseModeType = getParseMode(parse_mode);\n debug([{ text: 'Send this ParseMode:', val: parseModeType }]);\n try {\n const chatId = getChatID(userListWithChatID, user);\n textToSend = newLine(textToSend);\n _this.sendTo(instance, 'send', {\n chatId: chatId,\n parse_mode: parseModeType,\n text: textToSend,\n reply_markup: keyboard,\n });\n } catch (e: any) {\n error([\n { text: 'Error sendToTelegramSubmenu:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nconst sendLocationToTelegram = async (\n user: string,\n data: Location[],\n instance: string,\n userListWithChatID: UserListWithChatId[],\n): Promise<void> => {\n const _this = TelegramMenu.getInstance();\n try {\n const chatId = getChatID(userListWithChatID, user);\n for (const element of data) {\n if (!(element.latitude || element.longitude)) {\n continue;\n }\n\n const latitude = await _this.getForeignStateAsync(element.latitude);\n const longitude = await _this.getForeignStateAsync(element.longitude);\n if (!latitude || !longitude) {\n continue;\n }\n _this.sendTo(instance, {\n chatId: chatId,\n latitude: latitude.val,\n longitude: longitude.val,\n disable_notification: true,\n });\n }\n } catch (e: any) {\n error([\n { text: 'Error sendLocationToTelegram:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\n\nfunction getParseMode(val: BooleanString | boolean): ParseModeType {\n if (isTruthy(val)) {\n return 'HTML';\n }\n return 'Markdown';\n}\n\nexport { sendToTelegram, sendToTelegramSubmenu, sendLocationToTelegram };\n"],
5
+ "mappings": "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",
6
6
  "names": ["TelegramMenu"]
7
7
  }
package/build/main.js CHANGED
@@ -234,26 +234,37 @@ class TelegramMenu extends utils.Adapter {
234
234
  resize_keyboard,
235
235
  one_time_keyboard,
236
236
  userListWithChatID,
237
- ""
237
+ "false"
238
238
  );
239
239
  }
240
240
  return;
241
241
  }
242
242
  if (state && setStateIdsToListenTo && setStateIdsToListenTo.find((element) => element.id == id)) {
243
- (0, import_logging.debug)([{ text: "State, which is listen to was changed:", val: id }]);
243
+ (0, import_logging.debug)([
244
+ { text: "State, which is listen to was changed:", val: id },
245
+ { text: "State:", val: state }
246
+ ]);
244
247
  setStateIdsToListenTo.forEach((element, key) => {
245
248
  var _a, _b;
246
249
  if (element.id == id) {
247
- (0, import_logging.debug)([{ text: "Send Value:", val: element }]);
248
- if (element.confirm != "false" && !(state == null ? void 0 : state.ack) && element.returnText.includes("{confirmSet:")) {
250
+ (0, import_logging.debug)([
251
+ { text: "Send Value:", val: element },
252
+ { text: "Ack:", val: state.ack }
253
+ ]);
254
+ if (!(0, import_global.isFalsy)(element.confirm) && !(state == null ? void 0 : state.ack) && element.returnText.includes("{confirmSet:")) {
249
255
  const substring = (0, import_utilities.decomposeText)(
250
256
  element.returnText,
251
257
  "{confirmSet:",
252
258
  "}"
253
259
  ).substring.split(":");
260
+ (0, import_logging.debug)([{ text: "Substring:", val: substring }]);
254
261
  let text = "";
255
- if (state.val) {
256
- text = substring[2] && substring[2].includes("noValue") ? substring[1] : (0, import_action.exchangePlaceholderWithValue)(substring[1], state.val);
262
+ if ((0, import_global.isDefined)(state.val)) {
263
+ text = substring[2] && substring[2].includes("noValue") ? substring[1] : (0, import_action.exchangePlaceholderWithValue)(substring[1], state.val.toString());
264
+ }
265
+ (0, import_logging.debug)([{ text: "Return-text:", val: text }]);
266
+ if (text === "") {
267
+ (0, import_logging.error)([{ text: "The return text cannot be empty, please check." }]);
257
268
  }
258
269
  (0, import_telegram.sendToTelegram)(
259
270
  element.userToSend,
@@ -273,15 +284,20 @@ class TelegramMenu extends utils.Adapter {
273
284
  });
274
285
  return;
275
286
  }
276
- if (element.confirm != "false" && (state == null ? void 0 : state.ack)) {
277
- (0, import_logging.debug)([{ text: "User:", val: element.userToSend }]);
287
+ (0, import_logging.debug)([
288
+ {
289
+ text: "Data: ",
290
+ val: { confirm: element.confirm, ack: state == null ? void 0 : state.ack, val: state == null ? void 0 : state.val }
291
+ }
292
+ ]);
293
+ if (!(0, import_global.isFalsy)(element.confirm) && (state == null ? void 0 : state.ack)) {
278
294
  let textToSend = element.returnText;
279
295
  if (textToSend.includes("{confirmSet:")) {
280
296
  const substring = (0, import_utilities.decomposeText)(textToSend, "{confirmSet:", "}").substring;
281
297
  textToSend = textToSend.replace(substring, "");
282
298
  }
283
299
  let value = "";
284
- let valueChange = "";
300
+ let valueChange = null;
285
301
  const resultChange = (0, import_utilities.changeValue)(textToSend, ((_a = state.val) == null ? void 0 : _a.toString()) || "");
286
302
  if (resultChange) {
287
303
  valueChange = resultChange.val;
@@ -290,10 +306,13 @@ class TelegramMenu extends utils.Adapter {
290
306
  if (textToSend == null ? void 0 : textToSend.toString().includes("{novalue}")) {
291
307
  value = "";
292
308
  textToSend = textToSend.replace("{novalue}", "");
293
- } else if ((state == null ? void 0 : state.val) == false) {
294
- value = (_b = state.val) == null ? void 0 : _b.toString();
309
+ } else if ((0, import_global.isDefined)(state == null ? void 0 : state.val)) {
310
+ value = ((_b = state.val) == null ? void 0 : _b.toString()) || "";
311
+ }
312
+ if (valueChange) {
313
+ value = valueChange;
295
314
  }
296
- valueChange ? value = valueChange : value;
315
+ (0, import_logging.debug)([{ text: "Value to send:", val: value }]);
297
316
  textToSend = (0, import_action.exchangePlaceholderWithValue)(textToSend, value);
298
317
  (0, import_telegram.sendToTelegram)(
299
318
  element.userToSend,
@@ -334,7 +353,6 @@ class TelegramMenu extends utils.Adapter {
334
353
  return !!(id.includes("alexa-shoppinglist") && !id.includes("add_position") && userToSend);
335
354
  }
336
355
  isMenuToSend(state, id, telegramID, userToSend) {
337
- this.log.debug(`User in Abfrage: ${userToSend}`);
338
356
  return !!(state && typeof state.val === "string" && state.val != "" && id == telegramID && (state == null ? void 0 : state.ack) && userToSend);
339
357
  }
340
358
  async checkInfoConnection(id, infoConnectionOfTelegram) {
@@ -355,7 +373,6 @@ class TelegramMenu extends utils.Adapter {
355
373
  return;
356
374
  }
357
375
  const userToSend = (0, import_action.getUserToSendFromUserListWithChatID)(userListWithChatID, chatID.val.toString());
358
- this.log.debug(JSON.stringify(`User to send: ${userToSend}`));
359
376
  if (!userToSend) {
360
377
  this.log.debug("User to send not found");
361
378
  return;
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 {\n generateActions,\n generateNewObjectStructure,\n editArrayButtons,\n getUserToSendFromUserListWithChatID,\n getMenusWithUserToSend,\n exchangePlaceholderWithValue,\n checkEvent,\n} from './lib/action.js';\nimport { _subscribeForeignStatesAsync } from './lib/subscribeStates.js';\nimport { sendToTelegram } from './lib/telegram.js';\nimport { decomposeText, changeValue } from './lib/utilities.js';\nimport { createState } from './lib/createState.js';\nimport { saveMessageIds } from './lib/messageIds.js';\nimport { adapterStartMenuSend } from './lib/adapterStartMenuSend.js';\nimport { getStateIdsToListenTo, checkEveryMenuForData, getTimeouts } from './lib/processData.js';\nimport { shoppingListSubscribeStateAndDeleteItem, deleteMessageAndSendNewShoppingList } from './lib/shoppingList.js';\nimport { debug, error } from './lib/logging.js';\n\nimport type {\n Checkboxes,\n ListOfMenus,\n IsUserActiveCheckbox,\n MenusWithUsers,\n UserListWithChatId,\n DataObject,\n StartSides,\n MenuData,\n GeneratedActions,\n SetStateIds,\n NewObjectNavStructureKey,\n} from './lib/telegram-menu.js';\nimport type { BooleanString } from '@/types/app.js';\nimport { checkIsTelegramActive } from './lib/connection.js';\nimport { isString } from './lib/global';\n\nconst timeoutKey = '0';\nlet subscribeForeignStateIds: string[];\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 public static getInstance(): TelegramMenu {\n return TelegramMenu.instance;\n }\n\n private async onReady(): Promise<void> {\n await this.setState('info.connection', false, true);\n await createState(this);\n\n let instanceTelegram: string = this.config.instance;\n if (!instanceTelegram || instanceTelegram.length == 0) {\n instanceTelegram = 'telegram.0';\n }\n const telegramID = `${instanceTelegram}.communicate.request`;\n const botSendMessageID = `${instanceTelegram}.communicate.botSendMessageId`;\n const requestMessageID = `${instanceTelegram}.communicate.requestMessageId`;\n const infoConnectionOfTelegram = `${instanceTelegram}.info.connection`;\n\n const checkboxes: Checkboxes = this.config.checkbox as Checkboxes;\n const one_time_keyboard: boolean = checkboxes.oneTiKey;\n const resize_keyboard: boolean = checkboxes.resKey;\n const checkboxNoEntryFound: boolean = checkboxes.checkboxNoValueFound;\n const sendMenuAfterRestart: boolean = checkboxes.sendMenuAfterRestart;\n let listOfMenus: ListOfMenus = [];\n if (this.config.usersInGroup) {\n listOfMenus = Object.keys(this.config.usersInGroup);\n }\n const token = this.config.tokenGrafana;\n const directoryPicture: string = this.config.directory;\n const isUserActiveCheckbox: IsUserActiveCheckbox = this.config.userActiveCheckbox;\n const menusWithUsers: MenusWithUsers = this.config.usersInGroup;\n const textNoEntryFound: string = this.config.textNoEntry;\n const userListWithChatID: UserListWithChatId[] = this.config.userListWithChatID;\n const dataObject: DataObject = this.config.data as DataObject;\n const startSides: StartSides = {};\n\n const menuData: MenuData = {\n data: {},\n } as MenuData;\n\n Object.keys(menusWithUsers).forEach(element => {\n startSides[element] = dataObject.nav[element][0].call;\n });\n\n await this.getForeignObject(infoConnectionOfTelegram, async (err, obj) => {\n try {\n if (err || obj == null) {\n this.log.error(`The State ${infoConnectionOfTelegram} was not found! ${err}`);\n return;\n }\n\n const isTelegramActive = await checkIsTelegramActive(infoConnectionOfTelegram);\n if (!isTelegramActive) {\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 value = editArrayButtons(nav[name], this);\n\n const newObjectStructure = generateNewObjectStructure(value);\n if (newObjectStructure) {\n menuData.data[name] = newObjectStructure;\n }\n\n const generatedActions: GeneratedActions | undefined = generateActions(\n action[name],\n menuData.data[name],\n );\n if (generatedActions) {\n menuData.data[name] = generatedActions?.obj;\n subscribeForeignStateIds = generatedActions?.ids;\n } else {\n debug([{ text: 'No Actions generated!' }]);\n }\n\n if (subscribeForeignStateIds && subscribeForeignStateIds?.length > 0) {\n await _subscribeForeignStatesAsync(subscribeForeignStateIds);\n } else {\n debug([{ text: 'Nothing to Subscribe!' }]);\n }\n\n // Subscribe Events\n if (dataObject.action[name] && dataObject.action[name].events) {\n for (const event of dataObject.action[name].events) {\n await _subscribeForeignStatesAsync([event.ID]);\n }\n }\n debug([\n { text: 'Menu: ', val: name },\n { text: 'Array Buttons: ', val: value },\n { text: 'Gen. Actions: ', val: menuData.data[name] },\n ]);\n }\n debug([\n { text: 'Checkbox', val: checkboxes },\n { text: 'MenuList', val: listOfMenus },\n ]);\n\n if (sendMenuAfterRestart) {\n await adapterStartMenuSend(\n listOfMenus,\n startSides,\n isUserActiveCheckbox,\n menusWithUsers,\n menuData,\n userListWithChatID,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n );\n }\n\n this.on('stateChange', async (id, state) => {\n const setStateIdsToListenTo: SetStateIds[] = getStateIdsToListenTo();\n\n const isActive = await this.checkInfoConnection(id, infoConnectionOfTelegram);\n if (!isActive) {\n return;\n }\n\n const obj = await this.getChatIDAndUserToSend(instanceTelegram, userListWithChatID);\n if (!obj) {\n return;\n }\n\n const { userToSend } = obj;\n\n if (isString(state?.val) && state.val.includes('sList:')) {\n await shoppingListSubscribeStateAndDeleteItem(\n state.val,\n instanceTelegram,\n userListWithChatID,\n resize_keyboard,\n one_time_keyboard,\n );\n\n return;\n }\n\n if (this.isAddToShoppingList(id, userToSend)) {\n await deleteMessageAndSendNewShoppingList(instanceTelegram, userListWithChatID, userToSend);\n return;\n }\n\n if (\n state &&\n (await checkEvent(\n dataObject,\n id,\n state,\n menuData,\n userListWithChatID,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n menusWithUsers,\n ))\n ) {\n return;\n }\n\n if (this.isMessageID(id, botSendMessageID, requestMessageID) && state) {\n await saveMessageIds(state, instanceTelegram);\n } else if (this.isMenuToSend(state, id, telegramID, userToSend)) {\n let value = state?.val;\n if (!value || !userToSend) {\n return;\n }\n\n value = value.toString();\n const calledValue = value.slice(value.indexOf(']') + 1, value.length);\n const menus: NewObjectNavStructureKey[] = getMenusWithUserToSend(menusWithUsers, userToSend);\n\n const dataFound = await checkEveryMenuForData({\n menuData,\n calledValue,\n userToSend,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n\n debug([\n { text: 'Groups with searched User:', val: menus },\n { text: 'Data found:', val: dataFound },\n ]);\n\n if (!dataFound && checkboxNoEntryFound && userToSend) {\n debug([{ text: 'No Entry found' }]);\n await sendToTelegram(\n userToSend,\n textNoEntryFound,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n '',\n );\n }\n return;\n }\n if (\n state &&\n setStateIdsToListenTo &&\n setStateIdsToListenTo.find((element: { id: string }) => element.id == id)\n ) {\n debug([{ text: 'State, which is listen to was changed:', val: id }]);\n\n setStateIdsToListenTo.forEach((element, key: number) => {\n if (element.id == id) {\n debug([{ text: 'Send Value:', val: element }]);\n\n if (\n element.confirm != 'false' &&\n !state?.ack &&\n element.returnText.includes('{confirmSet:')\n ) {\n const substring = decomposeText(\n element.returnText,\n '{confirmSet:',\n '}',\n ).substring.split(':');\n let text = '';\n if (state.val) {\n text =\n substring[2] && substring[2].includes('noValue')\n ? substring[1]\n : exchangePlaceholderWithValue(substring[1], state.val as string);\n }\n\n sendToTelegram(\n element.userToSend,\n text,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n element.parse_mode as BooleanString,\n ).catch((e: { message: any; stack: any }) => {\n error([\n { text: 'Error SendToTelegram' },\n { val: e.message },\n { text: 'Error', val: e.stack },\n ]);\n });\n return;\n }\n if (element.confirm != 'false' && state?.ack) {\n debug([{ text: 'User:', val: element.userToSend }]);\n let textToSend = element.returnText;\n\n if (textToSend.includes('{confirmSet:')) {\n const substring = decomposeText(textToSend, '{confirmSet:', '}').substring;\n textToSend = textToSend.replace(substring, '');\n }\n\n let value: string | number = '';\n let valueChange: string | number = '';\n const resultChange = changeValue(textToSend, state.val?.toString() || '');\n if (resultChange) {\n valueChange = resultChange.val;\n textToSend = resultChange.textToSend;\n }\n\n if (textToSend?.toString().includes('{novalue}')) {\n value = '';\n textToSend = textToSend.replace('{novalue}', '');\n } else if (state?.val == false) {\n value = state.val?.toString();\n }\n\n valueChange ? (value = valueChange) : value;\n textToSend = exchangePlaceholderWithValue(textToSend, value);\n\n sendToTelegram(\n element.userToSend,\n textToSend,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n element.parse_mode as BooleanString,\n ).catch((e: { message: any; stack: any }) => {\n error([\n { text: 'Error sendToTelegram' },\n { val: e.message },\n { text: 'Error', val: e.stack },\n ]);\n });\n\n setStateIdsToListenTo.splice(key, 1);\n }\n }\n });\n }\n });\n } catch (e: any) {\n error([{ text: 'Error onReady' }, { val: e.message }, { text: 'Error', val: e.stack }]);\n }\n });\n\n await this.subscribeForeignStatesAsync(botSendMessageID);\n await this.subscribeForeignStatesAsync(requestMessageID);\n await this.subscribeForeignStatesAsync(`${instanceTelegram}.communicate.requestChatId`);\n await this.subscribeForeignStatesAsync(telegramID);\n await this.subscribeForeignStatesAsync(`${instanceTelegram}.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 this.log.debug(`User in Abfrage: ${userToSend}`);\n\n return !!(\n state &&\n typeof state.val === 'string' &&\n state.val != '' &&\n id == telegramID &&\n state?.ack &&\n userToSend\n );\n }\n\n private async checkInfoConnection(id: string, infoConnectionOfTelegram: string): Promise<boolean> {\n if (id === infoConnectionOfTelegram) {\n const isActive = await checkIsTelegramActive(infoConnectionOfTelegram);\n if (!isActive) {\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 instanceTelegram: string,\n userListWithChatID: UserListWithChatId[],\n ): Promise<{ chatID: string; userToSend: string } | undefined> {\n const chatID = await this.getForeignStateAsync(`${instanceTelegram}.communicate.requestChatId`);\n\n if (!chatID?.val) {\n debug([{ text: 'ChatID not found' }]);\n return;\n }\n\n const userToSend = getUserToSendFromUserListWithChatID(userListWithChatID, chatID.val.toString());\n this.log.debug(JSON.stringify(`User to send: ${userToSend}`));\n if (!userToSend) {\n this.log.debug('User to send not found');\n return;\n }\n return { chatID: chatID.val.toString(), userToSend };\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((element: { timeout: string | number | NodeJS.Timeout | undefined }) => {\n clearTimeout(element.timeout);\n });\n\n callback();\n } catch (e: any) {\n this.log.error(`Error onUnload ${e}`);\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\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) =>\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 {\n checkEvent,\n editArrayButtons,\n exchangePlaceholderWithValue,\n generateActions,\n generateNewObjectStructure,\n getMenusWithUserToSend,\n getUserToSendFromUserListWithChatID,\n} from './lib/action.js';\nimport { _subscribeForeignStatesAsync } from './lib/subscribeStates.js';\nimport { sendToTelegram } from './lib/telegram.js';\nimport { changeValue, decomposeText } from './lib/utilities.js';\nimport { createState } from './lib/createState.js';\nimport { saveMessageIds } from './lib/messageIds.js';\nimport { adapterStartMenuSend } from './lib/adapterStartMenuSend.js';\nimport { checkEveryMenuForData, getStateIdsToListenTo, getTimeouts } from './lib/processData.js';\nimport { deleteMessageAndSendNewShoppingList, shoppingListSubscribeStateAndDeleteItem } from './lib/shoppingList.js';\nimport { debug, error } from './lib/logging.js';\n\nimport type {\n Checkboxes,\n DataObject,\n GeneratedActions,\n IsUserActiveCheckbox,\n ListOfMenus,\n MenuData,\n MenusWithUsers,\n NewObjectNavStructureKey,\n SetStateIds,\n StartSides,\n UserListWithChatId,\n} from './lib/telegram-menu.js';\nimport type { BooleanString } from '@/types/app.js';\nimport { checkIsTelegramActive } from './lib/connection.js';\nimport { isDefined, isFalsy, isString } from './lib/global';\n\nconst timeoutKey = '0';\nlet subscribeForeignStateIds: string[];\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 public static getInstance(): TelegramMenu {\n return TelegramMenu.instance;\n }\n\n private async onReady(): Promise<void> {\n await this.setState('info.connection', false, true);\n await createState(this);\n\n let instanceTelegram: string = this.config.instance;\n if (!instanceTelegram || instanceTelegram.length == 0) {\n instanceTelegram = 'telegram.0';\n }\n const telegramID = `${instanceTelegram}.communicate.request`;\n const botSendMessageID = `${instanceTelegram}.communicate.botSendMessageId`;\n const requestMessageID = `${instanceTelegram}.communicate.requestMessageId`;\n const infoConnectionOfTelegram = `${instanceTelegram}.info.connection`;\n\n const checkboxes: Checkboxes = this.config.checkbox as Checkboxes;\n const one_time_keyboard: boolean = checkboxes.oneTiKey;\n const resize_keyboard: boolean = checkboxes.resKey;\n const checkboxNoEntryFound: boolean = checkboxes.checkboxNoValueFound;\n const sendMenuAfterRestart: boolean = checkboxes.sendMenuAfterRestart;\n let listOfMenus: ListOfMenus = [];\n if (this.config.usersInGroup) {\n listOfMenus = Object.keys(this.config.usersInGroup);\n }\n const token = this.config.tokenGrafana;\n const directoryPicture: string = this.config.directory;\n const isUserActiveCheckbox: IsUserActiveCheckbox = this.config.userActiveCheckbox;\n const menusWithUsers: MenusWithUsers = this.config.usersInGroup;\n const textNoEntryFound: string = this.config.textNoEntry;\n const userListWithChatID: UserListWithChatId[] = this.config.userListWithChatID;\n const dataObject: DataObject = this.config.data as DataObject;\n const startSides: StartSides = {};\n\n const menuData: MenuData = {\n data: {},\n } as MenuData;\n\n Object.keys(menusWithUsers).forEach(element => {\n startSides[element] = dataObject.nav[element][0].call;\n });\n\n await this.getForeignObject(infoConnectionOfTelegram, async (err, obj) => {\n try {\n if (err || obj == null) {\n this.log.error(`The State ${infoConnectionOfTelegram} was not found! ${err}`);\n return;\n }\n\n const isTelegramActive = await checkIsTelegramActive(infoConnectionOfTelegram);\n if (!isTelegramActive) {\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 value = editArrayButtons(nav[name], this);\n\n const newObjectStructure = generateNewObjectStructure(value);\n if (newObjectStructure) {\n menuData.data[name] = newObjectStructure;\n }\n\n const generatedActions: GeneratedActions | undefined = generateActions(\n action[name],\n menuData.data[name],\n );\n if (generatedActions) {\n menuData.data[name] = generatedActions?.obj;\n subscribeForeignStateIds = generatedActions?.ids;\n } else {\n debug([{ text: 'No Actions generated!' }]);\n }\n\n if (subscribeForeignStateIds && subscribeForeignStateIds?.length > 0) {\n await _subscribeForeignStatesAsync(subscribeForeignStateIds);\n } else {\n debug([{ text: 'Nothing to Subscribe!' }]);\n }\n\n // Subscribe Events\n if (dataObject.action[name] && dataObject.action[name].events) {\n for (const event of dataObject.action[name].events) {\n await _subscribeForeignStatesAsync([event.ID]);\n }\n }\n debug([\n { text: 'Menu: ', val: name },\n { text: 'Array Buttons: ', val: value },\n { text: 'Gen. Actions: ', val: menuData.data[name] },\n ]);\n }\n debug([\n { text: 'Checkbox', val: checkboxes },\n { text: 'MenuList', val: listOfMenus },\n ]);\n\n if (sendMenuAfterRestart) {\n await adapterStartMenuSend(\n listOfMenus,\n startSides,\n isUserActiveCheckbox,\n menusWithUsers,\n menuData,\n userListWithChatID,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n );\n }\n\n this.on('stateChange', async (id, state) => {\n const setStateIdsToListenTo: SetStateIds[] = getStateIdsToListenTo();\n\n const isActive = await this.checkInfoConnection(id, infoConnectionOfTelegram);\n if (!isActive) {\n return;\n }\n\n const obj = await this.getChatIDAndUserToSend(instanceTelegram, userListWithChatID);\n if (!obj) {\n return;\n }\n\n const { userToSend } = obj;\n\n if (isString(state?.val) && state.val.includes('sList:')) {\n await shoppingListSubscribeStateAndDeleteItem(\n state.val,\n instanceTelegram,\n userListWithChatID,\n resize_keyboard,\n one_time_keyboard,\n );\n\n return;\n }\n\n if (this.isAddToShoppingList(id, userToSend)) {\n await deleteMessageAndSendNewShoppingList(instanceTelegram, userListWithChatID, userToSend);\n return;\n }\n\n if (\n state &&\n (await checkEvent(\n dataObject,\n id,\n state,\n menuData,\n userListWithChatID,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n menusWithUsers,\n ))\n ) {\n return;\n }\n\n if (this.isMessageID(id, botSendMessageID, requestMessageID) && state) {\n await saveMessageIds(state, instanceTelegram);\n } else if (this.isMenuToSend(state, id, telegramID, userToSend)) {\n let value = state?.val;\n if (!value || !userToSend) {\n return;\n }\n\n value = value.toString();\n const calledValue = value.slice(value.indexOf(']') + 1, value.length);\n const menus: NewObjectNavStructureKey[] = getMenusWithUserToSend(menusWithUsers, userToSend);\n\n const dataFound = await checkEveryMenuForData({\n menuData,\n calledValue,\n userToSend,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n menus,\n isUserActiveCheckbox,\n token,\n directoryPicture,\n timeoutKey,\n });\n\n debug([\n { text: 'Groups with searched User:', val: menus },\n { text: 'Data found:', val: dataFound },\n ]);\n\n if (!dataFound && checkboxNoEntryFound && userToSend) {\n debug([{ text: 'No Entry found' }]);\n await sendToTelegram(\n userToSend,\n textNoEntryFound,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n 'false',\n );\n }\n return;\n }\n if (\n state &&\n setStateIdsToListenTo &&\n setStateIdsToListenTo.find((element: { id: string }) => element.id == id)\n ) {\n debug([\n { text: 'State, which is listen to was changed:', val: id },\n { text: 'State:', val: state },\n ]);\n\n setStateIdsToListenTo.forEach((element, key: number) => {\n if (element.id == id) {\n debug([\n { text: 'Send Value:', val: element },\n { text: 'Ack:', val: state.ack },\n ]);\n\n if (\n !isFalsy(element.confirm) &&\n !state?.ack &&\n element.returnText.includes('{confirmSet:')\n ) {\n const substring = decomposeText(\n element.returnText,\n '{confirmSet:',\n '}',\n ).substring.split(':');\n debug([{ text: 'Substring:', val: substring }]);\n let text = '';\n if (isDefined(state.val)) {\n text =\n substring[2] && substring[2].includes('noValue')\n ? substring[1]\n : exchangePlaceholderWithValue(substring[1], state.val.toString());\n }\n debug([{ text: 'Return-text:', val: text }]);\n\n if (text === '') {\n error([{ text: 'The return text cannot be empty, please check.' }]);\n }\n\n sendToTelegram(\n element.userToSend,\n text,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n element.parse_mode as BooleanString,\n ).catch((e: { message: any; stack: any }) => {\n error([\n { text: 'Error SendToTelegram' },\n { val: e.message },\n { text: 'Error', val: e.stack },\n ]);\n });\n return;\n }\n debug([\n {\n text: 'Data: ',\n val: { confirm: element.confirm, ack: state?.ack, val: state?.val },\n },\n ]);\n if (!isFalsy(element.confirm) && state?.ack) {\n let textToSend = element.returnText;\n\n if (textToSend.includes('{confirmSet:')) {\n const substring = decomposeText(textToSend, '{confirmSet:', '}').substring;\n textToSend = textToSend.replace(substring, '');\n }\n\n let value: string | number = '';\n let valueChange: string | number | null = null;\n const resultChange = changeValue(textToSend, state.val?.toString() || '');\n if (resultChange) {\n valueChange = resultChange.val;\n textToSend = resultChange.textToSend;\n }\n\n if (textToSend?.toString().includes('{novalue}')) {\n value = '';\n textToSend = textToSend.replace('{novalue}', '');\n } else if (isDefined(state?.val)) {\n value = state.val?.toString() || '';\n }\n if (valueChange) {\n value = valueChange;\n }\n\n debug([{ text: 'Value to send:', val: value }]);\n textToSend = exchangePlaceholderWithValue(textToSend, value);\n\n sendToTelegram(\n element.userToSend,\n textToSend,\n undefined,\n instanceTelegram,\n resize_keyboard,\n one_time_keyboard,\n userListWithChatID,\n element.parse_mode as BooleanString,\n ).catch((e: { message: any; stack: any }) => {\n error([\n { text: 'Error sendToTelegram' },\n { val: e.message },\n { text: 'Error', val: e.stack },\n ]);\n });\n\n setStateIdsToListenTo.splice(key, 1);\n }\n }\n });\n }\n });\n } catch (e: any) {\n error([{ text: 'Error onReady' }, { val: e.message }, { text: 'Error', val: e.stack }]);\n }\n });\n\n await this.subscribeForeignStatesAsync(botSendMessageID);\n await this.subscribeForeignStatesAsync(requestMessageID);\n await this.subscribeForeignStatesAsync(`${instanceTelegram}.communicate.requestChatId`);\n await this.subscribeForeignStatesAsync(telegramID);\n await this.subscribeForeignStatesAsync(`${instanceTelegram}.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 !!(\n state &&\n typeof state.val === 'string' &&\n state.val != '' &&\n id == telegramID &&\n state?.ack &&\n userToSend\n );\n }\n\n private async checkInfoConnection(id: string, infoConnectionOfTelegram: string): Promise<boolean> {\n if (id === infoConnectionOfTelegram) {\n const isActive = await checkIsTelegramActive(infoConnectionOfTelegram);\n if (!isActive) {\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 instanceTelegram: string,\n userListWithChatID: UserListWithChatId[],\n ): Promise<{ chatID: string; userToSend: string } | undefined> {\n const chatID = await this.getForeignStateAsync(`${instanceTelegram}.communicate.requestChatId`);\n\n if (!chatID?.val) {\n debug([{ text: 'ChatID not found' }]);\n return;\n }\n\n const userToSend = getUserToSendFromUserListWithChatID(userListWithChatID, chatID.val.toString());\n if (!userToSend) {\n this.log.debug('User to send not found');\n return;\n }\n return { chatID: chatID.val.toString(), userToSend };\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((element: { timeout: string | number | NodeJS.Timeout | undefined }) => {\n clearTimeout(element.timeout);\n });\n\n callback();\n } catch (e: any) {\n this.log.error(`Error onUnload ${e}`);\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\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) =>\n new TelegramMenu(options);\n} else {\n // otherwise start the instance directly\n new TelegramMenu();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["obj"]
7
7
  }
package/io-package.json CHANGED
@@ -1,22 +1,35 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "telegram-menu",
4
- "version": "2.1.9",
4
+ "version": "2.2.0",
5
5
  "news": {
6
- "2.1.9": {
7
- "en": "FIX: #224 Submenu trigger",
8
- "de": "FIX: #224 Submenu Trigger",
9
- "ru": "FIX: #224",
10
- "pt": "FIX: #224 Submenu gatilho",
11
- "nl": "FIX: #224 Submenu-starter",
12
- "fr": "FIXE: Déclencheur du sous-menu #224",
13
- "it": "FIX: #224 Submenu trigger",
14
- "es": "FIX: #224 El gatillo Submenu",
15
- "pl": "FIX: # 224 Uruchom podmenu",
16
- "uk": "FIX: #224 Запобігання підменю",
17
- "zh-cn": "FIX: # 224 子菜单触发器"
6
+ "2.2.0": {
7
+ "en": "FEAT: #237 Navigate by nav-button-click to action\nFIX: Cannot get value false in return text\nFIX: Delete row in Actions\nFIX: HttpRequest\nFEAT: Navigation styling and selectable menus",
8
+ "de": "FEAT: #237 Navigieren Sie mit nav-button-klick auf Aktion\nFIX: Kann nicht Wert falsch im Rückgabetext erhalten\nFIX: Zeile in Aktion löschen\nFIX: HttpRequest\nFEAT: Navigations-Styling und wählbare Menüs",
9
+ "ru": "FEAT: #237 Навигай на навигай-кнопкой мыши к действию\nFIX: не может получить значение ложное в ответном тексте\nFIX: Исключить строку в действии\nFIX: HttpRequest\nFEAT: Навигационный стиль и подбираемые меню",
10
+ "pt": "FEAT: #237 Navegue por nav-button-clique para ação\nFIX: Não pode obter valor falso em texto de retorno\nFIX: Excluir linha em Ações\nFIX: HttpRequest\nFEAT: Estilo de navegação e menus selecionáveis",
11
+ "nl": "FEAT: #237 Navigeren met nav-knop-klik op actie\nFIX: kan waarde niet foutief krijgen in de terugzendingstekst\nFIX: rij in acties verwijderen\nFIX: HttpRequest\nFEAT: Navigatie styling en selecteerbare menu's",
12
+ "fr": "FEAT: #237 Naviguez par nav-bouton-cliquez vers l'action\nFIX: Impossible d'obtenir la valeur false dans le texte de retour\nFIX: Supprimer la ligne dans Actions\nDemande Http\nFEAT: Style de navigation et menus sélectionnables",
13
+ "it": "FEAT: #237 Navigare da nav-button-click all'azione\nFIX: Non può ottenere valore falso nel testo di ritorno\nFIX: Elimina la riga in Azioni\nFIX: HttpRequest\nFEAT: menu di navigazione e selezionabili",
14
+ "es": "FEAT: #237 Navigate by nav-button-click to action\nFIX: No se puede obtener valor falso en el texto de retorno\nFIX: Eliminar fila en Acciones\nFIX: HtpRequest\nFEAT: Estilismo de navegación y menús seleccionables",
15
+ "pl": "FEAT: # 237\nFIX: Nie można uzyskać wartości false w zwrotnym tekście\nFIX: Usuń wiersz w działaniach\nFIX: HttpRequest\nFEAT: Stylizacja nawigacyjna i menu do wyboru",
16
+ "uk": "FEAT: #237 Нейгат від nav-button-click до дії\nFIX: Неможливо отримати значення помилково в поверненні тексту\nFIX: Видалити ряд в дії\nFIX: HttpRequest\nFEAT: Налаштування навігації та вибіркові меню",
17
+ "zh-cn": "FEAT: # 237 导航通过导航按钮点击动作\nFIX: 无法在返回文本中获取错误值\nFIX: 删除动作中的行\nFIX: Http 请求\nFEAT:导航样式和可选菜单"
18
18
  },
19
- "2.1.8": {
19
+ "2.1.10": {
20
+ "en": "FIX: Return text for menus was not send",
21
+ "de": "FIX: Rückgabetext für Menüs wurde nicht gesendet",
22
+ "ru": "FIX: Возвращаемый текст для меню не был отправлен",
23
+ "pt": "FIX: O texto de retorno para menus não foi enviado",
24
+ "nl": "FIX: Retourtekst voor menu's is niet verstuurd",
25
+ "fr": "FIX: Retour de texte pour les menus n'a pas été envoyé",
26
+ "it": "FIX: Il testo di ritorno per i menu non è stato inviato",
27
+ "es": "FIX: El texto devuelto para los menús no fue enviado",
28
+ "pl": "FIX: Tekst zwrotny dla menu nie został wysłany",
29
+ "uk": "FIX: Повернути текст для меню не відправлено",
30
+ "zh-cn": "FIX: 菜单的返回文本没有发送"
31
+ },
32
+ "2.1.9": {
20
33
  "en": "FIX: #224 Submenu trigger",
21
34
  "de": "FIX: #224 Submenu Trigger",
22
35
  "ru": "FIX: #224",
@@ -80,19 +93,6 @@
80
93
  "pl": "FIX: # 203 Przewijanie w tabeli",
81
94
  "uk": "FIX: #203 Прокручування в таблиці",
82
95
  "zh-cn": "FIX: # 203 在表格中滚动"
83
- },
84
- "2.1.3": {
85
- "en": "FIX: User checkbox error message\nFEAT: #194 Styling",
86
- "de": "FIX: Benutzer-Checkbox Fehlermeldung\nFEAT: #194 Styling",
87
- "ru": "FIX: Сообщение об ошибке в флажке пользователя\n#194 Стиль",
88
- "pt": "FIX: Mensagem de erro da caixa de seleção do usuário\nFEAT: #194 Styling",
89
- "nl": "FIX: foutmelding gebruikerscontrolevak\n#194 Styling",
90
- "fr": "FIX: Message d'erreur de la case à cocher\nVIANDE: #194 Styling",
91
- "it": "FIX: messaggio di errore della casella di controllo utente\nFEAT: #194 Styling",
92
- "es": "FIX: Mensaje de error de la casilla de verificación del usuario\nFEAT: #194 Styling",
93
- "pl": "FIX: Komunikat błędu w polu wyboru użytkownika\nFEAT: # 194 Styling",
94
- "uk": "FIX: Повідомлення про помилку користувача\nFEAT: #194 Стилування",
95
- "zh-cn": "FIX: 用户复选框错误消息\nFEAT: #194 时尚"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -291,7 +291,7 @@
291
291
  "users": [],
292
292
  "startsides": [],
293
293
  "tokenGrafana": "",
294
- "directory": "",
294
+ "directory": "/opt/iobroker/media",
295
295
  "userActiveCheckbox": {},
296
296
  "usersInGroup": {},
297
297
  "textNoEntry": "",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.telegram-menu",
3
- "version": "2.1.9",
3
+ "version": "2.2.0",
4
4
  "description": "Easily create Telegram Menus",
5
5
  "author": {
6
6
  "name": "MiRo1310",