homeassistant 2025.7.0b0__py3-none-any.whl → 2025.7.0b2__py3-none-any.whl

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 (312) hide show
  1. homeassistant/components/aemet/sensor.py +1 -1
  2. homeassistant/components/airq/coordinator.py +2 -2
  3. homeassistant/components/alexa_devices/__init__.py +5 -2
  4. homeassistant/components/alexa_devices/notify.py +2 -0
  5. homeassistant/components/alexa_devices/quality_scale.yaml +1 -1
  6. homeassistant/components/alexa_devices/strings.json +11 -4
  7. homeassistant/components/alexa_devices/switch.py +2 -0
  8. homeassistant/components/alexa_devices/translations/bg.json +6 -4
  9. homeassistant/components/alexa_devices/translations/cs.json +12 -5
  10. homeassistant/components/alexa_devices/translations/de.json +14 -7
  11. homeassistant/components/alexa_devices/translations/el.json +12 -5
  12. homeassistant/components/alexa_devices/translations/en.json +12 -5
  13. homeassistant/components/alexa_devices/translations/es.json +12 -5
  14. homeassistant/components/alexa_devices/translations/et.json +12 -5
  15. homeassistant/components/alexa_devices/translations/ga.json +0 -6
  16. homeassistant/components/alexa_devices/translations/he.json +0 -4
  17. homeassistant/components/alexa_devices/translations/hu.json +0 -4
  18. homeassistant/components/alexa_devices/translations/id.json +1 -0
  19. homeassistant/components/alexa_devices/translations/lt.json +0 -4
  20. homeassistant/components/alexa_devices/translations/mk.json +12 -0
  21. homeassistant/components/alexa_devices/translations/nl.json +0 -4
  22. homeassistant/components/alexa_devices/translations/pl.json +0 -4
  23. homeassistant/components/alexa_devices/translations/pt.json +0 -4
  24. homeassistant/components/alexa_devices/translations/ru.json +4 -5
  25. homeassistant/components/alexa_devices/translations/sk.json +12 -5
  26. homeassistant/components/alexa_devices/translations/sv.json +17 -5
  27. homeassistant/components/alexa_devices/translations/tr.json +0 -4
  28. homeassistant/components/alexa_devices/translations/zh-Hans.json +27 -5
  29. homeassistant/components/alexa_devices/translations/zh-Hant.json +12 -5
  30. homeassistant/components/alexa_devices/utils.py +40 -0
  31. homeassistant/components/altruist/translations/id.json +11 -0
  32. homeassistant/components/anthropic/__init__.py +14 -1
  33. homeassistant/components/anthropic/translations/bg.json +21 -0
  34. homeassistant/components/anthropic/translations/ga.json +32 -1
  35. homeassistant/components/anthropic/translations/id.json +19 -0
  36. homeassistant/components/anthropic/translations/ru.json +30 -0
  37. homeassistant/components/backup/translations/de.json +1 -1
  38. homeassistant/components/buienradar/sensor.py +0 -1
  39. homeassistant/components/cambridge_audio/translations/sv.json +1 -1
  40. homeassistant/components/comelit/translations/de.json +1 -1
  41. homeassistant/components/counter/translations/sv.json +2 -2
  42. homeassistant/components/demo/translations/select.sv.json +2 -2
  43. homeassistant/components/derivative/translations/ga.json +20 -0
  44. homeassistant/components/derivative/translations/ru.json +3 -0
  45. homeassistant/components/devolo_home_control/translations/bg.json +6 -0
  46. homeassistant/components/devolo_home_control/translations/id.json +5 -0
  47. homeassistant/components/devolo_home_control/translations/sv.json +10 -0
  48. homeassistant/components/devolo_home_control/translations/zh-Hans.json +10 -0
  49. homeassistant/components/dlink/manifest.json +1 -1
  50. homeassistant/components/ecovacs/translations/sv.json +1 -1
  51. homeassistant/components/enphase_envoy/translations/sv.json +5 -2
  52. homeassistant/components/ezviz/translations/bg.json +6 -0
  53. homeassistant/components/ezviz/translations/mk.json +13 -0
  54. homeassistant/components/ezviz/translations/sv.json +10 -0
  55. homeassistant/components/ezviz/translations/zh-Hans.json +10 -0
  56. homeassistant/components/fronius/translations/sv.json +2 -2
  57. homeassistant/components/frontend/manifest.json +1 -1
  58. homeassistant/components/goodwe/translations/sv.json +5 -5
  59. homeassistant/components/google_generative_ai_conversation/__init__.py +21 -0
  60. homeassistant/components/google_generative_ai_conversation/config_flow.py +72 -36
  61. homeassistant/components/google_generative_ai_conversation/const.py +15 -2
  62. homeassistant/components/google_generative_ai_conversation/diagnostics.py +1 -0
  63. homeassistant/components/google_generative_ai_conversation/entity.py +7 -2
  64. homeassistant/components/google_generative_ai_conversation/helpers.py +73 -0
  65. homeassistant/components/google_generative_ai_conversation/strings.json +28 -1
  66. homeassistant/components/google_generative_ai_conversation/translations/bg.json +19 -0
  67. homeassistant/components/google_generative_ai_conversation/translations/cs.json +28 -0
  68. homeassistant/components/google_generative_ai_conversation/translations/de.json +28 -0
  69. homeassistant/components/google_generative_ai_conversation/translations/el.json +28 -0
  70. homeassistant/components/google_generative_ai_conversation/translations/en.json +28 -0
  71. homeassistant/components/google_generative_ai_conversation/translations/es.json +28 -0
  72. homeassistant/components/google_generative_ai_conversation/translations/et.json +28 -0
  73. homeassistant/components/google_generative_ai_conversation/translations/ga.json +9 -0
  74. homeassistant/components/google_generative_ai_conversation/translations/id.json +30 -0
  75. homeassistant/components/google_generative_ai_conversation/translations/mk.json +11 -0
  76. homeassistant/components/google_generative_ai_conversation/translations/ru.json +67 -0
  77. homeassistant/components/google_generative_ai_conversation/translations/sk.json +28 -0
  78. homeassistant/components/google_generative_ai_conversation/translations/sv.json +23 -0
  79. homeassistant/components/google_generative_ai_conversation/translations/zh-Hans.json +28 -0
  80. homeassistant/components/google_generative_ai_conversation/translations/zh-Hant.json +28 -0
  81. homeassistant/components/google_generative_ai_conversation/tts.py +48 -106
  82. homeassistant/components/group/translations/el.json +18 -18
  83. homeassistant/components/habitica/const.py +1 -1
  84. homeassistant/components/harmony/translations/select.sv.json +1 -1
  85. homeassistant/components/harmony/translations/sv.json +1 -1
  86. homeassistant/components/homeassistant_hardware/firmware_config_flow.py +89 -7
  87. homeassistant/components/homeassistant_hardware/strings.json +2 -1
  88. homeassistant/components/homeassistant_hardware/translations/de.json +1 -0
  89. homeassistant/components/homeassistant_hardware/translations/en-GB.json +1 -0
  90. homeassistant/components/homeassistant_hardware/translations/en.json +1 -0
  91. homeassistant/components/homeassistant_hardware/translations/ga.json +9 -0
  92. homeassistant/components/homeassistant_hardware/translations/mk.json +9 -0
  93. homeassistant/components/homeassistant_sky_connect/config_flow.py +1 -1
  94. homeassistant/components/homeassistant_sky_connect/strings.json +4 -2
  95. homeassistant/components/homeassistant_sky_connect/translations/de.json +2 -0
  96. homeassistant/components/homeassistant_sky_connect/translations/en-GB.json +2 -0
  97. homeassistant/components/homeassistant_sky_connect/translations/en.json +2 -0
  98. homeassistant/components/homeassistant_sky_connect/translations/ga.json +10 -0
  99. homeassistant/components/homeassistant_sky_connect/translations/mk.json +7 -0
  100. homeassistant/components/homeassistant_yellow/strings.json +2 -1
  101. homeassistant/components/homeassistant_yellow/translations/bg.json +0 -1
  102. homeassistant/components/homeassistant_yellow/translations/cs.json +0 -1
  103. homeassistant/components/homeassistant_yellow/translations/de.json +1 -0
  104. homeassistant/components/homeassistant_yellow/translations/el.json +0 -1
  105. homeassistant/components/homeassistant_yellow/translations/en-GB.json +2 -1
  106. homeassistant/components/homeassistant_yellow/translations/en.json +2 -1
  107. homeassistant/components/homeassistant_yellow/translations/es.json +0 -1
  108. homeassistant/components/homeassistant_yellow/translations/et.json +0 -1
  109. homeassistant/components/homeassistant_yellow/translations/fr.json +0 -1
  110. homeassistant/components/homeassistant_yellow/translations/ga.json +5 -0
  111. homeassistant/components/homeassistant_yellow/translations/he.json +0 -1
  112. homeassistant/components/homeassistant_yellow/translations/hu.json +0 -1
  113. homeassistant/components/homeassistant_yellow/translations/id.json +0 -1
  114. homeassistant/components/homeassistant_yellow/translations/it.json +0 -1
  115. homeassistant/components/homeassistant_yellow/translations/ja.json +0 -1
  116. homeassistant/components/homeassistant_yellow/translations/lt.json +0 -1
  117. homeassistant/components/homeassistant_yellow/translations/pt.json +0 -1
  118. homeassistant/components/homeassistant_yellow/translations/ru.json +0 -1
  119. homeassistant/components/homeassistant_yellow/translations/sk.json +0 -1
  120. homeassistant/components/homeassistant_yellow/translations/sv.json +0 -1
  121. homeassistant/components/homeassistant_yellow/translations/tr.json +0 -1
  122. homeassistant/components/homeassistant_yellow/translations/zh-Hans.json +0 -1
  123. homeassistant/components/homeassistant_yellow/translations/zh-Hant.json +0 -1
  124. homeassistant/components/homewizard/translations/sv.json +3 -1
  125. homeassistant/components/http/auth.py +1 -1
  126. homeassistant/components/image/__init__.py +34 -3
  127. homeassistant/components/input_number/translations/sv.json +2 -2
  128. homeassistant/components/input_select/translations/sv.json +6 -6
  129. homeassistant/components/input_text/translations/sv.json +1 -1
  130. homeassistant/components/iron_os/manifest.json +1 -1
  131. homeassistant/components/iron_os/translations/sv.json +1 -1
  132. homeassistant/components/keenetic_ndms2/translations/id.json +3 -0
  133. homeassistant/components/lamarzocco/entity.py +19 -1
  134. homeassistant/components/lamarzocco/number.py +0 -4
  135. homeassistant/components/lamarzocco/sensor.py +2 -4
  136. homeassistant/components/lamarzocco/translations/sv.json +3 -3
  137. homeassistant/components/lametric/translations/sv.json +2 -2
  138. homeassistant/components/lametric/update.py +1 -1
  139. homeassistant/components/lg_thinq/translations/sv.json +5 -5
  140. homeassistant/components/litterrobot/translations/bg.json +4 -0
  141. homeassistant/components/litterrobot/translations/ga.json +3 -0
  142. homeassistant/components/matter/translations/id.json +5 -0
  143. homeassistant/components/matter/vacuum.py +38 -26
  144. homeassistant/components/meater/__init__.py +5 -1
  145. homeassistant/components/meater/coordinator.py +4 -2
  146. homeassistant/components/media_source/local_source.py +21 -4
  147. homeassistant/components/minecraft_server/translations/sv.json +1 -1
  148. homeassistant/components/motioneye/translations/sv.json +1 -1
  149. homeassistant/components/mqtt/translations/bg.json +10 -0
  150. homeassistant/components/mqtt/translations/cs.json +19 -0
  151. homeassistant/components/mqtt/translations/el.json +21 -0
  152. homeassistant/components/mqtt/translations/fi.json +3 -0
  153. homeassistant/components/mqtt/translations/ga.json +25 -0
  154. homeassistant/components/mqtt/translations/mk.json +23 -0
  155. homeassistant/components/mqtt/translations/ru.json +1 -0
  156. homeassistant/components/mqtt/translations/sv.json +24 -0
  157. homeassistant/components/mqtt/translations/zh-Hans.json +26 -0
  158. homeassistant/components/mqtt/translations/zh-Hant.json +19 -0
  159. homeassistant/components/music_assistant/button.py +0 -6
  160. homeassistant/components/ntfy/translations/id.json +13 -0
  161. homeassistant/components/ntfy/translations/sv.json +1 -0
  162. homeassistant/components/number/translations/sv.json +2 -2
  163. homeassistant/components/nut/config_flow.py +4 -2
  164. homeassistant/components/ohme/translations/sv.json +1 -1
  165. homeassistant/components/ollama/__init__.py +8 -0
  166. homeassistant/components/ollama/const.py +2 -0
  167. homeassistant/components/ollama/translations/bg.json +19 -0
  168. homeassistant/components/ollama/translations/ga.json +31 -1
  169. homeassistant/components/ollama/translations/id.json +18 -0
  170. homeassistant/components/ollama/translations/mk.json +13 -1
  171. homeassistant/components/ollama/translations/sv.json +1 -0
  172. homeassistant/components/onewire/translations/sv.json +4 -4
  173. homeassistant/components/openai_conversation/__init__.py +8 -0
  174. homeassistant/components/openai_conversation/const.py +1 -1
  175. homeassistant/components/openai_conversation/conversation.py +1 -1
  176. homeassistant/components/openai_conversation/translations/bg.json +26 -0
  177. homeassistant/components/openai_conversation/translations/id.json +23 -0
  178. homeassistant/components/openai_conversation/translations/mk.json +44 -0
  179. homeassistant/components/openai_conversation/translations/sv.json +4 -0
  180. homeassistant/components/playstation_network/diagnostics.py +55 -0
  181. homeassistant/components/playstation_network/quality_scale.yaml +1 -1
  182. homeassistant/components/playstation_network/translations/bg.json +25 -1
  183. homeassistant/components/playstation_network/translations/es.json +1 -1
  184. homeassistant/components/playstation_network/translations/ga.json +31 -0
  185. homeassistant/components/playstation_network/translations/id.json +14 -0
  186. homeassistant/components/playstation_network/translations/mk.json +18 -0
  187. homeassistant/components/playstation_network/translations/pl.json +73 -0
  188. homeassistant/components/playstation_network/translations/sv.json +29 -0
  189. homeassistant/components/playstation_network/translations/zh-Hans.json +29 -0
  190. homeassistant/components/plugwise/translations/sv.json +2 -2
  191. homeassistant/components/qnap/translations/sv.json +1 -1
  192. homeassistant/components/random/translations/sv.json +4 -4
  193. homeassistant/components/remote_calendar/translations/fi.json +34 -0
  194. homeassistant/components/select/translations/sv.json +10 -10
  195. homeassistant/components/smarla/__init__.py +2 -2
  196. homeassistant/components/sonos/translations/bg.json +5 -0
  197. homeassistant/components/sonos/translations/cs.json +6 -0
  198. homeassistant/components/sonos/translations/el.json +6 -0
  199. homeassistant/components/sonos/translations/ga.json +8 -0
  200. homeassistant/components/sonos/translations/mk.json +10 -0
  201. homeassistant/components/sonos/translations/ru.json +6 -0
  202. homeassistant/components/sonos/translations/sv.json +6 -0
  203. homeassistant/components/sonos/translations/zh-Hans.json +9 -0
  204. homeassistant/components/sonos/translations/zh-Hant.json +6 -0
  205. homeassistant/components/subaru/strings.json +2 -2
  206. homeassistant/components/subaru/translations/ca.json +0 -1
  207. homeassistant/components/subaru/translations/cs.json +0 -2
  208. homeassistant/components/subaru/translations/de.json +2 -2
  209. homeassistant/components/subaru/translations/el.json +0 -2
  210. homeassistant/components/subaru/translations/en-GB.json +0 -2
  211. homeassistant/components/subaru/translations/en.json +2 -2
  212. homeassistant/components/subaru/translations/es.json +0 -2
  213. homeassistant/components/subaru/translations/et.json +0 -2
  214. homeassistant/components/subaru/translations/fi.json +0 -1
  215. homeassistant/components/subaru/translations/hu.json +0 -2
  216. homeassistant/components/subaru/translations/it.json +0 -1
  217. homeassistant/components/subaru/translations/ja.json +0 -1
  218. homeassistant/components/subaru/translations/ko.json +0 -1
  219. homeassistant/components/subaru/translations/lt.json +0 -2
  220. homeassistant/components/subaru/translations/pt-BR.json +0 -1
  221. homeassistant/components/subaru/translations/pt.json +0 -2
  222. homeassistant/components/subaru/translations/ru.json +0 -2
  223. homeassistant/components/subaru/translations/sk.json +0 -2
  224. homeassistant/components/subaru/translations/sv.json +0 -2
  225. homeassistant/components/subaru/translations/tr.json +0 -2
  226. homeassistant/components/subaru/translations/zh-Hans.json +0 -2
  227. homeassistant/components/subaru/translations/zh-Hant.json +0 -2
  228. homeassistant/components/switchbot/translations/bg.json +26 -0
  229. homeassistant/components/switchbot/translations/ga.json +33 -0
  230. homeassistant/components/switchbot/translations/id.json +19 -0
  231. homeassistant/components/switchbot/translations/mk.json +49 -0
  232. homeassistant/components/switchbot/translations/sv.json +54 -0
  233. homeassistant/components/switchbot/translations/zh-Hans.json +53 -0
  234. homeassistant/components/telegram_bot/__init__.py +20 -4
  235. homeassistant/components/telegram_bot/bot.py +33 -29
  236. homeassistant/components/telegram_bot/config_flow.py +66 -20
  237. homeassistant/components/telegram_bot/const.py +1 -1
  238. homeassistant/components/telegram_bot/strings.json +33 -10
  239. homeassistant/components/telegram_bot/translations/bg.json +0 -1
  240. homeassistant/components/telegram_bot/translations/cs.json +35 -12
  241. homeassistant/components/telegram_bot/translations/de.json +35 -12
  242. homeassistant/components/telegram_bot/translations/el.json +35 -12
  243. homeassistant/components/telegram_bot/translations/en-GB.json +6 -11
  244. homeassistant/components/telegram_bot/translations/en.json +35 -12
  245. homeassistant/components/telegram_bot/translations/es.json +35 -12
  246. homeassistant/components/telegram_bot/translations/et.json +34 -11
  247. homeassistant/components/telegram_bot/translations/fr.json +5 -12
  248. homeassistant/components/telegram_bot/translations/ga.json +5 -11
  249. homeassistant/components/telegram_bot/translations/he.json +3 -8
  250. homeassistant/components/telegram_bot/translations/hu.json +5 -12
  251. homeassistant/components/telegram_bot/translations/id.json +0 -5
  252. homeassistant/components/telegram_bot/translations/it.json +2 -5
  253. homeassistant/components/telegram_bot/translations/lt.json +5 -12
  254. homeassistant/components/telegram_bot/translations/mk.json +7 -5
  255. homeassistant/components/telegram_bot/translations/nl.json +5 -12
  256. homeassistant/components/telegram_bot/translations/pt.json +5 -12
  257. homeassistant/components/telegram_bot/translations/ru.json +12 -11
  258. homeassistant/components/telegram_bot/translations/sk.json +35 -12
  259. homeassistant/components/telegram_bot/translations/sv.json +28 -12
  260. homeassistant/components/telegram_bot/translations/tr.json +5 -12
  261. homeassistant/components/telegram_bot/translations/zh-Hans.json +35 -12
  262. homeassistant/components/telegram_bot/translations/zh-Hant.json +35 -12
  263. homeassistant/components/template/translations/sv.json +5 -5
  264. homeassistant/components/text/translations/sv.json +1 -1
  265. homeassistant/components/tilt_pi/translations/id.json +11 -0
  266. homeassistant/components/tts/__init__.py +15 -0
  267. homeassistant/components/unifiprotect/translations/zh-Hans.json +3 -3
  268. homeassistant/components/utility_meter/translations/sv.json +9 -9
  269. homeassistant/components/vegehub/translations/bg.json +2 -0
  270. homeassistant/components/vegehub/translations/id.json +11 -0
  271. homeassistant/components/vegehub/translations/sv.json +2 -1
  272. homeassistant/components/vicare/translations/sv.json +2 -2
  273. homeassistant/components/whirlpool/translations/sv.json +12 -12
  274. homeassistant/components/wyoming/translations/sv.json +2 -2
  275. homeassistant/components/zha/translations/bg.json +23 -0
  276. homeassistant/components/zha/translations/el.json +10 -0
  277. homeassistant/components/zha/translations/ga.json +20 -0
  278. homeassistant/components/zha/translations/id.json +6 -0
  279. homeassistant/components/zha/translations/sv.json +23 -0
  280. homeassistant/components/zha/translations/zh-Hans.json +50 -0
  281. homeassistant/components/zwave_js/api.py +1 -1
  282. homeassistant/components/zwave_js/config_flow.py +15 -68
  283. homeassistant/components/zwave_js/manifest.json +1 -1
  284. homeassistant/components/zwave_js/strings.json +1 -5
  285. homeassistant/components/zwave_js/translations/bg.json +0 -3
  286. homeassistant/components/zwave_js/translations/cs.json +0 -5
  287. homeassistant/components/zwave_js/translations/de.json +1 -5
  288. homeassistant/components/zwave_js/translations/el.json +0 -5
  289. homeassistant/components/zwave_js/translations/en-GB.json +1 -5
  290. homeassistant/components/zwave_js/translations/en.json +1 -5
  291. homeassistant/components/zwave_js/translations/es.json +1 -5
  292. homeassistant/components/zwave_js/translations/et.json +0 -5
  293. homeassistant/components/zwave_js/translations/ga.json +0 -5
  294. homeassistant/components/zwave_js/translations/hu.json +0 -5
  295. homeassistant/components/zwave_js/translations/lt.json +0 -5
  296. homeassistant/components/zwave_js/translations/mk.json +0 -5
  297. homeassistant/components/zwave_js/translations/pt.json +0 -5
  298. homeassistant/components/zwave_js/translations/ru.json +0 -5
  299. homeassistant/components/zwave_js/translations/sk.json +0 -5
  300. homeassistant/components/zwave_js/translations/sv.json +0 -5
  301. homeassistant/components/zwave_js/translations/zh-Hans.json +0 -5
  302. homeassistant/components/zwave_js/translations/zh-Hant.json +1 -5
  303. homeassistant/config_entries.py +6 -0
  304. homeassistant/const.py +1 -1
  305. homeassistant/package_constraints.txt +1 -1
  306. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/METADATA +1 -1
  307. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/RECORD +312 -294
  308. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/WHEEL +0 -0
  309. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/entry_points.txt +0 -0
  310. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/licenses/LICENSE.md +0 -0
  311. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/licenses/homeassistant/backports/LICENSE.Python +0 -0
  312. {homeassistant-2025.7.0b0.dist-info → homeassistant-2025.7.0b2.dist-info}/top_level.txt +0 -0
