iobroker.telegram-menu 2.2.1 → 2.2.2

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.
@@ -27,47 +27,23 @@
27
27
  "module-alias": "^2.2.3"
28
28
  },
29
29
  "devDependencies": {
30
- "@alcalzone/release-script": "^3.7.0",
31
- "@alcalzone/release-script-plugin-iobroker": "^3.7.0",
32
- "@alcalzone/release-script-plugin-license": "^3.7.0",
33
- "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
34
30
  "@emotion/react": "^11.11.4",
35
31
  "@emotion/styled": "^11.11.0",
36
32
  "@iobroker/adapter-dev": "^1.2.0",
37
- "@iobroker/adapter-react-v5": "^6.1.8",
38
- "@iobroker/testing": "^4.1.3",
39
- "@mui/icons-material": "^5.15.7",
40
- "@mui/lab": "^5.0.0-alpha.166",
41
- "@mui/material": "^5.15.14",
42
- "@mui/styled-engine-sc": "^6.0.0-alpha.17",
43
- "@mui/styles": "^5.14.16",
33
+ "@iobroker/adapter-react-v5": "^7.6.2",
34
+ "@iobroker/eslint-config": "^2.0.1",
35
+ "@mui/icons-material": "^6.4.8",
36
+ "@mui/lab": "^6.0.0-beta.31",
37
+ "@mui/material": "^6.4.8",
44
38
  "@tsconfig/node20": "^20.1.4",
45
- "@types/chai": "^4.3.14",
46
- "@types/chai-as-promised": "^7.1.8",
47
- "@types/glob": "^8.1.0",
48
- "@types/mocha": "^10.0.6",
49
- "@types/node": "^20.12.7",
50
- "@types/proxyquire": "^1.3.31",
51
- "@types/react": "^17.0.80",
52
- "@types/react-dom": "^17.0.25",
53
- "@types/sinon": "^17.0.3",
54
- "@types/sinon-chai": "^3.2.12",
55
- "chai": "^4.4.1",
56
- "chai-as-promised": "^7.1.1",
57
-
58
- "fs": "0.0.1-security",
59
- "inquirer": "^9.2.17",
60
- "json5": "^2.2.3",
39
+ "@types/react": "^19.0.11",
40
+ "@types/react-dom": "^19.0.4",
61
41
  "mocha": "^10.3.0",
62
42
  "prettier": "^3.2.5",
63
- "proxyquire": "^2.1.3",
64
- "react": "^17.0.2",
65
- "react-dom": "^17.0.2",
66
- "sinon": "^17.0.1",
67
- "sinon-chai": "^3.7.0",
68
- "styled-components": "^6.1.9",
69
- "ts-node": "^10.9.2",
70
- "typescript": "~5.3.3"
43
+ "react": "^19.0.0",
44
+ "react-dom": "^19.0.0",
45
+ "typescript": "~5.7.3",
46
+ "rimraf": "^3.0.2"
71
47
  },
72
48
  "main": "build/src/main.js",