@@ -287,24 +287,32 @@ class TelegramNotificationService:
287
287
  inline_message_id = msg_data["inline_message_id"]
288
288
  return message_id, inline_message_id
289
289
 
290
- def _get_target_chat_ids(self, target: Any) -> list[int]:
290
+ def get_target_chat_ids(self, target: int | list[int] | None) -> list[int]:
291
291
  """Validate chat_id targets or return default target (first).
292
292
 
293
293
  :param target: optional list of integers ([12234, -12345])
294
294
  :return list of chat_id targets (integers)
295
295
  """
296
296
  allowed_chat_ids: list[int] = self._get_allowed_chat_ids()
297
- default_user: int = allowed_chat_ids[0]
298
- if target is not None:
299
- if isinstance(target, int):
300
- target = [target]
301
- chat_ids = [t for t in target if t in allowed_chat_ids]
302
- if chat_ids:
303
- return chat_ids
304
- _LOGGER.warning(
305
- "Disallowed targets: %s, using default: %s", target, default_user
297
+
298
+ if target is None:
299
+ return [allowed_chat_ids[0]]
300
+
301
+ chat_ids = [target] if isinstance(target, int) else target
302
+ valid_chat_ids = [
303
+ chat_id for chat_id in chat_ids if chat_id in allowed_chat_ids
304
+ ]
305
+ if not valid_chat_ids:
306
+ raise ServiceValidationError(
307
+ "Invalid chat IDs",
308
+ translation_domain=DOMAIN,
309
+ translation_key="invalid_chat_ids",
310
+ translation_placeholders={
311
+ "chat_ids": ", ".join(str(chat_id) for chat_id in chat_ids),
312
+ "bot_name": self.config.title,
313
+ },
306
314
  )
307
- return [default_user]
315
+ return valid_chat_ids
308
316
 
309
317
  def _get_msg_kwargs(self, data: dict[str, Any]) -> dict[str, Any]:
310
318
  """Get parameters in message data kwargs."""
@@ -414,9 +422,9 @@ class TelegramNotificationService:
414
422
  """Send one message."""
415
423
  try:
416
424
  out = await func_send(*args_msg, **kwargs_msg)
417
- if not isinstance(out, bool) and hasattr(out, ATTR_MESSAGEID):
425
+ if isinstance(out, Message):
418
426
  chat_id = out.chat_id
419
- message_id = out[ATTR_MESSAGEID]
427
+ message_id = out.message_id
420
428
  self._last_message_id[chat_id] = message_id
421
429
  _LOGGER.debug(
422
430
  "Last message ID: %s (from chat_id %s)",
@@ -424,7 +432,7 @@ class TelegramNotificationService:
424
432
  chat_id,
425
433
  )
426
434
 
427
- event_data = {
435
+ event_data: dict[str, Any] = {
428
436
  ATTR_CHAT_ID: chat_id,
429
437
  ATTR_MESSAGEID: message_id,
430
438
  }
@@ -437,10 +445,6 @@ class TelegramNotificationService:
437
445
  self.hass.bus.async_fire(
438
446
  EVENT_TELEGRAM_SENT, event_data, context=context
439
447
  )
440
- elif not isinstance(out, bool):
441
- _LOGGER.warning(
442
- "Update last message: out_type:%s, out=%s", type(out), out
443
- )
444
448
  except TelegramError as exc:
445
449
  _LOGGER.error(
446
450
  "%s: %s. Args: %s, kwargs: %s", msg_error, exc, args_msg, kwargs_msg
@@ -460,7 +464,7 @@ class TelegramNotificationService:
460
464
  text = f"{title}\n{message}" if title else message
461
465
  params = self._get_msg_kwargs(kwargs)
462
466
  msg_ids = {}
463
- for chat_id in self._get_target_chat_ids(target):
467
+ for chat_id in self.get_target_chat_ids(target):
464
468
  _LOGGER.debug("Send message in chat ID %s with params: %s", chat_id, params)
465
469
  msg = await self._send_msg(
466
470
  self.bot.send_message,
@@ -488,7 +492,7 @@ class TelegramNotificationService:
488
492
  **kwargs: dict[str, Any],
489
493
  ) -> bool:
490
494
  """Delete a previously sent message."""
491
- chat_id = self._get_target_chat_ids(chat_id)[0]
495
+ chat_id = self.get_target_chat_ids(chat_id)[0]
492
496
  message_id, _ = self._get_msg_ids(kwargs, chat_id)
493
497
  _LOGGER.debug("Delete message %s in chat ID %s", message_id, chat_id)
494
498
  deleted: bool = await self._send_msg(
@@ -513,7 +517,7 @@ class TelegramNotificationService:
513
517
  **kwargs: dict[str, Any],
514
518
  ) -> Any:
515
519
  """Edit a previously sent message."""
516
- chat_id = self._get_target_chat_ids(chat_id)[0]
520
+ chat_id = self.get_target_chat_ids(chat_id)[0]
517
521
  message_id, inline_message_id = self._get_msg_ids(kwargs, chat_id)
518
522
  params = self._get_msg_kwargs(kwargs)
519
523
  _LOGGER.debug(
@@ -620,7 +624,7 @@ class TelegramNotificationService:
620
624
 
621
625
  msg_ids = {}
622
626
  if file_content:
623
- for chat_id in self._get_target_chat_ids(target):
627
+ for chat_id in self.get_target_chat_ids(target):
624
628
  _LOGGER.debug("Sending file to chat ID %s", chat_id)
625
629
 
626
630
  if file_type == SERVICE_SEND_PHOTO:
@@ -738,7 +742,7 @@ class TelegramNotificationService:
738
742
 
739
743
  msg_ids = {}
740
744
  if stickerid:
741
- for chat_id in self._get_target_chat_ids(target):
745
+ for chat_id in self.get_target_chat_ids(target):
742
746
  msg = await self._send_msg(
743
747
  self.bot.send_sticker,
744
748
  "Error sending sticker",
@@ -769,7 +773,7 @@ class TelegramNotificationService:
769
773
  longitude = float(longitude)
770
774
  params = self._get_msg_kwargs(kwargs)
771
775
  msg_ids = {}
772
- for chat_id in self._get_target_chat_ids(target):
776
+ for chat_id in self.get_target_chat_ids(target):
773
777
  _LOGGER.debug(
774
778
  "Send location %s/%s to chat ID %s", latitude, longitude, chat_id
775
779
  )
@@ -803,7 +807,7 @@ class TelegramNotificationService:
803
807
  params = self._get_msg_kwargs(kwargs)
804
808
  openperiod = kwargs.get(ATTR_OPEN_PERIOD)
805
809
  msg_ids = {}
806
- for chat_id in self._get_target_chat_ids(target):
810
+ for chat_id in self.get_target_chat_ids(target):
807
811
  _LOGGER.debug("Send poll '%s' to chat ID %s", question, chat_id)
808
812
  msg = await self._send_msg(
809
813
  self.bot.send_poll,
@@ -826,12 +830,12 @@ class TelegramNotificationService:
826
830
 
827
831
  async def leave_chat(
828
832
  self,
829
- chat_id: Any = None,
833
+ chat_id: int | None = None,
830
834
  context: Context | None = None,
831
835
  **kwargs: dict[str, Any],
832
836
  ) -> Any:
833
837
  """Remove bot from chat."""
834
- chat_id = self._get_target_chat_ids(chat_id)[0]
838
+ chat_id = self.get_target_chat_ids(chat_id)[0]
835
839
  _LOGGER.debug("Leave from chat ID %s", chat_id)
836
840
  return await self._send_msg(
837
841
  self.bot.leave_chat, "Error leaving chat", None, chat_id, context=context
@@ -839,14 +843,14 @@ class TelegramNotificationService:
839
843
 
840
844
  async def set_message_reaction(
841
845
  self,
842
- chat_id: int,
843
846
  reaction: str,
847
+ chat_id: int | None = None,
844
848
  is_big: bool = False,
845
849
  context: Context | None = None,
846
850
  **kwargs: dict[str, Any],
847
851
  ) -> None:
848
852
  """Set the bot's reaction for a given message."""
849
- chat_id = self._get_target_chat_ids(chat_id)[0]
853
+ chat_id = self.get_target_chat_ids(chat_id)[0]
850
854
  message_id, _ = self._get_msg_ids(kwargs, chat_id)
851
855
  params = self._get_msg_kwargs(kwargs)
852
856
 
@@ -22,7 +22,7 @@ from homeassistant.config_entries import (
22
22
  )
23
23
  from homeassistant.const import CONF_API_KEY, CONF_PLATFORM, CONF_URL
24
24
  from homeassistant.core import callback
25
- from homeassistant.data_entry_flow import AbortFlow
25
+ from homeassistant.data_entry_flow import AbortFlow, section
26
26
  from homeassistant.helpers import config_validation as cv
27
27
  from homeassistant.helpers.issue_registry import IssueSeverity, async_create_issue
28
28
  from homeassistant.helpers.network import NoURLAvailableError, get_url
@@ -58,6 +58,7 @@ from .const import (
58
58
  PLATFORM_BROADCAST,
59
59
  PLATFORM_POLLING,
60
60
  PLATFORM_WEBHOOKS,
61
+ SECTION_ADVANCED_SETTINGS,
61
62
  SUBENTRY_TYPE_ALLOWED_CHAT_IDS,
62
63
  )
63
64
 
@@ -81,8 +82,15 @@ STEP_USER_DATA_SCHEMA: vol.Schema = vol.Schema(
81
82
  autocomplete="current-password",
82
83
  )
83
84
  ),
84
- vol.Optional(CONF_PROXY_URL): TextSelector(
85
- config=TextSelectorConfig(type=TextSelectorType.URL)
85
+ vol.Required(SECTION_ADVANCED_SETTINGS): section(
86
+ vol.Schema(
87
+ {
88
+ vol.Optional(CONF_PROXY_URL): TextSelector(
89
+ config=TextSelectorConfig(type=TextSelectorType.URL)
90
+ ),
91
+ },
92
+ ),
93
+ {"collapsed": True},
86
94
  ),
87
95
  }
88
96
  )
@@ -98,8 +106,15 @@ STEP_RECONFIGURE_USER_DATA_SCHEMA: vol.Schema = vol.Schema(
98
106
  translation_key="platforms",
99
107
  )
100
108
  ),
101
- vol.Optional(CONF_PROXY_URL): TextSelector(
102
- config=TextSelectorConfig(type=TextSelectorType.URL)
109
+ vol.Required(SECTION_ADVANCED_SETTINGS): section(
110
+ vol.Schema(
111
+ {
112
+ vol.Optional(CONF_PROXY_URL): TextSelector(
113
+ config=TextSelectorConfig(type=TextSelectorType.URL)
114
+ ),
115
+ },
116
+ ),
117
+ {"collapsed": True},
103
118
  ),
104
119
  }
105
120
  )
@@ -197,6 +212,9 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
197
212
  import_data[CONF_TRUSTED_NETWORKS] = ",".join(
198
213
  import_data[CONF_TRUSTED_NETWORKS]
199
214
  )
215
+ import_data[SECTION_ADVANCED_SETTINGS] = {
216
+ CONF_PROXY_URL: import_data.get(CONF_PROXY_URL)
217
+ }
200
218
  try:
201
219
  config_flow_result: ConfigFlowResult = await self.async_step_user(
202
220
  import_data
@@ -293,10 +311,15 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
293
311
  ) -> ConfigFlowResult:
294
312
  """Handle a flow to create a new config entry for a Telegram bot."""
295
313
 
314
+ description_placeholders: dict[str, str] = {
315
+ "botfather_username": "@BotFather",
316
+ "botfather_url": "https://t.me/botfather",
317
+ }
296
318
  if not user_input:
297
319
  return self.async_show_form(
298
320
  step_id="user",
299
321
  data_schema=STEP_USER_DATA_SCHEMA,
322
+ description_placeholders=description_placeholders,
300
323
  )
301
324
 
302
325
  # prevent duplicates
@@ -305,7 +328,6 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
305
328
 
306
329
  # validate connection to Telegram API
307
330
  errors: dict[str, str] = {}
308
- description_placeholders: dict[str, str] = {}
309
331
  bot_name = await self._validate_bot(
310
332
  user_input, errors, description_placeholders
311
333
  )
@@ -328,7 +350,7 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
328
350
  data={
329
351
  CONF_PLATFORM: user_input[CONF_PLATFORM],
330
352
  CONF_API_KEY: user_input[CONF_API_KEY],
331
- CONF_PROXY_URL: user_input.get(CONF_PROXY_URL),
353
+ CONF_PROXY_URL: user_input["advanced_settings"].get(CONF_PROXY_URL),
332
354
  },
333
355
  options={
334
356
  # this value may come from yaml import
@@ -390,12 +412,20 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
390
412
  """Handle config flow for webhook Telegram bot."""
391
413
 
392
414
  if not user_input:
415
+ default_trusted_networks = ",".join(
416
+ [str(network) for network in DEFAULT_TRUSTED_NETWORKS]
417
+ )
418
+
393
419
  if self.source == SOURCE_RECONFIGURE:
420
+ suggested_values = dict(self._get_reconfigure_entry().data)
421
+ if CONF_TRUSTED_NETWORKS not in self._get_reconfigure_entry().data:
422
+ suggested_values[CONF_TRUSTED_NETWORKS] = default_trusted_networks
423
+
394
424
  return self.async_show_form(
395
425
  step_id="webhooks",
396
426
  data_schema=self.add_suggested_values_to_schema(
397
427
  STEP_WEBHOOKS_DATA_SCHEMA,
398
- self._get_reconfigure_entry().data,
428
+ suggested_values,
399
429
  ),
400
430
  )
401
431
 
@@ -404,9 +434,7 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
404
434
  data_schema=self.add_suggested_values_to_schema(
405
435
  STEP_WEBHOOKS_DATA_SCHEMA,
406
436
  {
407
- CONF_TRUSTED_NETWORKS: ",".join(
408
- [str(network) for network in DEFAULT_TRUSTED_NETWORKS]
409
- ),
437
+ CONF_TRUSTED_NETWORKS: default_trusted_networks,
410
438
  },
411
439
  ),
412
440
  )
@@ -440,7 +468,9 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
440
468
  data={
441
469
  CONF_PLATFORM: self._step_user_data[CONF_PLATFORM],
442
470
  CONF_API_KEY: self._step_user_data[CONF_API_KEY],
443
- CONF_PROXY_URL: self._step_user_data.get(CONF_PROXY_URL),
471
+ CONF_PROXY_URL: self._step_user_data[SECTION_ADVANCED_SETTINGS].get(
472
+ CONF_PROXY_URL
473
+ ),
444
474
  CONF_URL: user_input.get(CONF_URL),
445
475
  CONF_TRUSTED_NETWORKS: user_input[CONF_TRUSTED_NETWORKS],
446
476
  },
@@ -455,12 +485,8 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
455
485
  description_placeholders: dict[str, str],
456
486
  ) -> None:
457
487
  # validate URL
458
- if CONF_URL in user_input and not user_input[CONF_URL].startswith("https"):
459
- errors["base"] = "invalid_url"
460
- description_placeholders[ERROR_FIELD] = "URL"
461
- description_placeholders[ERROR_MESSAGE] = "URL must start with https"
462
- return
463
- if CONF_URL not in user_input:
488
+ url: str | None = user_input.get(CONF_URL)
489
+ if url is None:
464
490
  try:
465
491
  get_url(self.hass, require_ssl=True, allow_internal=False)
466
492
  except NoURLAvailableError:
@@ -470,6 +496,11 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
470
496
  "URL is required since you have not configured an external URL in Home Assistant"
471
497
  )
472
498
  return
499
+ elif not url.startswith("https"):
500
+ errors["base"] = "invalid_url"
501
+ description_placeholders[ERROR_FIELD] = "URL"
502
+ description_placeholders[ERROR_MESSAGE] = "URL must start with https"
503
+ return
473
504
 
474
505
  # validate trusted networks
475
506
  csv_trusted_networks: list[str] = []
@@ -505,9 +536,19 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
505
536
  step_id="reconfigure",
506
537
  data_schema=self.add_suggested_values_to_schema(
507
538
  STEP_RECONFIGURE_USER_DATA_SCHEMA,
508
- self._get_reconfigure_entry().data,
539
+ {
540
+ **self._get_reconfigure_entry().data,
541
+ SECTION_ADVANCED_SETTINGS: {
542
+ CONF_PROXY_URL: self._get_reconfigure_entry().data.get(
543
+ CONF_PROXY_URL
544
+ ),
545
+ },
546
+ },
509
547
  ),
510
548
  )