73
49
  "files": [
@@ -251,7 +251,7 @@ const checkStatusInfo = async (text) => {
251
251
  if (text.includes("{status:")) {
252
252
  while (text.includes("{status:")) {
253
253
  const result = await checkStatus(text, processTimeValue);
254
- text = (result == null ? void 0 : result.toString()) || "";
254
+ text = result ? JSON.stringify(result) : "";
255
255
  }
256
256
  }
257
257
  if (text.includes("{time.lc") || text.includes("{time.ts")) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/utilities.ts"],
4
- "sourcesContent": ["import TelegramMenu from '../main';\nimport { isDefined, isJSON, replaceAll } from './global';\nimport { debug, error } from './logging';\nimport type { UserListWithChatId, ProzessTimeValue } from './telegram-menu';\n\nconst processTimeValue = (textToSend: string, obj: ioBroker.State): string => {\n const date = Number(obj.val);\n\n if (!isDefined(date)) {\n return textToSend;\n }\n const time = new Date(date);\n if (isNaN(time.getTime())) {\n error([{ text: 'Invalid Date:', val: date }]);\n return textToSend;\n }\n const timeString = time.toLocaleDateString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n return textToSend.replace('{time}', timeString);\n};\n\nconst getChatID = (userListWithChatID: UserListWithChatId[], user: string): string => {\n let chatId = '';\n userListWithChatID.forEach(element => {\n if (element.name === user) {\n chatId = element.chatID;\n }\n });\n return chatId;\n};\nconst exchangeValue = (\n textToSend: string,\n stateVal: string | number | boolean,\n): { valueChange: string; textToSend: string } | boolean => {\n const { startindex, endindex } = decomposeText(textToSend, 'change{', '}');\n\n let match = textToSend.substring(startindex + 'change'.length + 1, textToSend.indexOf('}', startindex));\n\n let objChangeValue;\n match = match.replace(/'/g, '\"');\n\n if (isJSON(`{${match}}`)) {\n objChangeValue = JSON.parse(`{${match}}`);\n } else {\n error([{ text: `There is a error in your input:`, val: replaceAll(match, '\"', \"'\") }]);\n return false;\n }\n\n let newValue;\n objChangeValue[String(stateVal)] ? (newValue = objChangeValue[String(stateVal)]) : (newValue = stateVal);\n return {\n valueChange: newValue,\n textToSend: textToSend.substring(0, startindex) + textToSend.substring(endindex + 1),\n };\n};\n\nfunction decomposeText(\n text: string,\n searchValue: string,\n secondValue: string,\n): { startindex: number; endindex: number; substring: string; textWithoutSubstring: string } {\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\nfunction changeValue(\n textToSend: string,\n val: string | number | boolean,\n): { textToSend: string; val: string | number } | undefined {\n if (textToSend.includes('change{')) {\n const result = exchangeValue(textToSend, val);\n if (!result) {\n return;\n }\n if (typeof result === 'boolean') {\n return;\n }\n return { textToSend: result.textToSend, val: result.valueChange };\n }\n}\n\nconst processTimeIdLc = async (textToSend: string, id: string | null): Promise<string | undefined> => {\n const _this = TelegramMenu.getInstance();\n\n let key = '';\n const { substring } = decomposeText(textToSend, '{time.', '}');\n const array = substring.split(',');\n let changedSubstring = substring;\n changedSubstring = changedSubstring.replace(array[0], '');\n\n if (array[0].includes('lc')) {\n key = 'lc';\n } else if (array[0].includes('ts')) {\n key = 'ts';\n }\n let idFromText = '';\n if (!id) {\n if (!changedSubstring.includes('id:')) {\n debug([{ text: 'Error processTimeIdLc: id not found in:', val: changedSubstring }]);\n return;\n }\n\n if (array[2]) {\n idFromText = array[2].replace('id:', '').replace('}', '').replace(/'/g, '');\n changedSubstring = changedSubstring.replace(array[2], '').replace(/,/g, '');\n }\n }\n if (!id && !idFromText) {\n return;\n }\n const value = await _this.getForeignStateAsync(id || idFromText);\n let timeValue;\n let timeStringUser;\n if (key && value) {\n timeStringUser = changedSubstring.replace(',(', '').replace(')', '').replace('}', '');\n timeValue = value[key as keyof ioBroker.StateValue];\n }\n if (!timeValue) {\n return;\n }\n const timeObj = new Date(timeValue);\n const milliseconds = timeObj.getMilliseconds();\n const seconds = timeObj.getSeconds();\n const minutes = timeObj.getMinutes();\n const hours = timeObj.getHours();\n const day = timeObj.getDate();\n const month = timeObj.getMonth() + 1;\n const year = timeObj.getFullYear();\n\n const time = {\n ms: milliseconds < 10 ? `00${milliseconds}` : milliseconds < 100 ? `0${milliseconds}` : milliseconds,\n s: seconds < 10 ? `0${seconds}` : seconds,\n m: minutes < 10 ? `0${minutes}` : minutes,\n h: hours < 10 ? `0${hours}` : hours,\n d: day < 10 ? `0${day}` : day,\n mo: month < 10 ? `0${month}` : month,\n y: year,\n };\n\n if (timeStringUser) {\n if (timeStringUser.includes('sss')) {\n timeStringUser = timeStringUser.replace('sss', time.ms.toString());\n }\n if (timeStringUser.includes('ss')) {\n timeStringUser = timeStringUser.replace('ss', time.s.toString());\n }\n if (timeStringUser.includes('mm')) {\n timeStringUser = timeStringUser.replace('mm', time.m.toString());\n }\n if (timeStringUser.includes('hh')) {\n timeStringUser = timeStringUser.replace('hh', time.h.toString());\n }\n if (timeStringUser.includes('DD')) {\n timeStringUser = timeStringUser.replace('DD', time.d.toString());\n }\n if (timeStringUser.includes('MM')) {\n timeStringUser = timeStringUser.replace('MM', time.mo.toString());\n }\n if (timeStringUser.includes('YYYY')) {\n timeStringUser = timeStringUser.replace('YYYY', time.y.toString());\n }\n if (timeStringUser.includes('YY')) {\n timeStringUser = timeStringUser.replace('YY', time.y.toString().slice(-2));\n }\n timeStringUser = timeStringUser.replace('(', '').replace(')', '');\n return textToSend.replace(substring, timeStringUser);\n }\n\n return textToSend;\n};\n\nconst checkStatus = async (\n text: string,\n processTimeValue?: ProzessTimeValue,\n): Promise<string | undefined | ioBroker.State | null> => {\n try {\n const _this = TelegramMenu.getInstance();\n debug([{ text: 'CheckStatusInfo:', val: text }]);\n\n const substring = decomposeText(text, '{status:', '}').substring;\n let id, valueChange;\n\n if (substring.includes(\"status:'id':\")) {\n id = substring.split(':')[2].replace(\"'}\", '').replace(/'/g, '').replace(/}/g, '');\n\n valueChange = substring.split(':')[3] ? substring.split(':')[3].replace('}', '') !== 'false' : true;\n } else {\n id = substring.split(':')[1].replace(\"'}\", '').replace(/'/g, '').replace(/}/g, '');\n valueChange = substring.split(':')[2] ? substring.split(':')[2].replace('}', '') !== 'false' : true;\n }\n\n const stateValue = await _this.getForeignStateAsync(id);\n\n if (!stateValue) {\n debug([{ text: 'Error getting Value from:', val: id }]);\n return;\n }\n\n if (text.includes('{time}') && processTimeValue) {\n text = text.replace(substring, '');\n if (stateValue.val && typeof stateValue.val === 'string') {\n return processTimeValue(text, stateValue).replace(stateValue.val, '');\n }\n }\n if (stateValue.val === undefined || stateValue.val === null) {\n debug([{ text: 'Id', val: id }, { text: 'Value is null or undefined!' }]);\n return text.replace(substring, '');\n }\n if (!valueChange) {\n return text.replace(substring, stateValue.val.toString());\n }\n const changedResult = changeValue(text, stateValue.val);\n let newValue;\n if (changedResult) {\n text = changedResult.textToSend;\n newValue = changedResult.val;\n } else {\n newValue = stateValue.val;\n }\n return text.replace(substring, newValue.toString());\n } catch (e: any) {\n error([\n { text: 'Error checkStatus:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\nconst checkStatusInfo = async (text: string): Promise<string | undefined> => {\n const _this = TelegramMenu.getInstance();\n\n try {\n if (!text) {\n return;\n }\n _this.log.debug(`Text: ${JSON.stringify(text)}`);\n if (text.includes('{status:')) {\n while (text.includes('{status:')) {\n const result = await checkStatus(text, processTimeValue);\n text = result?.toString() || '';\n }\n }\n if (text.includes('{time.lc') || text.includes('{time.ts')) {\n text = (await processTimeIdLc(text, null)) || '';\n }\n if (text.includes('{set:')) {\n const result = decomposeText(text, '{set:', '}');\n const id = result.substring.split(',')[0].replace(\"{set:'id':\", '').replace(/'/g, '');\n const importedValue = result.substring.split(',')[1];\n\n text = result.textWithoutSubstring;\n const convertedValue = await checkTypeOfId(id, importedValue);\n\n const ack = result.substring.split(',')[2].replace('}', '') == 'true';\n\n if (text === '') {\n text = 'W\u00E4hle eine Aktion';\n }\n if (convertedValue) {\n await _this.setForeignStateAsync(id, convertedValue, ack);\n }\n }\n if (text) {\n return text;\n }\n } catch (e: any) {\n error([\n { text: 'Error checkStatusInfo:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\n\nasync function checkTypeOfId(\n id: string,\n value: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState,\n): Promise<ioBroker.State | null | undefined | ioBroker.StateValue | ioBroker.SettableState> {\n const _this = TelegramMenu.getInstance();\n try {\n debug([{ text: `Check Type of Id: ${id}` }]);\n const obj = await _this.getForeignObjectAsync(id);\n const receivedType = typeof value;\n if (!obj || !value) {\n return value;\n }\n if (receivedType === obj.common.type || !obj.common.type) {\n return value;\n }\n\n debug([{ text: `Change Value type from \"${receivedType}\" to \"${obj.common.type}\"` }]);\n\n if (obj.common.type === 'boolean') {\n if (value == 'true') {\n value = true;\n }\n if (value == 'false') {\n value = false;\n }\n return value;\n }\n if (obj.common.type === 'string') {\n return JSON.stringify(value);\n }\n if (obj && obj.common && obj.common.type === 'number' && typeof value === 'string') {\n return parseFloat(value);\n }\n\n return value;\n } catch (e: any) {\n error([\n { text: 'Error checkTypeOfId:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nconst newLine = (text: string): string => {\n if (text && text.includes('\\\\n')) {\n return text.replace(/\\\\n/g, '\\n');\n }\n return text;\n};\n\nexport {\n checkStatusInfo,\n checkTypeOfId,\n changeValue,\n newLine,\n processTimeIdLc,\n processTimeValue,\n decomposeText,\n replaceAll,\n getChatID,\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import TelegramMenu from '../main';\nimport { isDefined, isJSON, replaceAll } from './global';\nimport { debug, error } from './logging';\nimport type { UserListWithChatId, ProzessTimeValue } from './telegram-menu';\n\nconst processTimeValue = (textToSend: string, obj: ioBroker.State): string => {\n const date = Number(obj.val);\n\n if (!isDefined(date)) {\n return textToSend;\n }\n const time = new Date(date);\n if (isNaN(time.getTime())) {\n error([{ text: 'Invalid Date:', val: date }]);\n return textToSend;\n }\n const timeString = time.toLocaleDateString('de-DE', {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n return textToSend.replace('{time}', timeString);\n};\n\nconst getChatID = (userListWithChatID: UserListWithChatId[], user: string): string => {\n let chatId = '';\n userListWithChatID.forEach(element => {\n if (element.name === user) {\n chatId = element.chatID;\n }\n });\n return chatId;\n};\nconst exchangeValue = (\n textToSend: string,\n stateVal: string | number | boolean,\n): { valueChange: string; textToSend: string } | boolean => {\n const { startindex, endindex } = decomposeText(textToSend, 'change{', '}');\n\n let match = textToSend.substring(startindex + 'change'.length + 1, textToSend.indexOf('}', startindex));\n\n let objChangeValue;\n match = match.replace(/'/g, '\"');\n\n if (isJSON(`{${match}}`)) {\n objChangeValue = JSON.parse(`{${match}}`);\n } else {\n error([{ text: `There is a error in your input:`, val: replaceAll(match, '\"', \"'\") }]);\n return false;\n }\n\n let newValue;\n objChangeValue[String(stateVal)] ? (newValue = objChangeValue[String(stateVal)]) : (newValue = stateVal);\n return {\n valueChange: newValue,\n textToSend: textToSend.substring(0, startindex) + textToSend.substring(endindex + 1),\n };\n};\n\nfunction decomposeText(\n text: string,\n searchValue: string,\n secondValue: string,\n): { startindex: number; endindex: number; substring: string; textWithoutSubstring: string } {\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\nfunction changeValue(\n textToSend: string,\n val: string | number | boolean,\n): { textToSend: string; val: string | number } | undefined {\n if (textToSend.includes('change{')) {\n const result = exchangeValue(textToSend, val);\n if (!result) {\n return;\n }\n if (typeof result === 'boolean') {\n return;\n }\n return { textToSend: result.textToSend, val: result.valueChange };\n }\n}\n\nconst processTimeIdLc = async (textToSend: string, id: string | null): Promise<string | undefined> => {\n const _this = TelegramMenu.getInstance();\n\n let key = '';\n const { substring } = decomposeText(textToSend, '{time.', '}');\n const array = substring.split(',');\n let changedSubstring = substring;\n changedSubstring = changedSubstring.replace(array[0], '');\n\n if (array[0].includes('lc')) {\n key = 'lc';\n } else if (array[0].includes('ts')) {\n key = 'ts';\n }\n let idFromText = '';\n if (!id) {\n if (!changedSubstring.includes('id:')) {\n debug([{ text: 'Error processTimeIdLc: id not found in:', val: changedSubstring }]);\n return;\n }\n\n if (array[2]) {\n idFromText = array[2].replace('id:', '').replace('}', '').replace(/'/g, '');\n changedSubstring = changedSubstring.replace(array[2], '').replace(/,/g, '');\n }\n }\n if (!id && !idFromText) {\n return;\n }\n const value = await _this.getForeignStateAsync(id || idFromText);\n let timeValue;\n let timeStringUser;\n if (key && value) {\n timeStringUser = changedSubstring.replace(',(', '').replace(')', '').replace('}', '');\n timeValue = value[key as keyof ioBroker.StateValue];\n }\n if (!timeValue) {\n return;\n }\n const timeObj = new Date(timeValue);\n const milliseconds = timeObj.getMilliseconds();\n const seconds = timeObj.getSeconds();\n const minutes = timeObj.getMinutes();\n const hours = timeObj.getHours();\n const day = timeObj.getDate();\n const month = timeObj.getMonth() + 1;\n const year = timeObj.getFullYear();\n\n const time = {\n ms: milliseconds < 10 ? `00${milliseconds}` : milliseconds < 100 ? `0${milliseconds}` : milliseconds,\n s: seconds < 10 ? `0${seconds}` : seconds,\n m: minutes < 10 ? `0${minutes}` : minutes,\n h: hours < 10 ? `0${hours}` : hours,\n d: day < 10 ? `0${day}` : day,\n mo: month < 10 ? `0${month}` : month,\n y: year,\n };\n\n if (timeStringUser) {\n if (timeStringUser.includes('sss')) {\n timeStringUser = timeStringUser.replace('sss', time.ms.toString());\n }\n if (timeStringUser.includes('ss')) {\n timeStringUser = timeStringUser.replace('ss', time.s.toString());\n }\n if (timeStringUser.includes('mm')) {\n timeStringUser = timeStringUser.replace('mm', time.m.toString());\n }\n if (timeStringUser.includes('hh')) {\n timeStringUser = timeStringUser.replace('hh', time.h.toString());\n }\n if (timeStringUser.includes('DD')) {\n timeStringUser = timeStringUser.replace('DD', time.d.toString());\n }\n if (timeStringUser.includes('MM')) {\n timeStringUser = timeStringUser.replace('MM', time.mo.toString());\n }\n if (timeStringUser.includes('YYYY')) {\n timeStringUser = timeStringUser.replace('YYYY', time.y.toString());\n }\n if (timeStringUser.includes('YY')) {\n timeStringUser = timeStringUser.replace('YY', time.y.toString().slice(-2));\n }\n timeStringUser = timeStringUser.replace('(', '').replace(')', '');\n return textToSend.replace(substring, timeStringUser);\n }\n\n return textToSend;\n};\n\nconst checkStatus = async (\n text: string,\n processTimeValue?: ProzessTimeValue,\n): Promise<string | undefined | ioBroker.State | null> => {\n try {\n const _this = TelegramMenu.getInstance();\n debug([{ text: 'CheckStatusInfo:', val: text }]);\n\n const substring = decomposeText(text, '{status:', '}').substring;\n let id, valueChange;\n\n if (substring.includes(\"status:'id':\")) {\n id = substring.split(':')[2].replace(\"'}\", '').replace(/'/g, '').replace(/}/g, '');\n\n valueChange = substring.split(':')[3] ? substring.split(':')[3].replace('}', '') !== 'false' : true;\n } else {\n id = substring.split(':')[1].replace(\"'}\", '').replace(/'/g, '').replace(/}/g, '');\n valueChange = substring.split(':')[2] ? substring.split(':')[2].replace('}', '') !== 'false' : true;\n }\n\n const stateValue = await _this.getForeignStateAsync(id);\n\n if (!stateValue) {\n debug([{ text: 'Error getting Value from:', val: id }]);\n return;\n }\n\n if (text.includes('{time}') && processTimeValue) {\n text = text.replace(substring, '');\n if (stateValue.val && typeof stateValue.val === 'string') {\n return processTimeValue(text, stateValue).replace(stateValue.val, '');\n }\n }\n if (stateValue.val === undefined || stateValue.val === null) {\n debug([{ text: 'Id', val: id }, { text: 'Value is null or undefined!' }]);\n return text.replace(substring, '');\n }\n if (!valueChange) {\n return text.replace(substring, stateValue.val.toString());\n }\n const changedResult = changeValue(text, stateValue.val);\n let newValue;\n if (changedResult) {\n text = changedResult.textToSend;\n newValue = changedResult.val;\n } else {\n newValue = stateValue.val;\n }\n return text.replace(substring, newValue.toString());\n } catch (e: any) {\n error([\n { text: 'Error checkStatus:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\nconst checkStatusInfo = async (text: string): Promise<string | undefined> => {\n const _this = TelegramMenu.getInstance();\n\n try {\n if (!text) {\n return;\n }\n _this.log.debug(`Text: ${JSON.stringify(text)}`);\n if (text.includes('{status:')) {\n while (text.includes('{status:')) {\n const result = await checkStatus(text, processTimeValue);\n text = result ? JSON.stringify(result) : '';\n }\n }\n if (text.includes('{time.lc') || text.includes('{time.ts')) {\n text = (await processTimeIdLc(text, null)) || '';\n }\n if (text.includes('{set:')) {\n const result = decomposeText(text, '{set:', '}');\n const id = result.substring.split(',')[0].replace(\"{set:'id':\", '').replace(/'/g, '');\n const importedValue = result.substring.split(',')[1];\n\n text = result.textWithoutSubstring;\n const convertedValue = await checkTypeOfId(id, importedValue);\n\n const ack = result.substring.split(',')[2].replace('}', '') == 'true';\n\n if (text === '') {\n text = 'W\u00E4hle eine Aktion';\n }\n if (convertedValue) {\n await _this.setForeignStateAsync(id, convertedValue, ack);\n }\n }\n if (text) {\n return text;\n }\n } catch (e: any) {\n error([\n { text: 'Error checkStatusInfo:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n};\n\nasync function checkTypeOfId(\n id: string,\n value: ioBroker.State | ioBroker.StateValue | ioBroker.SettableState,\n): Promise<ioBroker.State | null | undefined | ioBroker.StateValue | ioBroker.SettableState> {\n const _this = TelegramMenu.getInstance();\n try {\n debug([{ text: `Check Type of Id: ${id}` }]);\n const obj = await _this.getForeignObjectAsync(id);\n const receivedType = typeof value;\n if (!obj || !value) {\n return value;\n }\n if (receivedType === obj.common.type || !obj.common.type) {\n return value;\n }\n\n debug([{ text: `Change Value type from \"${receivedType}\" to \"${obj.common.type}\"` }]);\n\n if (obj.common.type === 'boolean') {\n if (value == 'true') {\n value = true;\n }\n if (value == 'false') {\n value = false;\n }\n return value;\n }\n if (obj.common.type === 'string') {\n return JSON.stringify(value);\n }\n if (obj && obj.common && obj.common.type === 'number' && typeof value === 'string') {\n return parseFloat(value);\n }\n\n return value;\n } catch (e: any) {\n error([\n { text: 'Error checkTypeOfId:', val: e.message },\n { text: 'Stack:', val: e.stack },\n ]);\n }\n}\n\nconst newLine = (text: string): string => {\n if (text && text.includes('\\\\n')) {\n return text.replace(/\\\\n/g, '\\n');\n }\n return text;\n};\n\nexport {\n checkStatusInfo,\n checkTypeOfId,\n changeValue,\n newLine,\n processTimeIdLc,\n processTimeValue,\n decomposeText,\n replaceAll,\n getChatID,\n};\n"],
5
+ "mappings": "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",
6
6
  "names": ["TelegramMenu", "processTimeValue"]
7
7
  }
package/build/main.js CHANGED
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var main_exports = {};
30
30
  __export(main_exports, {
31
+ adapter: () => adapter,
31
32
  default: () => TelegramMenu
32
33
  });
33
34
  module.exports = __toCommonJS(main_exports);
@@ -407,9 +408,14 @@ class TelegramMenu extends utils.Adapter {
407
408
  }
408
409
  }