549
+ user_input[CONF_PROXY_URL] = user_input[SECTION_ADVANCED_SETTINGS].get(
550
+ CONF_PROXY_URL
551
+ )
511
552
 
512
553
  errors: dict[str, str] = {}
513
554
  description_placeholders: dict[str, str] = {}
@@ -523,7 +564,12 @@ class TelgramBotConfigFlow(ConfigFlow, domain=DOMAIN):
523
564
  step_id="reconfigure",
524
565
  data_schema=self.add_suggested_values_to_schema(
525
566
  STEP_RECONFIGURE_USER_DATA_SCHEMA,
526
- user_input,
567
+ {
568
+ **user_input,
569
+ SECTION_ADVANCED_SETTINGS: {
570
+ CONF_PROXY_URL: user_input.get(CONF_PROXY_URL),
571
+ },
572
+ },
527
573
  ),
528
574
  errors=errors,
529
575
  description_placeholders=description_placeholders,
@@ -7,7 +7,7 @@ DOMAIN = "telegram_bot"
7
7
  PLATFORM_BROADCAST = "broadcast"
8
8
  PLATFORM_POLLING = "polling"
9
9
  PLATFORM_WEBHOOKS = "webhooks"
10
-
10
+ SECTION_ADVANCED_SETTINGS = "advanced_settings"
11
11
  SUBENTRY_TYPE_ALLOWED_CHAT_IDS = "allowed_chat_ids"
12
12
 
13
13
  CONF_BOT_COUNT = "bot_count"
@@ -2,17 +2,25 @@
2
2
  "config": {
3
3
  "step": {
4
4
  "user": {
5
- "title": "Telegram bot setup",
6
- "description": "Create a new Telegram bot",
5
+ "description": "To create a Telegram bot, follow these steps:\n\n1. Open Telegram and start a chat with [{botfather_username}]({botfather_url}).\n1. Send the command `/newbot`.\n1. Follow the instructions to create your bot and get your API token.",
7
6
  "data": {
8
7
  "platform": "Platform",
9
- "api_key": "[%key:common::config_flow::data::api_key%]",
10
- "proxy_url": "Proxy URL"
8
+ "api_key": "[%key:common::config_flow::data::api_token%]"
11
9
  },
12
10
  "data_description": {
13
11
  "platform": "Telegram bot implementation",
14
- "api_key": "The API token of your bot.",
15
- "proxy_url": "Proxy URL if working behind one, optionally including username and password.\n(socks5://username:password@proxy_ip:proxy_port)"
12
+ "api_key": "The API token of your bot."
13
+ },
14
+ "sections": {
15
+ "advanced_settings": {
16
+ "name": "Advanced settings",
17
+ "data": {
18
+ "proxy_url": "Proxy URL"
19
+ },
20
+ "data_description": {
21
+ "proxy_url": "Proxy URL if working behind one, optionally including username and password.\n(socks5://username:password@proxy_ip:proxy_port)"
22
+ }
23
+ }
16
24
  }
17
25
  },
18
26
  "webhooks": {
@@ -30,12 +38,21 @@
30
38
  "title": "Telegram bot setup",
31
39
  "description": "Reconfigure Telegram bot",
32
40
  "data": {
33
- "platform": "[%key:component::telegram_bot::config::step::user::data::platform%]",
34
- "proxy_url": "[%key:component::telegram_bot::config::step::user::data::proxy_url%]"
41
+ "platform": "[%key:component::telegram_bot::config::step::user::data::platform%]"
35
42
  },
36
43
  "data_description": {
37
- "platform": "[%key:component::telegram_bot::config::step::user::data_description::platform%]",
38
- "proxy_url": "[%key:component::telegram_bot::config::step::user::data_description::proxy_url%]"
44
+ "platform": "[%key:component::telegram_bot::config::step::user::data_description::platform%]"
45
+ },
46
+ "sections": {
47
+ "advanced_settings": {
48
+ "name": "[%key:component::telegram_bot::config::step::user::sections::advanced_settings::name%]",
49
+ "data": {
50
+ "proxy_url": "[%key:component::telegram_bot::config::step::user::sections::advanced_settings::data::proxy_url%]"
51
+ },
52
+ "data_description": {
53
+ "proxy_url": "[%key:component::telegram_bot::config::step::user::sections::advanced_settings::data_description::proxy_url%]"
54
+ }
55
+ }
39
56
  }
40
57
  },
41
58
  "reauth_confirm": {
@@ -895,6 +912,12 @@
895
912
  "missing_allowed_chat_ids": {
896
913
  "message": "No allowed chat IDs found. Please add allowed chat IDs for {bot_name}."
897
914
  },
915
+ "invalid_chat_ids": {
916
+ "message": "Invalid chat IDs: {chat_ids}. Please configure the chat IDs for {bot_name}."
917
+ },
918
+ "failed_chat_ids": {
919
+ "message": "Failed targets: {chat_ids}. Please verify that the chat IDs for {bot_name} have been configured."
920
+ },
898
921
  "missing_input": {
899
922
  "message": "{field} is required."
900
923
  },
@@ -22,7 +22,6 @@
22
22
  },
23
23
  "user": {
24
24
  "data": {
25
- "api_key": "API \u043a\u043b\u044e\u0447",
26
25
  "platform": "\u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430"
27
26
  }
28
27
  },
@@ -24,29 +24,46 @@
24
24
  },
25
25
  "reconfigure": {
26
26
  "data": {
27
- "platform": "Platforma",
28
- "proxy_url": "Adresa URL proxy serveru"
27
+ "platform": "Platforma"
29
28
  },
30
29
  "data_description": {
31
- "platform": "Implementace bota Telegram",
32
- "proxy_url": "Adresa URL proxy serveru, pokud za n\u00edm pracuje, voliteln\u011b v\u010detn\u011b u\u017eivatelsk\u00e9ho jm\u00e9na a hesla. (socks5://username:password@proxy_ip:proxy_port)"
30
+ "platform": "Implementace bota Telegram"
33
31
  },
34
32
  "description": "P\u0159enastavit bota Telegram",
33
+ "sections": {
34
+ "advanced_settings": {
35
+ "data": {
36
+ "proxy_url": "Adresa URL proxy serveru"
37
+ },
38
+ "data_description": {
39
+ "proxy_url": "Adresa URL proxy serveru, pokud za n\u00edm pracuje, voliteln\u011b v\u010detn\u011b u\u017eivatelsk\u00e9ho jm\u00e9na a hesla. (socks5://username:password@proxy_ip:proxy_port)"
40
+ },
41
+ "name": "Pokro\u010dil\u00e1 nastaven\u00ed"
42
+ }
43
+ },
35
44
  "title": "Nastavit bota Telegram"
36
45
  },
37
46
  "user": {
38
47
  "data": {
39
- "api_key": "Kl\u00ed\u010d API",
40
- "platform": "Platforma",
41
- "proxy_url": "Adresa URL proxy serveru"
48
+ "api_key": "Token API",
49
+ "platform": "Platforma"
42
50
  },
43
51
  "data_description": {
44
52
  "api_key": "Token API va\u0161eho bota.",
45
- "platform": "Implementace bota Telegram",
46
- "proxy_url": "Adresa URL proxy serveru, pokud za n\u00edm pracuje, voliteln\u011b v\u010detn\u011b u\u017eivatelsk\u00e9ho jm\u00e9na a hesla. (socks5://username:password@proxy_ip:proxy_port)"
47
- },
48
- "description": "Vytvo\u0159it nov\u00e9ho bota Telegram",
49
- "title": "Nastavit bota Telegram"
53
+ "platform": "Implementace bota Telegram"
54
+ },
55
+ "description": "Chcete-li vytvo\u0159it Telegram bota, postupujte takto:\n \n1. Otev\u0159ete Telegram a zahajte chat s [{botfather_username}]({botfather_url}).\n2. Ode\u0161lete p\u0159\u00edkaz \"/newbot\".\n3. Postupujte podle pokyn\u016f k vytvo\u0159en\u00ed bota a z\u00edsk\u00e1n\u00ed API tokenu.",
56
+ "sections": {
57
+ "advanced_settings": {
58
+ "data": {
59
+ "proxy_url": "Adresa URL proxy serveru"
60
+ },
61
+ "data_description": {
62
+ "proxy_url": "Adresa URL proxy serveru, pokud za n\u00edm pracuje, voliteln\u011b v\u010detn\u011b u\u017eivatelsk\u00e9ho jm\u00e9na a hesla. (socks5://username:password@proxy_ip:proxy_port)"
63
+ },
64
+ "name": "Pokro\u010dil\u00e1 nastaven\u00ed"
65
+ }
66
+ }
50
67
  },