409
410
  }
411
+ let adapter;
410
412
  if (require.main !== module) {
411
- module.exports = (options) => new TelegramMenu(options);
413
+ adapter = (options) => new TelegramMenu(options);
412
414
  } else {
413
415
  new TelegramMenu();
414
416
  }
417
+ // Annotate the CommonJS export names for ESM import in node:
418
+ 0 && (module.exports = {
419
+ adapter
420
+ });
415
421
  //# sourceMappingURL=main.js.map
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 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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",
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}\nlet adapter;\nif (require.main !== module) {\n // Export the constructor in compact mode\n /**\n * @param [options] - Adapter options\n */\n adapter = (options: Partial<utils.AdapterOptions<undefined, undefined>> | undefined): TelegramMenu =>\n new TelegramMenu(options);\n} else {\n // otherwise start the instance directly\n new TelegramMenu();\n}\nexport { adapter };\n"],
5
+ "mappings": "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",
6
6
  "names": ["obj"]
7
7
  }
package/io-package.json CHANGED
@@ -1,8 +1,21 @@
1
1
  {
2
2
  "common": {
3
3
  "name": "telegram-menu",
4
- "version": "2.2.1",
4
+ "version": "2.2.2",
5
5
  "news": {
6
+ "2.2.2": {
7
+ "en": "FIX: Style and update dependencies",
8
+ "de": "FIX: Stil- und Updateabhängigkeiten",
9
+ "ru": "FIX: Стиль и зависимости от обновлений",
10
+ "pt": "FIX: Estilo e dependências de atualização",
11
+ "nl": "FIX: Stijl en update afhankelijkheden",
12
+ "fr": "FIX: Dépendances de style et de mise à jour",
13
+ "it": "FIX: Stile e dipendenze di aggiornamento",
14
+ "es": "FIX: dependencias de estilo y actualización",
15
+ "pl": "FIX: Styl i uaktualnianie zależności",
16
+ "uk": "FIX: Стиль і оновлення залежності",
17
+ "zh-cn": "FIX:样式和更新依赖性"
18
+ },
6
19
  "2.2.1": {
7
20
  "en": "FIX: Infinite loop on open events\nFIX: #248 Error converting time",
8
21
  "de": "FIX: Unendliche Schleife auf offenen Veranstaltungen\nFIX: #248 Zeit ändern",
@@ -80,19 +93,6 @@
80
93
  "pl": "FEAT: Styling",
81
94
  "uk": "FEAT: Стилування",
82
95
  "zh-cn": "斯图林"
83
- },
84
- "2.1.5": {
85
- "en": "FEAT: Styling\nCHORE: Update dependencies\nFIX: #211 No input is possible\nCHORE: Migration to ESLint 9 and @iobroker/eslint-config",
86
- "de": "FEAT: Styling\nCHORE: Aktualisieren von Abhängigkeiten\nFIX: #211 Keine Eingabe möglich\nCHORE: Migration auf ESLint 9 und @iobroker/eslint-config",
87
- "ru": "FEAT: Styling\nCHORE: зависимости от обновления\n#211 Невозможно ввести\nCHORE: Migration to ESLint 9 and @iobroker/eslint-config",
88
- "pt": "FEAT: Styling\nCHORE: Atualizar dependências\nFIX: #211 Nenhuma entrada é possível\nCHORE: Migração para ESLint 9 e @iobroker/eslint-config",
89
- "nl": "FEAT: Styling\nAfhankelijkheden bijwerken\nFIX: #211 Geen invoer mogelijk\nCHORE: migratie naar ESLint 9 en @iobroker/eslint-config",
90
- "fr": "VIANDE: Styling\nCHORE : Mise à jour des dépendances\nFIXE: #211 Aucune entrée n'est possible\nCHORE: Migration vers ESLint 9 et @iobroker/eslint-config",
91
- "it": "CARAT: Styling\nCHORE: dipendenze di aggiornamento\n#211 Nessun input è possibile\nCHORE: Migrazione a ESLint 9 e @iobroker/eslint-config",
92
- "es": "FEAT: Styling\nCHORE: Actualizar las dependencias\nFIX: #211 Ninguna entrada es posible\nCHORE: Migración a ESLint 9 y @iobroker/eslint-config",
93
- "pl": "FEAT: Styling\nCHORE: Uaktualnij zależności\nFIX: # 211 Brak danych wejściowych\nCHORE: Migracja do ESLint 9 i @ iobroker / eslint- config",
94
- "uk": "FEAT: Стилування\nCHORE: Оновити залежності\nFIX: #211 Немає можливості введення\nCHORE: Міграція до ESLint 9 і @iobroker/eslint-config",
95
- "zh-cn": "斯图林\nCHORE: 更新依赖性\nFIX: #211 (英语). 无法输入\nCHORE: 迁移到ESLint 9 和 @iobroster/eslint-config"
96
96
  }
97
97
  },
98
98
  "titleLang": {
@@ -155,7 +155,7 @@
155
155
  ],
156
156
  "globalDependencies": [
157
157
  {
158
- "admin": ">=5.0.0",
158
+ "admin": ">=7.4.10",
159
159
  "telegram": ">=1.15.0"
160
160
  }
161
161
  ],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iobroker.telegram-menu",
3
- "version": "2.2.1",
3
+ "version": "2.2.2",
4
4
  "description": "Easily create Telegram Menus",
5
5
  "author": {
6
6
  "name": "MiRo1310",
@@ -21,9 +21,10 @@
21
21
  "node": ">= 18"
22
22
  },
23
23
  "dependencies": {
24
- "@iobroker/adapter-core": "^3.2.2",
24
+ "@iobroker/adapter-core": "^3.2.3",
25
25
  "@sentry/integrations": "^7.114.0",
26
26
  "@types/module-alias": "^2.0.4",
27
+ "axios": "^1.8.3",
27
28
  "module-alias": "^2.2.3"
28
29
  },
29
30
  "devDependencies": {
@@ -31,41 +32,30 @@
31
32
  "@alcalzone/release-script-plugin-iobroker": "^3.7.2",
32
33
  "@alcalzone/release-script-plugin-license": "^3.7.0",
33
34
  "@alcalzone/release-script-plugin-manual-review": "^3.7.0",
34
- "@emotion/react": "^11.13.5",
35
35
  "@emotion/styled": "^11.14.0",
36
36
  "@iobroker/adapter-dev": "^1.3.0",
37
- "@iobroker/adapter-react-v5": "^7.4.10",
38
- "@iobroker/eslint-config": "^1.0.0",
39
- "@iobroker/testing": "^5.0.0",
40
- "@mui/icons-material": "^6.1.9",
41
- "@mui/lab": "^6.0.0-beta.17",
42
- "@mui/material": "^6.1.9",
43
- "@mui/styled-engine-sc": "^6.3.0",
44
- "@mui/styles": "^6.1.9",
37
+ "@iobroker/eslint-config": "^2.0.1",
38
+ "@iobroker/testing": "^5.0.3",
45
39
  "@tsconfig/node20": "^20.1.4",
46
40
  "@types/chai": "^4.3.14",
47
41
  "@types/chai-as-promised": "^7.1.8",
48
42
  "@types/mocha": "^10.0.10",
49
- "@types/node": "^22.10.3",
43
+ "@types/node": "^22.13.7",
50
44
  "@types/proxyquire": "^1.3.31",
51
- "@types/react": "^17.0.80",
52
- "@types/react-dom": "^17.0.25",
53
45
  "@types/sinon": "^17.0.3",
54
46
  "@types/sinon-chai": "^3.2.12",
55
47
  "chai": "^4.5.0",
56
48
  "chai-as-promised": "^7.1.1",
57
- "fs": "^0.0.1-security",
58
- "inquirer": "^9.2.17",
49
+ "inquirer": "^12.4.2",
59
50
  "json5": "^2.2.3",
60
51
  "mocha": "^11.0.1",
61
52
  "proxyquire": "^2.1.3",
62
- "react": "^17.0.2",
63
- "react-dom": "^17.0.2",
64
53
  "sinon": "^19.0.2",
65
54
  "sinon-chai": "^3.7.0",
66
55
  "styled-components": "^6.1.13",
67
56
  "ts-node": "^10.9.2",
68
- "typescript": "~5.7.2"
57
+ "typescript": "~5.7.2",
58
+ "rimraf": "^3.0.2"
69
59
  },
70
60
  "main": "build/main.js",
71
61
  "files": [