51
68
  "webhooks": {
52
69
  "data": {
@@ -89,12 +106,18 @@
89
106
  "allowlist_external_dirs_error": {
90
107
  "message": "Cesta k souboru nebyla nastavena v allowlist_external_dirs."
91
108
  },
109
+ "failed_chat_ids": {
110
+ "message": "Ne\u00fasp\u011b\u0161n\u00e9 c\u00edle: {chat_ids}. Ov\u011b\u0159te, zda byla nastavena ID chat\u016f pro {bot_name}."
111
+ },
92
112
  "failed_to_load_file": {
93
113
  "message": "Nepoda\u0159ilo se na\u010d\u00edst soubor: {error}"
94
114
  },
95
115
  "failed_to_load_url": {
96
116
  "message": "Nepoda\u0159ilo se na\u010d\u00edst URL: {error}"
97
117
  },
118
+ "invalid_chat_ids": {
119
+ "message": "Neplatn\u00e1 ID chatu: {chat_ids}. Nastavte ID chat\u016f pro {bot_name}."
120
+ },
98
121
  "missing_allowed_chat_ids": {
99
122
  "message": "Nebyla nalezena \u017e\u00e1dn\u00e1 povolen\u00e1 ID chatu. P\u0159idejte povolen\u00e9 ID chatu pro {bot_name}."
100
123
  },
@@ -24,29 +24,46 @@
24
24
  },
25
25
  "reconfigure": {
26
26
  "data": {
27
- "platform": "Plattform",
28
- "proxy_url": "Proxy-URL"
27
+ "platform": "Plattform"
29
28
  },
30
29
  "data_description": {
31
- "platform": "Implementierung des Telegram-Bots",
32
- "proxy_url": "Proxy-URL, wenn du mit einem Proxy arbeitest, optional mit Benutzernamen und Passwort (socks5://benutzername:passwort@proxy_ip:proxy_port)"
30
+ "platform": "Implementierung des Telegram-Bots"
33
31
  },
34
32
  "description": "Telegram-Bot neu konfigurieren",
33
+ "sections": {
34
+ "advanced_settings": {
35
+ "data": {
36
+ "proxy_url": "Proxy-URL"
37
+ },
38
+ "data_description": {
39
+ "proxy_url": "URL des Proxy, wenn hinter einem gearbeitet wird, optional einschlie\u00dflich Benutzername und Passwort.\n(socks5://benutzername:passwort@proxy_ip:proxy_port)"
40
+ },
41
+ "name": "Erweiterte Einstellungen"
42
+ }
43
+ },
35
44
  "title": "Einrichtung des Telegram-Bots"
36
45
  },
37
46
  "user": {
38
47
  "data": {
39
- "api_key": "API-Schl\u00fcssel",
40
- "platform": "Plattform",
41
- "proxy_url": "Proxy-URL"
48
+ "api_key": "API-Token",
49
+ "platform": "Plattform"
42
50
  },
43
51
  "data_description": {
44
52
  "api_key": "Das API-Token deines Bots.",
45
- "platform": "Implementierung des Telegram-Bots",
46
- "proxy_url": "Proxy-URL, wenn du mit einem Proxy arbeitest, optional mit Benutzernamen und Passwort (socks5://benutzername:passwort@proxy_ip:proxy_port)"
47
- },
48
- "description": "Einen neuen Telegram-Bot erstellen",
49
- "title": "Einrichtung des Telegram-Bots"
53
+ "platform": "Implementierung des Telegram-Bots"
54
+ },
55
+ "description": "So erstellst du einen Telegram-Bot:\n\n1. \u00d6ffne Telegram und beginne einen Chat mit [{botfather_username}]({botfather_url}).\n1. Sende den Befehl `/newbot`.\n1. Folge den Anweisungen, um deinen Bot zu erstellen und dein API-Token zu erhalten.",
56
+ "sections": {
57
+ "advanced_settings": {
58
+ "data": {
59
+ "proxy_url": "Proxy-URL"
60
+ },
61
+ "data_description": {
62
+ "proxy_url": "URL des Proxy, wenn hinter einem gearbeitet wird, optional einschlie\u00dflich Benutzername und Passwort.\n(socks5://benutzername:passwort@proxy_ip:proxy_port)"
63
+ },
64
+ "name": "Erweiterte Einstellungen"
65
+ }
66
+ }
50
67
  },
51
68
  "webhooks": {
52
69
  "data": {
@@ -89,12 +106,18 @@
89
106
  "allowlist_external_dirs_error": {
90
107
  "message": "Der Dateipfad wurde in allowlist_external_dirs nicht konfiguriert."
91
108
  },
109
+ "failed_chat_ids": {
110
+ "message": "Fehlgeschlagene Ziele: {chat_ids}. Bitte \u00fcberpr\u00fcfe, ob die Chat-IDs f\u00fcr {bot_name} konfiguriert wurden."
111
+ },
92
112
  "failed_to_load_file": {
93
113
  "message": "Datei konnte nicht geladen werden: {error}"
94
114
  },
95
115
  "failed_to_load_url": {
96
116
  "message": "URL konnte nicht geladen werden: {error}"
97
117
  },
118
+ "invalid_chat_ids": {
119
+ "message": "Ung\u00fcltige Chat-IDs: {chat_ids}. Bitte konfiguriere die Chat-IDs f\u00fcr {bot_name}."
120
+ },
98
121
  "missing_allowed_chat_ids": {
99
122
  "message": "Keine zul\u00e4ssigen Chat-IDs gefunden. Bitte f\u00fcge zul\u00e4ssige Chat-IDs f\u00fcr {bot_name} hinzu."
100
123
  },