├── .dockerignore ├── .env-example ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── Dockerfile ├── Dockerfile_debug ├── Dockerfile_local ├── LICENSE ├── README.md ├── assets └── debug.gif ├── config.py ├── docker-compose.debug.yaml ├── docker-compose.yaml ├── docker-controller-bot.py ├── locale ├── cat.json ├── de.json ├── en.json ├── es.json ├── gl.json ├── it.json ├── nl.json └── ru.json └── requirements.txt /.dockerignore: -------------------------------------------------------------------------------- 1 | **/__pycache__ 2 | **/.venv 3 | **/.classpath 4 | **/.dockerignore 5 | **/.env 6 | **/.git 7 | **/.gitignore 8 | **/.project 9 | **/.settings 10 | **/.toolstarget 11 | **/.vs 12 | **/.vscode 13 | **/*.*proj.user 14 | **/*.dbmdl 15 | **/*.jfm 16 | **/bin 17 | **/charts 18 | **/docker-compose* 19 | **/compose* 20 | **/Dockerfile* 21 | **/node_modules 22 | **/npm-debug.log 23 | **/obj 24 | **/secrets.dev.yaml 25 | **/values.dev.yaml 26 | **/assets 27 | __pycache__ 28 | LICENSE 29 | README.md 30 | -------------------------------------------------------------------------------- /.env-example: -------------------------------------------------------------------------------- 1 | TELEGRAM_TOKEN= 2 | TELEGRAM_ADMIN= 3 | CONTAINER_NAME=docker-controller-bot 4 | TZ=Europe/Madrid 5 | #TELEGRAM_GROUP= 6 | #TELEGRAM_THREAD=1 7 | #TELEGRAM_NOTIFICATION_CHANNEL= 8 | #CHECK_UPDATES=1 9 | #CHECK_UPDATE_EVERY_HOURS=4 10 | #CHECK_UPDATE_STOPPED_CONTAINERS=1 11 | #GROUPED_UPDATES=1 12 | #BUTTON_COLUMNS=2 13 | #LANGUAGE=ES 14 | #EXTENDED_MESSAGES=0 -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # MacOS stuff 2 | .DS_Store 3 | 4 | # Local development files and folders 5 | .env 6 | __pycache__ 7 | cache 8 | schedule -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "name": "Docker: Python - General", 5 | "type": "debugpy", 6 | "request": "attach", 7 | "preLaunchTask": "docker-run: debug", 8 | "connect": { 9 | "host": "localhost", 10 | "port": 5678 11 | }, 12 | "pathMappings": [ 13 | { 14 | "localRoot": "${workspaceFolder}", 15 | "remoteRoot": "/app" 16 | } 17 | ], 18 | } 19 | ] 20 | } -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "type": "docker-build", 6 | "label": "docker-build", 7 | "platform": "python", 8 | "dockerBuild": { 9 | "tag": "dockercontrollerbot:dev", 10 | "dockerfile": "${workspaceFolder}/Dockerfile_debug", 11 | "context": "${workspaceFolder}" 12 | } 13 | }, 14 | { 15 | "type": "shell", 16 | "label": "docker-run: debug", 17 | "dependsOn": [ 18 | "docker-build" 19 | ], 20 | "command": "docker compose --env-file .env -f docker-compose.debug.yaml up -d --remove-orphans --force-recreate" 21 | } 22 | ] 23 | } -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21.3 2 | 3 | ENV TELEGRAM_THREAD=1 4 | ENV CHECK_UPDATES=1 5 | ENV CHECK_UPDATE_EVERY_HOURS=4 6 | ENV CHECK_UPDATE_STOPPED_CONTAINERS=1 7 | ENV GROUPED_UPDATES=1 8 | ENV BUTTON_COLUMNS=2 9 | ENV LANGUAGE=ES 10 | ENV EXTENDED_MESSAGES=0 11 | ENV TZ=UTC 12 | 13 | ARG VERSION=3.7.0 14 | 15 | WORKDIR /app 16 | RUN wget https://github.com/dgongut/docker-controller-bot/archive/refs/tags/v${VERSION}.tar.gz -P /tmp 17 | RUN tar -xf /tmp/v${VERSION}.tar.gz 18 | RUN mv docker-controller-bot-${VERSION}/docker-controller-bot.py /app 19 | RUN mv docker-controller-bot-${VERSION}/config.py /app 20 | RUN mv docker-controller-bot-${VERSION}/locale /app 21 | RUN mv docker-controller-bot-${VERSION}/requirements.txt /app 22 | RUN rm /tmp/v${VERSION}.tar.gz 23 | RUN rm -rf docker-controller-bot-${VERSION}/ 24 | RUN apk add --no-cache python3 py3-pip tzdata 25 | RUN export PIP_BREAK_SYSTEM_PACKAGES=1; pip3 install --no-cache-dir -Ur /app/requirements.txt 26 | 27 | ENTRYPOINT ["python3", "docker-controller-bot.py"] -------------------------------------------------------------------------------- /Dockerfile_debug: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21.3 2 | 3 | ENV TELEGRAM_THREAD=1 4 | ENV CHECK_UPDATES=1 5 | ENV CHECK_UPDATE_EVERY_HOURS=4 6 | ENV CHECK_UPDATE_STOPPED_CONTAINERS=1 7 | ENV GROUPED_UPDATES=1 8 | ENV BUTTON_COLUMNS=2 9 | ENV LANGUAGE=ES 10 | ENV EXTENDED_MESSAGES=0 11 | ENV TZ=UTC 12 | 13 | WORKDIR /app 14 | 15 | RUN apk add --no-cache python3 py3-pip tzdata 16 | COPY requirements.txt /app/requirements.txt 17 | RUN export PIP_BREAK_SYSTEM_PACKAGES=1; pip3 install --no-cache-dir -Ur /app/requirements.txt && pip install debugpy -t /tmp 18 | 19 | CMD ["python3", "docker-controller-bot.py"] -------------------------------------------------------------------------------- /Dockerfile_local: -------------------------------------------------------------------------------- 1 | FROM alpine:3.21.3 2 | 3 | ENV TELEGRAM_THREAD=1 4 | ENV CHECK_UPDATES=1 5 | ENV CHECK_UPDATE_EVERY_HOURS=4 6 | ENV CHECK_UPDATE_STOPPED_CONTAINERS=1 7 | ENV GROUPED_UPDATES=1 8 | ENV BUTTON_COLUMNS=2 9 | ENV LANGUAGE=ES 10 | ENV EXTENDED_MESSAGES=0 11 | ENV TZ=UTC 12 | 13 | WORKDIR /app 14 | 15 | RUN apk add --no-cache python3 py3-pip tzdata npm 16 | COPY requirements.txt /app/requirements.txt 17 | RUN export PIP_BREAK_SYSTEM_PACKAGES=1; pip3 install --no-cache-dir -Ur /app/requirements.txt && pip install debugpy -t /tmp 18 | RUN npm install -g nodemon 19 | 20 | ENTRYPOINT ["nodemon", "--legacy-watch", "docker-controller-bot.py"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # docker-controller-bot 2 | [![](https://badgen.net/badge/icon/github?icon=github&label)](https://github.com/dgongut/docker-controller-bot) 3 | [![](https://badgen.net/badge/icon/docker?icon=docker&label)](https://hub.docker.com/r/dgongut/docker-controller-bot) 4 | [![](https://badgen.net/badge/icon/telegram?icon=telegram&label)](https://t.me/dockercontrollerbotnews) 5 | [![Docker Pulls](https://badgen.net/docker/pulls/dgongut/docker-controller-bot?icon=docker&label=pulls)](https://hub.docker.com/r/dgongut/docker-controller-bot/) 6 | [![Docker Stars](https://badgen.net/docker/stars/dgongut/docker-controller-bot?icon=docker&label=stars)](https://hub.docker.com/r/dgongut/docker-controller-bot/) 7 | [![Docker Image Size](https://badgen.net/docker/size/dgongut/docker-controller-bot?icon=docker&label=image%20size)](https://hub.docker.com/r/dgongut/docker-controller-bot/) 8 | ![Github stars](https://badgen.net/github/stars/dgongut/docker-controller-bot?icon=github&label=stars) 9 | ![Github forks](https://badgen.net/github/forks/dgongut/docker-controller-bot?icon=github&label=forks) 10 | ![Github last-commit](https://img.shields.io/github/last-commit/dgongut/docker-controller-bot) 11 | ![Github last-commit](https://badgen.net/github/license/dgongut/docker-controller-bot) 12 | ![alt text](https://github.com/dgongut/pictures/blob/main/Docker-Controller-Bot/mockup.png) 13 | 14 | Lleva el control de tus contenedores docker desde un único lugar. 15 | 16 | - ✅ Listar contenedores 17 | - ✅ Arrancar, parar y eliminar contenedores 18 | - ✅ Obtener los logs tanto de manera directa como a través de fichero 19 | - ✅ Extraer el docker-compose de tus contenedores 20 | - ✅ Notificaciones cuando un contenedor se cae o se inicia 21 | - ✅ Notificaciones cuando un contenedor tiene una actualización pendiente 22 | - ✅ Actualizaciones de los contenedores 23 | - ✅ Cambiar el tag (rollback o actualización) 24 | - ✅ Limpia el sistema, eliminado contenedores, imagenes y otros objetos no utilizados. 25 | - ✅ Soporte de idiomas (Spanish, English, Dutch, German, Russian, Galician, Italian, Catalan) 26 | 27 | ¿Lo buscas en [![](https://badgen.net/badge/icon/docker?icon=docker&label)](https://hub.docker.com/r/dgongut/docker-controller-bot)? 28 | 29 | **NUEVO** Canal de novedades en [![](https://badgen.net/badge/icon/telegram?icon=telegram&label)](https://t.me/dockercontrollerbotnews) 30 | 31 | 🖼️ Si deseas establecerle el icono al bot de telegram, te dejo [aquí](https://raw.githubusercontent.com/dgongut/pictures/main/Docker-Controller-Bot/Docker-Controller-Bot.png) el icono en alta resolución. Solo tienes que descargarlo y mandárselo al [BotFather](https://t.me/BotFather) en la opción de BotPic. 32 | 33 | ## Configuración en config.py 34 | 35 | | CLAVE | OBLIGATORIO | VALOR | 36 | |:------------- |:---------------:| :-------------| 37 | |TELEGRAM_TOKEN |✅| Token del bot | 38 | |TELEGRAM_ADMIN |✅| ChatId del administrador (se puede obtener hablándole al bot [Rose](https://t.me/MissRose_bot) escribiendo /id). Admite múltiples administradores separados por comas. Por ejemplo 12345,54431,55944 | 39 | |TELEGRAM_GROUP |❌| ChatId del grupo. Si este bot va a formar parte de un grupo, es necesario especificar el chatId de dicho grupo. Es necesario que el bot sea administrador del grupo | 40 | |TELEGRAM_THREAD |❌| Thread del tema dentro de un supergrupo; valor numérico (2,3,4..). Por defecto 1. Se utiliza en conjunción con la variable TELEGRAM_GROUP | 41 | |TELEGRAM_NOTIFICATION_CHANNEL |❌| Canal donde se publicarán exclusivamente los cambios de estado de los contenedores | 42 | |CONTAINER_NAME |✅| Nombre del contenedor, lo que se le ponga en container_name en el docker-compose ha de ir aquí también | 43 | |TZ |✅| Timezone (Por ejemplo Europe/Madrid) | 44 | |CHECK_UPDATES |❌| Si se desea que compruebe actualizaciones. 0 no - 1 sí. Por defecto 1| 45 | |CHECK_UPDATE_EVERY_HOURS |❌| Tiempo de espera en horas entre chequeo de actualizaciones. Por defecto 4 | 46 | |CHECK_UPDATE_STOPPED_CONTAINERS |❌| Si se desea que compruebe las actualizaciones de los contenedores detenidos. 0 no - 1 sí. Por defecto 1 | 47 | |GROUPED_UPDATES |❌| Si se desea que agrupe los mensajes de las actualizaciones en uno solo. 0 no - 1 sí. Por defecto 1 | 48 | |BUTTON_COLUMNS |❌| Numero de columnas de botones en las listas de contenedores. Por defecto 2 | 49 | |LANGUAGE |❌| Idioma, puede ser ES / EN / NL / DE / RU / GL / IT / CAT. Por defecto ES (Spanish) | 50 | |EXTENDED_MESSAGES |❌| Si se desea que muestre más mensajes de información. 0 no - 1 sí. Por defecto 0 | 51 | 52 | ### Anotaciones 53 | > [!WARNING] 54 | > Será necesario mapear un volumen para almacenar lo que el bot escribe en /app/schedule 55 | 56 | > [!NOTE] 57 | > Si se requiere tener la sesión iniciada en algún registro como DockerHub, GitHub Registry o alguno privado (docker login) es posible trasladar ese login al contenedor mapeando el `~/.docker/config.json` a `/root/.docker/config.json` 58 | 59 | ### Ejemplo de Docker-Compose para su ejecución normal 60 | 61 | ```yaml 62 | version: '3.3' 63 | services: 64 | docker-controller-bot: 65 | environment: 66 | - TELEGRAM_TOKEN= 67 | - TELEGRAM_ADMIN= 68 | - CONTAINER_NAME=docker-controller-bot 69 | - TZ=Europe/Madrid 70 | #- TELEGRAM_GROUP= 71 | #- TELEGRAM_THREAD=1 72 | #- TELEGRAM_NOTIFICATION_CHANNEL= 73 | #- CHECK_UPDATES=1 74 | #- CHECK_UPDATE_EVERY_HOURS=4 75 | #- CHECK_UPDATE_STOPPED_CONTAINERS=1 76 | #- GROUPED_UPDATES=1 77 | #- BUTTON_COLUMNS=2 78 | #- LANGUAGE=ES 79 | #- EXTENDED_MESSAGES=0 80 | volumes: 81 | - /var/run/docker.sock:/var/run/docker.sock # NO CAMBIAR 82 | - /ruta/para/guardar/las/programaciones:/app/schedule # CAMBIAR LA PARTE IZQUIERDA 83 | #- ~/.docker/config.json:/root/.docker/config.json # Solo si se requiere iniciar sesión en algún registro 84 | image: dgongut/docker-controller-bot:latest 85 | container_name: docker-controller-bot 86 | restart: always 87 | network_mode: host 88 | tty: true 89 | ``` 90 | 91 | ### Funciones Extra mediante Labels/Etiquetas en otros contenedores 92 | 93 | - Añadiendo la etiqueta `DCB-Ignore-Check-Updates` a un contenedor, no se comprobarán actualizaciones para él. 94 | - Añadiendo la etiqueta `DCB-Auto-Update` a un contenedor, se actualizará automáticamente sin preguntar. 95 | 96 | ### Agradecimientos 97 | 98 | - Traducción al neerlandés: [ManCaveMedia](https://github.com/ManCaveMedia) 99 | - Traducción al alemán: [shedowe19](https://github.com/shedowe19) 100 | - Traducción al ruso: [leyalton](https://github.com/leyalton) 101 | - Traducción al gallego: [monfero](https://github.com/monfero) 102 | - Traducción al italiano: [zichichi](https://github.com/zichichi) 103 | - Traducción al catalán: [flancky](https://t.me/flancky) 104 | - Pruebas del Docker Login: [garanda](https://github.com/garanda21) 105 | --- 106 | 107 | ## Solo para desarrolladores 108 | 109 | ### Ejecución con código local 110 | 111 | Para su ejecución en local y probar nuevos cambios de código, se necesita renombrar el fichero `.env-example` a `.env` con los valores necesarios para su ejecución. 112 | Es necesario establecer un `TELEGRAM_TOKEN` y un `TELEGRAM_ADMIN` correctos y diferentes al de la ejecución normal. 113 | 114 | La estructura de carpetas debe quedar: 115 | 116 | ``` 117 | docker-controller-bot/ 118 | ├── .env 119 | ├── .gitignore 120 | ├── LICENSE 121 | ├── requirements.txt 122 | ├── README.md 123 | ├── config.py 124 | ├── docker-controller-bot.py 125 | ├── Dockerfile_local 126 | ├── docker-compose.yaml 127 | └── locale 128 | ├── en.json 129 | ├── es.json 130 | ├── de.json 131 | ├── ru.json 132 | ├── gl.json 133 | ├── nl.json 134 | ├── cat.json 135 | └── it.json 136 | ``` 137 | 138 | Para levantarlo habría que ejecutar en esa ruta: `docker compose -f docker-compose.debug.yaml up -d --build --force-recreate` 139 | Para detenerlo y eliminarlo: `docker compose down --rmi` 140 | 141 | Para probar nuevos cambios bastaría con guardar. Los cambios se refrescan en caliente. 142 | 143 | ### Depuración con VS Code 144 | 145 | Abre la carpeta del repositorio en [Visual Studio Code](https://code.visualstudio.com/) necesitaras las siguientes extensiones instaladas en VS Code: 146 | 147 | - [Docker](https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker) 148 | - [Python](https://marketplace.visualstudio.com/items?itemName=ms-python.python) 149 | 150 | #### Instalación de las extensiones 151 | 152 | 1. Abre VS Code. 153 | 2. Ve a la extensión de la barra lateral y busca "Docker" y "Python". 154 | 3. Instala ambas extensiones desde el Marketplace. 155 | 156 | #### Establecer Puntos de Parada (Breakpoints) 157 | 158 | 1. Abre el archivo de código que deseas depurar. 159 | 2. Haz clic en el margen izquierdo junto a la línea de código donde quieras establecer un punto de parada. Aparecerá un punto rojo indicando el `breakpoint`. 160 | 161 | #### Iniciar la Depuración 162 | 163 | 1. Ve al menú `Run` y selecciona `Start Debugging` o presiona `F5`. 164 | 2. VS Code arrancará el `docker-compose.debug.yaml` y comenzará la depuración. 165 | 3. La ventana de depuración se abrirá en la parte inferior, mostrando las variables, la pila de llamadas y la consola de depuración. 166 | 167 | ![Depuracion](assets/debug.gif) 168 | 169 | #### Conclusión de la Depuración 170 | 171 | - Para detener la sesión de depuración, ve a `Run > Stop Debugging` o presiona `Shift+F5` 172 | -------------------------------------------------------------------------------- /assets/debug.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dgongut/docker-controller-bot/125976e6df6093363a459ba482702d156c44428d/assets/debug.gif -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # DOCKER ENVIRONMENT VARIABLES 4 | TELEGRAM_TOKEN = os.environ.get("TELEGRAM_TOKEN") 5 | TELEGRAM_ADMIN = os.environ.get("TELEGRAM_ADMIN") 6 | TELEGRAM_GROUP = os.environ.get("TELEGRAM_GROUP") 7 | TELEGRAM_NOTIFICATION_CHANNEL = os.environ.get("TELEGRAM_NOTIFICATION_CHANNEL") 8 | TELEGRAM_THREAD = os.environ.get("TELEGRAM_THREAD") 9 | CHECK_UPDATES = bool(int(os.environ.get("CHECK_UPDATES"))) 10 | CHECK_UPDATE_EVERY_HOURS = float(os.environ.get("CHECK_UPDATE_EVERY_HOURS")) 11 | CHECK_UPDATE_STOPPED_CONTAINERS = bool(int(os.environ.get("CHECK_UPDATE_STOPPED_CONTAINERS"))) 12 | CONTAINER_NAME = os.environ.get("CONTAINER_NAME") 13 | LANGUAGE = os.environ.get("LANGUAGE") 14 | EXTENDED_MESSAGES = bool(int(os.environ.get("EXTENDED_MESSAGES"))) 15 | BUTTON_COLUMNS = int(os.environ.get("BUTTON_COLUMNS")) 16 | GROUPED_UPDATES = bool(int(os.environ.get("GROUPED_UPDATES"))) 17 | 18 | # CONSTANTS 19 | UPDATER_IMAGE = "dgongut/docker-container-updater:latest" 20 | UPDATER_CONTAINER_NAME = "UPDATER-Docker-Controler-Bot" 21 | CONTAINER_ID_LENGTH = 5 22 | ANONYMOUS_USER_ID = "1087968824" 23 | SCHEDULE_PATH = "/app/schedule" 24 | SCHEDULE_FILE = "schedule.txt" 25 | MUTE_FILE = ".muted_until" 26 | FULL_SCHEDULE_PATH = f'{SCHEDULE_PATH}/{SCHEDULE_FILE}' 27 | FULL_MUTE_FILE_PATH = f'{SCHEDULE_PATH}/{MUTE_FILE}' 28 | DONORS_URL = "https://donate.dgongut.com/donors.json" 29 | 30 | # LABELS 31 | LABEL_IGNORE_CHECK_UPDATES = "DCB-Ignore-Check-Updates" 32 | LABEL_AUTO_UPDATE = "DCB-Auto-Update" 33 | 34 | docker_architectures = { 35 | "x86_64": "amd64", 36 | "i386": "i386", 37 | "386": "386", 38 | "amd64": "amd64", 39 | "arm": "arm32v7", 40 | "arm64": "arm64", 41 | "ppc64le": "ppc64le", 42 | "s390x": "s390x", 43 | "unknown": "unknown", 44 | } 45 | -------------------------------------------------------------------------------- /docker-compose.debug.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | dockercontrollerbot: 3 | container_name: ${CONTAINER_NAME} # NO CAMBIAR 4 | image: dockercontrollerbot:dev 5 | build: 6 | context: . 7 | dockerfile: ./Dockerfile_debug 8 | command: ["sh", "-c", "pip install debugpy -t /tmp && python /tmp/debugpy --wait-for-client --listen 0.0.0.0:5678 /app/docker-controller-bot.py "] 9 | ports: 10 | - 5678:5678 11 | env_file: 12 | - .env 13 | volumes: 14 | - /var/run/docker.sock:/var/run/docker.sock # NO CAMBIAR 15 | - ./:/app # CAMBIAR LA PARTE IZQUIERDA -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | 2 | services: 3 | test-docker-controller-bot: 4 | container_name: ${CONTAINER_NAME} # NO CAMBIAR 5 | env_file: 6 | - .env 7 | volumes: 8 | - /var/run/docker.sock:/var/run/docker.sock # NO CAMBIAR 9 | - ./:/app # CAMBIAR LA PARTE IZQUIERDA 10 | build: 11 | context: . 12 | dockerfile: ./Dockerfile_local 13 | tty: true -------------------------------------------------------------------------------- /locale/cat.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Actiu", 3 | "already_updated": "✅ El contenidor *$1* està actualitzat", 4 | "already_updated_all": "✅ Tots els contenidors semblen estar actualitzats", 5 | "auto_update": "⬆️ *Actualització detectada*:\n*$1*\nS'actualitza automàticament.", 6 | "available_update": "⬆️ *Actualització disponible*:\n*$1*", 7 | "available_updates": "⬆️ *Actualitzacions disponibles*:\n*$1*", 8 | "button_cancel": "❌ - Cancel·lar", 9 | "button_close": "❌ - Tancar", 10 | "button_confirm": "⚠️ - Sí", 11 | "button_confirm_change_tag": "⚠️ - Sí, canviar a $1", 12 | "button_confirm_delete": "⚠️ - Sí, eliminar", 13 | "button_confirm_update": "⬆️ - Sí, actualitzar", 14 | "button_containers": "Contenidors", 15 | "button_delete": "❌ - Eliminar", 16 | "button_images": "Imatges", 17 | "button_networks": "Xarxes", 18 | "button_update": "⬆️ - Actualitzar", 19 | "button_update_all": "⬆️ - Actualitzar tot", 20 | "button_volumes": "Volúmens", 21 | "change_tag": "⚙️ Selecciona un nou tag per el contenidor *$1*.", 22 | "change_tag_container": "⚙️ Prem en un contenidor per canviar el seu tag", 23 | "channel": "📰 [Novetats](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Comprovar actualitzacions", 25 | "compose": "📃 El docker-compose de $1. Recorda, aquesta funció es troba en fase _experimental_.", 26 | "confirm_change_tag": "⚠️ ¿Estàs segur de que vols canviar el tag del contenidor *$1* a `$2`?\n\nRecorda, aquesta funció es troba en fase _experimental_.", 27 | "confirm_delete": "⚠️ ¿Estàs segur de que vols eliminar el contenidor *$1*?\n\nAquesta acció no es pot desfer.", 28 | "confirm_prune_containers": "🗑️ ¿Està segur que desitja eliminar tots els contenidors detinguts/no utilitzats?\n\nAquesta operació no pot desfer-se.", 29 | "confirm_prune_images": "🗑️ ¿Està segur que desitja eliminar totes les imatges no associades a un contenidor actiu?\n\nAquesta operació no pot desfer-se.", 30 | "confirm_prune_networks": "🗑️ ¿Està segur que desitja eliminar totes les xarxes no associades a un contenidor actiu?\n\nAquesta operació no pot desfer-se.", 31 | "confirm_prune_volumes": "🗑️ ¿Està segur que desitja eliminar tots els volúmens no associats a un contenidor actiu?\n\nAquesta operació no pot desfer-se.", 32 | "confirm_update_all": "⚠️ Estàs segur que vols actualitzar els següents contenidors?\n*$1*\nSempre es recomana comprovar si la configuració actual és compatible amb la nova versió del contenidor.\n\nAquesta acció no es pot desfer des del bot.", 33 | "confirm_update": "⚠️ ¿Estàs segur que vols actualitzar el contenidor *$1* amb la nova imatge disponible?\n\nSempre es recomana comprovar si la configuració actual es compatible amb la nova versió del contenidor.\n\nAquesta acció no es pot desfer des del bot.", 34 | "container_does_not_exist": "❌ El contenidor *$1* no existeix", 35 | "container_id": "ID del contenidor", 36 | "created_container": "🔵 El contenidor *$1* s'ha *creat*", 37 | "debug_auto_update": "Actualitzant automàticament el contenidor $1", 38 | "debug_checking_update": "Comprovant actualizació: $1 ($2): imatge LOCAL [$3] - imatge REMOTA [$4]", 39 | "debug_container_deleting_old_container": "Eliminant contenidor antic $1", 40 | "debug_container_found": "Contenidor [$1] trobat", 41 | "debug_container_need_to_be_started": "El contenidor estava iniciat anteriorment, l'inicio.", 42 | "debug_container_not_found": "Contenidor [$1] no trobat", 43 | "debug_creating_new_container": "Creant el contenidor amb la nova imatge [$1]", 44 | "debug_deleted": "Eliminat: [$1]", 45 | "debug_deleting_image": "Eliminant la imatge [$1]", 46 | "debug_disabled_update_daemon": "Dimoni d'actualitzacions desactivat", 47 | "debug_find_container": "Buscant id del contenidor [$1]", 48 | "debug_ignore_check_for_update": "Comprovant actualizació: $1 omés", 49 | "debug_image_can_not_be_deleted": "La imatge local de $1 no pot eliminarse. Motiu: [$2]", 50 | "debug_muted_message": "Missatge [$1] omés per estar silenciat", 51 | "debug_notifying_update": "Notificant l'actualizació...", 52 | "debug_pulled_image": "Pull de $1 completat", 53 | "debug_pulling_image": "Fent pull de la imatge [$1]", 54 | "debug_renaming_old_container": "Renombrant antic contenidor abans d'eliminar-l'ho [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Dimoni de les programacions activat", 56 | "debug_started_update_daemon": "Dimoni d'actualitzacions activat", 57 | "debug_starting_bot": "Arrencant Docker-Controler-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "Dimoni de monitorització de estat activat", 59 | "debug_stopping_container": "El contenidor $1 està en execució. Es detindrà.", 60 | "debug_update_already_notified": "Ja es va avisar d'aquesta actualizació. No es notifica.", 61 | "debug_update_detected": "¡Actualizació de $1 detectada! Eliminant la imatge descarregada [$2]", 62 | "debug_update_not_cached": "S'ha consultat per la actualizació de $1 y no està disponible: [$2]", 63 | "debug_updated_container": "Contenidor $1 actualitzat.", 64 | "debug_updating_container": "Actualitzant contenidor $1", 65 | "debug_waiting_next_check_updates": "Comprovacions d'actualitzacions complertes, esperant $1 hores.", 66 | "delete_container": "⚠️ Prem un contenidor per eliminiar-l'ho.\nAquesta acció no pot desfer-se.", 67 | "delete_schedule": "🗑️ Prem una programaciò per eliminar-la", 68 | "deleted_container": "✅ Contenidor *$1* eliminat amb éxit.", 69 | "deleted_schedule": "✅ Programaciò eliminada correctament.\n```CRON $1```", 70 | "deleting": "_Eliminant_ *$1*...", 71 | "donate": "Aquest projecte es de codi obert i el realitzo al meu temps de lleure. La donació no habilitarà cap funció extra. Es simplement, una manera ideal d'agraïr el treball que un projecte com aquest porta al darrera..\nSi desitjas fer-ho, [fes click aquí](https://donate.dgongut.com).\nMil gràcies ❤️", 72 | "donors_list": "🦸 *Herois de Docker Controller Bot*\n\n$1\n\n_Gràcies a tots per fer servir el bot! Un agraïment especial a aquests herois per la seva generositat i esperit altruista en fer una donació amb el comandament /donate. El vostre suport fa la diferència! 🚀💙_", 73 | "empty_schedule": "No hi ha programacions emmagatzemades.\n\nUso:\n/schedule CRON run/stop/restart contenidor\n/schedule CRON mute minuts\n\nExemple:\n/schedule 0 1 * * * start meucontenidor\n/schedule 30 4 * * * mute 5\n\nSi no estàs familiaritzat amb les sentencies CRON, aquí tens una web per generarla d'acord als teus desitjos seguint l'Estàndar.", 74 | "error_adding_schedule": "❌ Sembla que la instrucció introduida no segueix el format correcte. Introduit: $1\n\nUso:\n/schedule CRON run/stop/restart contenidor\n/schedule CRON mute minuts\n\nExemple:\n/schedule 0 1 * * * start meucontenidor\n/schedule 30 4 * * * mute 5\n\nSi no estàs familiaritzat amb les sentencies CRON, aquí tens una web per generarla d'acord als teus desitjos seguint l'Estàndar.", 75 | "error_bot_container_name": "Es necessita configurar el nom del contenidor a la variable CONTAINER_NAME", 76 | "error_bot_telegram_admin": "Es necessita configurar el chatId del usuari que interactuará amb el bot amb la variable TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "No pots ser anónim per controlar el bot. A la variable TELEGRAM_ADMIN has de posar el teu user id.", 78 | "error_bot_telegram_thread": "La variable TELEGRAM_THREAD es el tema dintre d'un supergrup, es un valor numéric. S'ha configurat com $1.", 79 | "error_bot_token": "Es necessita configurar el token del bot amb la variable TELEGRAM_TOKEN", 80 | "error_can_not_do_that": "❌ No es pot fer aixó.", 81 | "error_checking_label_with_error": "No s'ha pogut comprovar la label $1 del contenidor $2. Error: [$3]", 82 | "error_checking_update_with_error": "No s'ha pogut comprovar l'actualizació: [$1]", 83 | "error_creating_new_container_with_error": "Error al crear i/o executar el nou contenidor. La informació del contenidor es: [$1]", 84 | "error_deleting_container": "❌ No s'ha pogut eliminar el contenidor *$1*. Consulta els logs del bot per major informació.", 85 | "error_deleting_container_with_error": "No s'ha pogut eliminar el contenidor $1. Error: [$2]", 86 | "error_deleting_from_file_with_error": "No s'ha pogut eliminar la línea del fitxer. Error: [$1]", 87 | "error_getting_architecture": "Error al obtindre l'arquitectura del sistema. Error: [$1]", 88 | "error_getting_donors": "❌ No s'han pogut obtenir els donants. Torna-ho a provar més tard.", 89 | "error_getting_donors_with_error": "No s'han pogut obtenir els donants. Torna-ho a provar més tard. Error: [$1]", 90 | "error_getting_tags": "❌ No s'han pogut obtindre els tags de *$1*. Repositori no suportat en aquest moment.", 91 | "error_getting_tags_with_error": "Error al obtindre els tags de $1. Error: [$2]", 92 | "error_monitor_daemon": "S'ha produit un error en el Dimoni d'events. Rellensant... Error: [$1]", 93 | "error_multiple_admin_only_with_group": "Només es poden especificar varis administradors si es fa servir en un grup (utilitzant la variable TELEGRAM_GROUP)", 94 | "error_prune_containers": "❌ S'ha produit un error eliminant els contenidors no utilitzats. Consulta els logs del bot per major informació.", 95 | "error_prune_containers_with_error": "S'ha produit un error eliminant els contenidors no utilitzats. Error: [$1]", 96 | "error_prune_images": "❌ S'ha produit un error eliminant les imatges no utilitzades. Consulta els logs del bot per major informació.", 97 | "error_prune_images_with_error": "S'ha produit un error eliminant les imatges no utilitzades. Error: [$1]", 98 | "error_prune_networks": "❌ S'ha produit un error eliminant les xarxes no utilitzades. Consulta els logs del bot per major informació.", 99 | "error_prune_networks_with_error": "S'ha produit un error eliminant les xarxes no utilitzades. Error: [$1]", 100 | "error_prune_volumes": "❌ S'ha produit un error eliminant els volumens no utilitzats. Consulta els logs del bot per major informació.", 101 | "error_prune_volumes_with_error": "S'ha produit un error eliminant els volumens no utilitzats. Error: [$1]", 102 | "error_reading_schedule_file": "S'ha produit un error processant el fitxer de les programacions. Error: [$1]", 103 | "error_renaming_container": "❌ No s'ha pogut renombrar el contenidor *$1*. Consulta els logs del bot per major informació.", 104 | "error_renaming_container_with_error": "No s'ha pogut renombrar el contenidor $1. Error: [$2]", 105 | "error_restarting_container": "❌ No s'ha pogut reiniciar el contenidor *$1*. Consulta els logs del bot per major informació.", 106 | "error_restarting_container_with_error": "No s'ha pogut reiniciar el contenidor $1. Error: [$2]", 107 | "error_schedule_daemon": "S'ha produit un error en el Dimoni de les programacions. Rellensant... Error: [$1]", 108 | "error_sending_document": "No s'ha pogut enviar el document a $1. Error: [$2]", 109 | "error_sending_message": "No s'ha pogut enviar el missatge a $1: $2. Error: [$3]", 110 | "error_sending_updates": "No s'ha pogut actualitzar el contenidor $1. Error: [$2]", 111 | "error_showing_compose_container": "❌ No s'ha pogut mostrar el docker compose del contenidor *$1*. Consulta els logs del bot per major informació.", 112 | "error_showing_compose_container_with_error": "No s'ha pogut mostrar el docker compose del contenidor $1. Error: [$2]", 113 | "error_showing_info_container": "❌ No s'ha pogut mostrar la informació del contenidor *$1*. Consulta els logs del bot per major informació.", 114 | "error_showing_info_container_with_error": "No s'ha pogut mostrar la informació del contenidor $1. Error: [$2]", 115 | "error_showing_logs_container": "❌ No s'han pogut mostrar els logs del contenidor *$1*. Consulta els logs del bot per major informació.", 116 | "error_showing_logs_container_with_error": "No s'han pogut mostrar els logs del contenidor $1. Error: [$2]", 117 | "error_starting_container": "❌ No s'ha pogut iniciar el contenidor *$1*. Consulta els logs del bot per major informació.", 118 | "error_starting_container_with_error": "No s'ha pogut iniciar el contenidor $1. Error: [$2]", 119 | "error_stats_not_available": "Estadístiques del contenidor $1 no disponibles. Error: [$2]", 120 | "error_stopping_container": "❌ No s'ha pogut aturar el contenidor *$1*. Consulta els logs del bot per major informació.", 121 | "error_stopping_container_with_error": "No s'ha pogut aturar el contenidor $1. Error: [$2]", 122 | "error_tag_name_too_long": "Error al afegir un tag a la lista per ser massa llarg. Contenidor: [$1]. Tag: [$2].", 123 | "error_update_daemon": "S'ha produit un error en el Dimoni d'actualitzacions. Rellensant... Error: [$1]", 124 | "error_updating_container": "❌ No s'ha pogut actualitzar el contenidor *$1*. Consulta els logs del bot per major informació.", 125 | "error_updating_container_with_error": "No s'ha pogut actualitzar el contenidor $1. Error: [$2]", 126 | "error_use_mute_command": "❌ Si us plau, proporciona un número vàlid de minuts.\n · Uso: /mute \nPer desactivar fes servir /mute 0", 127 | "error_use_mute_schedule": "❌ Si us plau, proporciona un número vàlid de minuts.\n · Uso: /schedule CRON mute ", 128 | "error_writing_cache_with_error": "Error al escriure en caché. Clave [$1]", 129 | "image_id": "ID de la imatge", 130 | "information": "Informació de", 131 | "loading_file": "_Carregant arxiu... Espera si us plau_", 132 | "logs": "📃 Logs de $1", 133 | "menu": "*🫡 Docker Controller Bot al seu servei*\n\nComandes disponibles:\n\n · /list Llistat complert dels contenidors.\n · /run Inicia un contenidor.\n · /stop Atura un contenidor.\n · /restart Reinicia un contenidor.\n · /delete Elimina un contenidor.\n · /checkupdate Actualitza un contenidor.\n · /updateall Actualitza tots els contenidors.\n · /changetag Canvia el tag d'un contenidor. ⚠️\n · /logs Mostra els últims logs d'un contenidor.\n · /logfile Mostra els últims logs d'un contenidor en format fitxer.\n · /schedule Módul de programacions\n · /compose Extreu el docker-compose d'un contenidor. ⚠️\n · /prune Neteja objectes no utilitzats al sistema.\n· /mute Silencia les notificacions un temps.\n · /info Mostra informació d'un contenidor.\n · /version Mostra la versió actual.\n · /donate Dona al programador.\n · /donors Herois de Docker-Controller-Bot.\n\n⚠️ Aquesta funció es troba en fase _experimental_.", 134 | "menu_change_tag": "Canvia el tag d'un contenidor", 135 | "menu_compose": "Extreu el docker-compose d'un contenidor", 136 | "menu_delete": "Elimina un contenidor", 137 | "menu_donate": "Dona al programador", 138 | "menu_donors": "Herois de DCB", 139 | "menu_info": "Mostra informació d'un contenidor", 140 | "menu_list": "Llistat complert dels contenidors", 141 | "menu_logfile": "Mostra els logs complerts d'un contenidor en format fitxer", 142 | "menu_logs": "Mostra els últims logs d'un contenidor", 143 | "menu_mute": " Silencia les notificacions", 144 | "menu_prune": "Prune et permet eliminar els objectes sense fer servir al sistema. \n\nSi us plau, selecciona el tipus d'objecte a netejar.", 145 | "menu_restart": "Reinicia un contenidor", 146 | "menu_run": "Inicia un contenidor", 147 | "menu_schedule": "Módul de programacions", 148 | "menu_start": "Menú principal", 149 | "menu_stop": "Atura un contenidor", 150 | "menu_update": "Actualitza un contenidor", 151 | "menu_update_all": "Actualitza tots els contenidors", 152 | "menu_version": "Mostra la versió actual", 153 | "muted": "🔇 Bot silenciat per $1 minuts", 154 | "muted_singular": "🔇 Bot silenciat per 1 minut", 155 | "NEED_UPDATE_CONTAINER_TEXT": "actualizació disponible ⬆️", 156 | "obtaining_info": "_Obtenint informació de_ *$1*...", 157 | "prune_containers": "✅ Contenidors no utilitzats eliminats", 158 | "prune_images": "✅ Imatges no utilitzades eliminades", 159 | "prune_networks": "✅ Xarxes no utilitzades eliminades", 160 | "prune_system": "🗑️ Neteja objectes no utilitzats al sistema.\n\nSi us plau, esculli el tipus d'objecte a eliminar:", 161 | "prune_volumes": "✅ Volumens no utilitzats eliminats", 162 | "restart_a_container": "🟢 Prem en un contenidor per reiniciarlo", 163 | "restarted_container": "🟢 El contenidor *$1* S'ha *reiniciat*", 164 | "restarting": "_Reiniciant_ *$1*...", 165 | "run_command": "Executant [$1]", 166 | "run_command_for_container": "Executant [$1] de [$2]", 167 | "schedule_saved": "✅ Programaciò emmagatzemada.\n```CRON $1```", 168 | "self_update_message": "⚙️ Ara el bot es reiniciarà.\n\nEspera un moment si us plau, aixó pot trigar fins 1 minut.\n\nEl bot avisarà quan torni a estar disponible.", 169 | "show_compose": "📃 Prem en un contenidor per veure el seu docker-compose.\n\nAquesta funció es troba en fase *experimental* y pot tenir errors, es recomana verificar el docker-compose.", 170 | "show_info": "📜 Prem en un contenidor per veure la seva informació.", 171 | "show_logs": "📃 Prem en un contenidor per veure els seus últims logs", 172 | "show_logsfile": "📃 Prem en un contenidor per veure els seus logs en mode fitxer", 173 | "showing_logs": "📃 Aquests son els últims logs de *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Prem en un contenidor per iniciarlo", 175 | "started_container": "🟢 El contenidor *$1* S'ha *iniciat*", 176 | "starting": "_Iniciant_ *$1*...", 177 | "status": "Estat", 178 | "stop_a_container": "🔴 Prem en un contenidor per aturar-l'ho", 179 | "stopped_container": "🔴 El contenidor *$1* S'ha *aturat*", 180 | "stopping": "_Aturant_ *$1*...", 181 | "unmuted": "🔉 Bot torna a notificar", 182 | "update_container": "⚠️ Prem en un contenidor per actualitzar-l'ho.", 183 | "updated_container": "✅ Contenidor *$1* actualitzat amb éxit.", 184 | "UPDATED_CONTAINER_TEXT": "Contenidor actualitzat ✅", 185 | "updating": "_Actualizant_ *$1*...", 186 | "updating_creating": "_Actualizant_ *$1*...\nCreant contenidor...", 187 | "updating_deleting_old": "_Actualitzant_ *$1*...\nEliminant contenidor antic...", 188 | "updating_downloading": "_Actualitzant_ *$1*...\nDescarregant...", 189 | "updating_starting": "_Actualitzant_ *$1*...\nIniciant contenidor...", 190 | "updating_stopping": "_Actualitzant_ *$1*...\nAturant contenidor...", 191 | "used_image": "Imatge usada", 192 | "user_not_admin": "❌ Aquest bot no et pertany.\n\nSi vols controlar els teus contenidors Docker a través de Telegram desplegam al teu servidor.\n\nMira a [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) a on trobaràs un docker-compose. \n\n¿Ets curios? El codi està publicat a [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSi tens dubtes, preguntam, sóc @dgongut", 193 | "version": "⚙️ _Versió: $1_\nProgramat amb ❤️ per @dgongut\n\nSi trobes qualsevol error o sugerencia contactam.\n\nPots trobar tot ho relacionat amb aquest bot a [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) o a [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSi vols entrar al canal de noticies [haz click aquí](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "L'suari $1 (@$2) no es un administrador y ha tractat de fer servir el bot." 195 | } -------------------------------------------------------------------------------- /locale/de.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Aktiv", 3 | "already_updated": "✅ *$1* Container ist auf dem neuesten Stand", 4 | "already_updated_all": "✅ Alle Container scheinen aktualisiert zu sein", 5 | "auto_update": "⬆️ *Update erkannt*:\n*$1*\nUpdate automatisch durchgeführt.", 6 | "available_update": "⬆️ *Verfügbares update*:\n*$1*", 7 | "available_updates": "⬆️ *Verfügbare updates*:\n*$1*", 8 | "button_cancel": "❌ - Abbrechen", 9 | "button_close": "❌ - Schließen", 10 | "button_confirm": "⚠️ - Ja", 11 | "button_confirm_change_tag": "⚠️ - Ja, ändere auf $1", 12 | "button_confirm_delete": "⚠️ - Ja, löschen", 13 | "button_confirm_update": "⬆️ - Ja, aktualisieren", 14 | "button_containers": "Container", 15 | "button_delete": "❌ - Löschen", 16 | "button_images": "Images", 17 | "button_networks": "Netzwerke", 18 | "button_update": "⬆️ - Aktualisieren", 19 | "button_update_all": "⬆️ - Alles aktualisieren", 20 | "button_volumes": "Volumes", 21 | "change_tag": "⚙️ Wähle einen neuen Tag für *$1*.", 22 | "change_tag_container": "⚙️ Klicke auf einen Container, um den Tag zu ändern", 23 | "channel": "📰 [Changelog (auf Spanisch)](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Nach Updates suchen", 25 | "compose": "📃 Das $1 docker-compose. Denke daran, diese Funktion befindet sich in der _experimentellen_ Phase.", 26 | "confirm_change_tag": "⚠️ Bist du sicher, dass du den Tag des Containers *$1* auf `$2` ändern möchtest?\n\n⚠️ Denke daran, diese Funktion befindet sich in der _experimentellen_ Phase.", 27 | "confirm_delete": "⚠️ Bist du sicher, dass du den Container *$1* löschen möchtest?\n\nDiese Aktion kann nicht rückgängig gemacht werden.", 28 | "confirm_prune_containers": "🗑️ Der Befehl ermöglicht das Entfernen ungenutzter/gestoppter Container. Bist du sicher, dass du alle ungenutzten Container entfernen möchtest?\n\nDieser Vorgang kann nicht rückgängig gemacht werden.", 29 | "confirm_prune_images": "🗑️ Der Befehl ermöglicht das Entfernen ungenutzter Images. Bist du sicher, dass du alle Volumes entfernen möchtest, die nicht mit einem aktiven Container verbunden sind?\n\nDieser Vorgang kann nicht rückgängig gemacht werden.", 30 | "confirm_prune_networks": "🗑️ Der Befehl ermöglicht das Entfernen ungenutzter Netzwerke. Bist du sicher, dass du alle Volumes entfernen möchtest, die nicht mit einem aktiven Container verbunden sind?\n\nDieser Vorgang kann nicht rückgängig gemacht werden.", 31 | "confirm_prune_volumes": "🗑️ Der Befehl ermöglicht das Entfernen ungenutzter Volumes. Bist du sicher, dass du alle Volumes entfernen möchtest, die nicht mit einem aktiven Container verbunden sind?\n\nDieser Vorgang kann nicht rückgängig gemacht werden.", 32 | "confirm_update_all": "⚠️ Bist du sicher, dass du die folgenden Container aktualisieren möchtest?\n*$1*\nEs wird immer empfohlen, zu überprüfen, ob die aktuelle Konfiguration mit der neuen Version des Containers kompatibel ist.\n\nDiese Aktion kann im Bot nicht rückgängig gemacht werden", 33 | "confirm_update": "⚠️ Bist du sicher, dass du den Container *$1* mit dem neuen verfügbaren Image aktualisieren möchtest?\n\nEs wird empfohlen, die aktuelle Konfiguration auf Kompatibilität mit der neuen Version zu überprüfen.\n\nDiese Aktion kann nicht über den Bot rückgängig gemacht werden.", 34 | "container_does_not_exist": "❌ Container *$1* existiert nicht", 35 | "container_id": "Container-ID", 36 | "created_container": "🔵 Container *$1* wurde *erstellt*", 37 | "debug_auto_update": "Aktualisiere Container $1 automatisch", 38 | "debug_checking_update": "Prüfe Update: $1 ($2): LOKALES IMAGE [$3] - REMOTES IMAGE [$4]", 39 | "debug_container_deleting_old_container": "Lösche alten Container $1", 40 | "debug_container_found": "Container [$1] gefunden", 41 | "debug_container_need_to_be_started": "Der Container wurde zuvor gestartet, ich starte ihn.", 42 | "debug_container_not_found": "Container [$1] nicht gefunden", 43 | "debug_creating_new_container": "Erstelle den Container mit dem neuen Image [$1]", 44 | "debug_deleted": "Gelöscht: [$1]", 45 | "debug_deleting_image": "Lösche Image [$1]", 46 | "debug_disabled_update_daemon": "Update-Daemon deaktiviert", 47 | "debug_find_container": "Finde Container-ID [$1]", 48 | "debug_ignore_check_for_update": "Prüfe Update: $1 übersprungen", 49 | "debug_image_can_not_be_deleted": "Lokales Image von $1 kann nicht gelöscht werden. Grund: [$2]", 50 | "debug_muted_message": "Nachricht [$1] übersprungen, da stummgeschaltet", 51 | "debug_notifying_update": "Benachrichtige über das Update...", 52 | "debug_pulled_image": "$1 Pull abgeschlossen", 53 | "debug_pulling_image": "Ziehe Image [$1]", 54 | "debug_renaming_old_container": "Benenne alten Container vor dem Löschen um [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Zeitplan-Daemon aktiviert", 56 | "debug_started_update_daemon": "Update-Daemon aktiviert", 57 | "debug_starting_bot": "Docker-Controler-Bot (v$1) startet", 58 | "debug_starting_monitor_daemon": "Zustandsüberwachungs-Daemon aktiviert", 59 | "debug_stopping_container": "Container $1 läuft. Er wird gestoppt.", 60 | "debug_update_already_notified": "Dieses Update wurde bereits gemeldet. Es wird nicht erneut benachrichtigt.", 61 | "debug_update_detected": "$1 Update erkannt! Lösche heruntergeladenes Image [$2]", 62 | "debug_update_not_cached": "Nach Update $1 gesucht und es ist nicht verfügbar: [$2]", 63 | "debug_updated_container": "Container $1 aktualisiert.", 64 | "debug_updating_container": "Aktualisiere Container $1", 65 | "debug_waiting_next_check_updates": "Update-Überprüfungen abgeschlossen, warte $1 Stunden.", 66 | "delete_container": "⚠️ Klicke auf einen Container, um ihn zu löschen.\nDiese Aktion kann nicht rückgängig gemacht werden.", 67 | "delete_schedule": "🗑️ Klicke auf einen Zeitplan, um ihn zu löschen", 68 | "deleted_container": "✅ Container *$1* erfolgreich gelöscht.", 69 | "deleted_schedule": "✅ Zeitplan erfolgreich gelöscht.\n```CRON $1```", 70 | "deleting": "_Lösche_ *$1*...", 71 | "donate": "Dieses Projekt ist Open Source und ich mache es in meiner Freizeit. Spenden ermöglichen keine zusätzlichen Funktionen. Es ist einfach eine Möglichkeit, sich für die Arbeit hinter einem Projekt wie diesem zu bedanken. Wenn du das tun möchtest, [klicke hier](https://donate.dgongut.com). Vielen Dank ❤️", 72 | "donors_list": "🦸 *Helden von Docker Controller Bot*\n\n$1\n\n_Vielen Dank an alle, die den Bot verwenden! Ein besonderer Dank geht an diese Helden für ihre Großzügigkeit und ihren altruistischen Geist, indem sie mit dem Befehl /donate eine Spende gemacht haben. Eure Unterstützung macht den Unterschied! 🚀💙_", 73 | "empty_schedule": "Es sind keine gespeicherten Zeitpläne vorhanden.\n\nVerwendung:\n/schedule CRON run/stop/restart container\n/schedule CRON mute minutes\n\nBeispiel:\n/schedule 0 1 * * * start meincontainer\n/schedule 30 4 * * * mute 5\n\nWenn du nicht mit CRON-Anweisungen vertraut bist, hier findest du eine Website, um sie nach dem Standard zu erstellen.", 74 | "error_adding_schedule": "❌ Es scheint, dass die eingegebene Anweisung nicht dem richtigen Format entspricht. Eingegeben: $1\n\nVerwendung:\n/schedule CRON run/stop/restart container\n\nBeispiel:\n/schedule 0 1 * * * start meincontainer\n/schedule 30 4 * * * mute 5\n\nWenn du nicht mit CRON-Anweisungen vertraut bist, hier findest du eine Website, um sie nach dem Standard zu erstellen.", 75 | "error_bot_container_name": "Der Containername muss in der Variable CONTAINER_NAME gesetzt werden", 76 | "error_bot_telegram_admin": "Du musst die chatId des Benutzers konfigurieren, der mit dem Bot interagieren wird, indem du die TELEGRAM_ADMIN-Variable verwendest", 77 | "error_bot_telegram_admin_anonymous": "Du kannst nicht anonym sein, um den Bot zu steuern. In der Variable TELEGRAM_ADMIN musst du deine Benutzer-ID eintragen.", 78 | "error_bot_telegram_thread": "Die Variable TELEGRAM_THREAD ist der Thread innerhalb einer Supergruppe, es handelt sich um einen numerischen Wert. Es wurde auf $1 gesetzt.", 79 | "error_bot_token": "Du musst das Bot-Token mit der TELEGRAM_TOKEN-Variable konfigurieren", 80 | "error_can_not_do_that": "❌ Das kann nicht gemacht werden.", 81 | "error_checking_label_with_error": "Konnte Label $1 des Containers $2 nicht überprüfen. Fehler: [$3]", 82 | "error_checking_update_with_error": "Konnte Update nicht überprüfen: [$1]", 83 | "error_creating_new_container_with_error": "Fehler beim Erstellen und/oder Ausführen des neuen Containers. Die Containerinformationen sind: [$1]", 84 | "error_deleting_container": "❌ Fehler beim Löschen des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 85 | "error_deleting_container_with_error": "Konnte Container $1 nicht löschen. Fehler: [$2]", 86 | "error_deleting_from_file_with_error": "Fehler beim Löschen der Zeile aus der Datei. Fehler: [$1]", 87 | "error_getting_architecture": "Fehler beim Abrufen der Systemarchitektur. Fehler: [$1]", 88 | "error_getting_donors": "❌ Konnte die Spender nicht erreichen. Versuchen Sie es später.", 89 | "error_getting_donors_with_error": "Konnte die Spender nicht erreichen. Versuchen Sie es später. Fehler: [$1]", 90 | "error_getting_tags": "❌ Konnte Tags von *$1* nicht abrufen. Repository wird derzeit nicht unterstützt.", 91 | "error_getting_tags_with_error": "Fehler beim Abrufen der $1 Tags. Fehler: [$2]", 92 | "error_monitor_daemon": "Es ist ein Fehler im Ereignis-Daemon aufgetreten. Neustart... Fehler: [$1]", 93 | "error_multiple_admin_only_with_group": "Mehrere Administratoren können nur angegeben werden, wenn sie in einer Gruppe verwendet werden (unter Verwendung der TELEGRAM_GROUP-Variable)", 94 | "error_prune_containers": "❌ Ein Fehler ist beim Löschen ungenutzter Container aufgetreten. Weitere Informationen findest du in den Bot-Logs.", 95 | "error_prune_containers_with_error": "Ein Fehler ist beim Löschen ungenutzter Container aufgetreten. Fehler: [$1]", 96 | "error_prune_images": "❌ Ein Fehler ist beim Löschen ungenutzter Images aufgetreten. Weitere Informationen findest du in den Bot-Logs.", 97 | "error_prune_images_with_error": "Ein Fehler ist beim Löschen ungenutzter Images aufgetreten. Fehler: [$1]", 98 | "error_prune_networks": "❌ Ein Fehler ist beim Löschen ungenutzter Netzwerke aufgetreten. Weitere Informationen findest du in den Bot-Logs.", 99 | "error_prune_networks_with_error": "Ein Fehler ist beim Löschen ungenutzter Netzwerke aufgetreten. Fehler: [$1]", 100 | "error_prune_volumes": "❌ Ein Fehler ist beim Löschen ungenutzter Volumes aufgetreten. Weitere Informationen findest du in den Bot-Logs.", 101 | "error_prune_volumes_with_error": "Ein Fehler ist beim Löschen ungenutzter Volumes aufgetreten. Fehler: [$1]", 102 | "error_reading_schedule_file": "Es ist ein Fehler beim Verarbeiten der Zeitplandatei aufgetreten. Fehler: [$1]", 103 | "error_renaming_container": "❌ Fehler beim Umbenennen des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 104 | "error_renaming_container_with_error": "Konnte Container $1 nicht umbenennen. Fehler: [$2]", 105 | "error_restarting_container": "❌ Fehler beim Neustart des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 106 | "error_restarting_container_with_error": "Konnte Container $1 nicht neu starten. Fehler: [$2]", 107 | "error_schedule_daemon": "Es ist ein Fehler im Zeitplan-Daemon aufgetreten. Neustart... Fehler: [$1]", 108 | "error_sending_document": "Konnte Dokument nicht an $1 senden. Fehler: [$2]", 109 | "error_sending_message": "Konnte Nachricht nicht an $1 senden: $2. Fehler: [$3]", 110 | "error_sending_updates": "Konnte Container $1 nicht aktualisieren. Fehler: [$2]", 111 | "error_showing_compose_container": "❌ Konnte docker-compose für den Container *$1* nicht anzeigen. Weitere Informationen findest du in den Bot-Logs.", 112 | "error_showing_compose_container_with_error": "Konnte docker-compose für Container $1 nicht anzeigen. Fehler: [$2]", 113 | "error_showing_info_container": "❌ Konnte die Informationen für den Container *$1* nicht anzeigen. Weitere Informationen findest du in den Bot-Logs.", 114 | "error_showing_info_container_with_error": "Konnte Informationen für Container $1 nicht anzeigen. Fehler: [$2]", 115 | "error_showing_logs_container": "❌ Konnte die Logs für den Container *$1* nicht anzeigen. Weitere Informationen findest du in den Bot-Logs.", 116 | "error_showing_logs_container_with_error": "Die Logs für den Container $1 konnten nicht angezeigt werden. Fehler: [$2]", 117 | "error_starting_container": "❌ Fehler beim Starten des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 118 | "error_starting_container_with_error": "Konnte Container $1 nicht starten. Fehler: [$2]", 119 | "error_stats_not_available": "Statistiken für Container $1 nicht verfügbar. Fehler: [$2]", 120 | "error_stopping_container": "❌ Fehler beim Stoppen des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 121 | "error_stopping_container_with_error": "Konnte Container $1 nicht stoppen. Fehler: [$2]", 122 | "error_tag_name_too_long": "Fehler beim Hinzufügen eines Tags zur Liste, da er zu lang ist. Container: [$1]. Tag: [$2].", 123 | "error_update_daemon": "Es ist ein Fehler im Update-Daemon aufgetreten. Neustart... Fehler: [$1]", 124 | "error_updating_container": "❌ Fehler beim Aktualisieren des Containers *$1*. Weitere Informationen findest du in den Bot-Logs.", 125 | "error_updating_container_with_error": "Konnte Container $1 nicht aktualisieren. Fehler: [$2]", 126 | "error_use_mute_command": "❌ Bitte gib eine gültige Anzahl von Minuten an.\n · Verwendung: /mute \nZum Deaktivieren /mute 0 verwenden", 127 | "error_use_mute_schedule": "❌ Bitte gib eine gültige Anzahl von Minuten an\n · Verwendung: /schedule CRON mute .", 128 | "error_writing_cache_with_error": "Fehler beim Schreiben in den Cache. Schlüssel [$1]", 129 | "image_id": "Image-ID", 130 | "information": "Informationen zu", 131 | "loading_file": "_Datei wird geladen... Bitte warten_", 132 | "logs": "📃 $1 Logs", 133 | "menu": "*🫡 Docker Controller Bot zu Diensten*\n\nVerfügbare Befehle:\n\n · /list Komplette Liste der Container.\n · /run Startet einen Container.\n · /stop Stoppt einen Container.\n · /restart Startet einen Container neu.\n · /delete Löscht einen Container.\n · /checkupdate Aktualisiert einen Container.\n · /updateall Alle Container aktualisieren.\n · /changetag Ändert den Tag eines Containers. ⚠️\n · /logs Zeigt die letzten Logs eines Containers an.\n · /logfile Zeigt die letzten Logs eines Containers im Dateiformat an.\n · /schedule Zeitplanmodul.\n · /compose Extrahiert das docker-compose eines Containers. ⚠️\n · /prune Bereinigt ungenutzte Objekte auf dem System.\n · /mute Benachrichtigungen stummschalten.\n · /info Zeigt Informationen zu einem Container an.\n · /version Zeigt die aktuelle Version an.\n · /donate Spenden an den Entwickler\n · /donors Helden von Docker-Controller-Bot\n\n⚠️ Diese Funktion befindet sich in der _experimentellen_ Phase.", 134 | "menu_change_tag": "Container-Tag ändern", 135 | "menu_compose": "Docker-Compose aus einem Container extrahieren", 136 | "menu_delete": "Container löschen", 137 | "menu_donate": "Spenden an den Entwickler", 138 | "menu_donors": "Helden von DCB", 139 | "menu_info": "Zeigt Informationen zu einem Container an", 140 | "menu_list": "Komplette Liste der Container", 141 | "menu_logfile": "Zeigt die vollständigen Logs eines Containers im Dateiformat an", 142 | "menu_logs": "Zeigt die letzten Logs eines Containers an", 143 | "menu_mute": " Benachrichtigungen stummschalten", 144 | "menu_prune": "Prune ermöglicht das Entfernen ungenutzter Objekte vom System.\n\nBitte wähle den Typ des zu entfernenden Objekts aus.", 145 | "menu_restart": "Container neu starten", 146 | "menu_run": "Container starten", 147 | "menu_schedule": "Zeitplanmodul", 148 | "menu_start": "Hauptmenü", 149 | "menu_stop": "Container stoppen", 150 | "menu_update": "Container aktualisieren", 151 | "menu_update_all": "Alle Container aktualisieren", 152 | "menu_version": "Zeigt die aktuelle Version an", 153 | "muted": "🔇 Bot für $1 Minuten stummgeschaltet", 154 | "muted_singular": "🔇 Bot für 1 Minute stummgeschaltet", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Update verfügbar ⬆️", 156 | "obtaining_info": "_Informationen werden von_ *$1* _abgerufen_...", 157 | "prune_containers": "✅ Ungenutzte Container gelöscht", 158 | "prune_images": "✅ Ungenutzte Images gelöscht", 159 | "prune_networks": "✅ Ungenutzte Netzwerke gelöscht", 160 | "prune_system": "🗑️ Bereinigt ungenutzte Systemobjekte.\n\nBitte wähle den Typ des zu entfernenden Objekts:", 161 | "prune_volumes": "✅ Ungenutzte Volumes gelöscht", 162 | "restart_a_container": "🟢 Klicke auf einen Container, um ihn neu zu starten", 163 | "restarted_container": "🟢 Container *$1* wurde *neu gestartet*", 164 | "restarting": "_Starte_ *$1* _neu_...", 165 | "run_command": "Führe aus [$1]", 166 | "run_command_for_container": "Führe [$1] von [$2] aus", 167 | "schedule_saved": "✅ Zeitplan gespeichert.\n```CRON $1```", 168 | "self_update_message": "⚙️ Der Bot wird jetzt neu gestartet.\n\nBitte warte einen Moment, dies kann bis zu 1 Minute dauern.\n\nDer Bot wird dich benachrichtigen, wenn er wieder verfügbar ist.", 169 | "show_compose": "📃 Klicke auf einen Container, um dessen Docker-Compose anzuzeigen.\n\nDiese Funktion befindet sich in der *experimentellen* Phase und kann Fehler enthalten. Es wird empfohlen, das Docker-Compose zu überprüfen.", 170 | "show_info": "📜 Klicke auf einen Container, um dessen Informationen anzuzeigen.", 171 | "show_logs": "📃 Klicke auf einen Container, um dessen letzte Logs anzuzeigen", 172 | "show_logsfile": "📃 Klicke auf einen Container, um dessen Logs im Dateiformat anzuzeigen", 173 | "showing_logs": "📃 Dies sind die neuesten Logs für den Container *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Klicke auf einen Container, um ihn zu starten", 175 | "started_container": "🟢 Container *$1* wurde *gestartet*", 176 | "starting": "_Starte_ *$1*...", 177 | "status": "Status", 178 | "stop_a_container": "🔴 Klicke auf einen Container, um ihn zu stoppen", 179 | "stopped_container": "🔴 Container *$1* wurde *gestoppt*", 180 | "stopping": "_Stoppe_ *$1*...", 181 | "unmuted": "🔉 Bot sendet wieder Benachrichtigungen", 182 | "update_container": "⚠️ Klicke auf einen Container, um ihn zu aktualisieren", 183 | "updated_container": "✅ Container *$1* erfolgreich aktualisiert.", 184 | "UPDATED_CONTAINER_TEXT": "Container auf dem neuesten Stand ✅", 185 | "updating": "_Aktualisiere_ *$1*...", 186 | "updating_creating": "_Aktualisiere_ *$1*...\nErstelle Container...", 187 | "updating_deleting_old": "_Aktualisiere_ *$1*...\nLösche alten Container...", 188 | "updating_downloading": "_Aktualisiere_ *$1*...\nHerunterladen...", 189 | "updating_starting": "_Aktualisiere_ *$1*...\nStarte Container...", 190 | "updating_stopping": "_Aktualisiere_ *$1*...\nStoppe Container...", 191 | "used_image": "Verwendetes Image", 192 | "user_not_admin": "❌ Dieser Bot gehört nicht dir.\n\nWenn du deine Docker-Container über Telegram steuern möchtest, deploye mich auf deinem Server.\n\nSchau auf [DockerHub](https://hub.docker.com /r/dgongut/docker-controller-bot) vorbei, dort findest du ein docker-compose.\n\nBist du neugierig? Der Code ist auf [GitHub](https://github.com/dgongut/docker-controller- bot) veröffentlicht.\n\nWenn du Fragen hast, frag mich, ich bin @dgongut", 193 | "version": "⚙️ _Version: $1_\nEntwickelt mit ❤️ von @dgongut\n\nWenn du Fehler findest oder Vorschläge hast, kontaktiere mich.\n\nAlles rund um diesen Bot findest du auf [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) oder auf [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nUm den News-Kanal auf Spanisch zu sehen, [klicke hier](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "Benutzer $1 (@$2) ist kein Administrator und hat versucht, den Bot zu verwenden." 195 | } -------------------------------------------------------------------------------- /locale/en.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Active", 3 | "already_updated": "✅ *$1* container is up to date", 4 | "already_updated_all": "✅ All containers seem to be up to date", 5 | "auto_update": "⬆️ *Update detected*:\n*$1\n*Update automatically.", 6 | "available_update": "⬆️ *Update available*:\n*$1*", 7 | "available_updates": "⬆️ *Updates available*:\n*$1*", 8 | "button_cancel": "❌ - Cancel", 9 | "button_close": "❌ - Close", 10 | "button_confirm": "⚠️ - Yes", 11 | "button_confirm_change_tag": "⚠️ - Yes, change it to $1", 12 | "button_confirm_delete": "⚠️ - Yes, delete", 13 | "button_confirm_update": "⬆️ - Yes, update", 14 | "button_containers": "Containers", 15 | "button_delete": "❌ - Delete", 16 | "button_images": "Images", 17 | "button_networks": "Networks", 18 | "button_update": "⬆️ - Update", 19 | "button_update_all": "⬆️ - Update all", 20 | "button_volumes": "Volumes", 21 | "change_tag": "⚙️ Select a new tag for *$1*.", 22 | "change_tag_container": "⚙️ Click on a container to change its tag", 23 | "channel": "📰 [Changelog (in spanish)](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Check for updates", 25 | "compose": "📃 The $1 docker-compose. Remember, this feature is in _experimental_ phase.", 26 | "confirm_change_tag": "⚠️ Are you sure you want to change the *$1*'s container tag to `$2`?\n\n⚠️ Remember, this feature is in _experimental_ phase.", 27 | "confirm_delete": "⚠️ Are you sure you want to delete container *$1*?\n\nThis action cannot be undone.", 28 | "confirm_prune_containers": "🗑️ The command allows you to remove unused/stopped containers, Are you sure you want to remove all containers unused?\n\nThis operation cannot be undone.", 29 | "confirm_prune_images": "🗑️ The command allows you to remove unused images, Are you sure you want to remove all volumes not associated with an active container?\n\nThis operation cannot be undone.", 30 | "confirm_prune_networks": "🗑️ The command allows you to remove unused networks, Are you sure you want to remove all volumes not associated with an active container?\n\nThis operation cannot be undone.", 31 | "confirm_prune_volumes": "🗑️ The command allows you to remove unused volumes used, Are you sure you want to delete all volumes not associated with an active container?\n\nThis operation cannot be undone.", 32 | "confirm_update": "⚠️ Are you sure you want to update container *$1* with the new available image?\n\nIt is always recommended to check if the current configuration is compatible with the new version of the container.\n\nThis action is not can be undone from the bot.", 33 | "confirm_update_all": "⚠️ Are you sure you want to update the following containers? *$1*\n\nIt is always recommended to check if the current configuration is compatible with the new version of the container.\n\nThis action is not can be undone from the bot.", 34 | "container_does_not_exist": "❌ Container *$1* doesn't exist", 35 | "container_id": "Container ID", 36 | "created_container": "🔵 Container *$1* has been *created*", 37 | "debug_auto_update": "Automatically updating the $1 container", 38 | "debug_checking_update": "Checking update: $1 ($2): LOCAL IMAGE [$3] - REMOTE IMAGE [$4]", 39 | "debug_container_deleting_old_container": "Deleting old container $1", 40 | "debug_container_found": "Container [$1] found", 41 | "debug_container_need_to_be_started": "The container was previously started, I start it.", 42 | "debug_container_not_found": "Container [$1] not found", 43 | "debug_creating_new_container": "Creating the container with the new image [$1]", 44 | "debug_deleted": "Deleted: [$1]", 45 | "debug_deleting_image": "Deleting image [$1]", 46 | "debug_disabled_update_daemon": "Update daemon disabled", 47 | "debug_find_container": "Finding container id [$1]", 48 | "debug_ignore_check_for_update": "Checking update: $1 omitted", 49 | "debug_image_can_not_be_deleted": "Local image of $1 cannot be deleted. Reason: [$2]", 50 | "debug_muted_message": "Message [$1] omitted because muted", 51 | "debug_notifying_update": "Notifying about the update...", 52 | "debug_pulled_image": "$1 pull completed", 53 | "debug_pulling_image": "Pulling image [$1]", 54 | "debug_renaming_old_container": "Renaming old container before deleting [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Schedules daemon activated", 56 | "debug_started_update_daemon": "Update daemon activated", 57 | "debug_starting_bot": "Starting Docker-Controler-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "State monitoring daemon enabled", 59 | "debug_stopping_container": "Container $1 is running. It will be stopped.", 60 | "debug_update_already_notified": "This update has already been reported. It is not notified.", 61 | "debug_update_detected": "$1 update detected! Deleting downloaded image [$2]", 62 | "debug_update_not_cached": "Queried for update $1 and it is not available: [$2]", 63 | "debug_updated_container": "Container $1 updated.", 64 | "debug_updating_container": "Updating container $1", 65 | "debug_waiting_next_check_updates": "Update checks completed, waiting $1 hours.", 66 | "delete_container": "⚠️ Click on a container to delete it.\nThis action cannot be undone.", 67 | "delete_schedule": "🗑️ Click on a schedule to delete it", 68 | "deleted_container": "✅ Container *$1* successfully deleted.", 69 | "deleted_schedule": "✅ Schedule successfully deleted.\n```CRON $1```", 70 | "deleting": "_Deleting_ *$1*...", 71 | "donate": "This project is open source and I do it in my spare time. Donating will not enable any extra features. It is simply an ideal way to say thank you for the work behind a project like this. If you wish to do so, [click here](https://donate.dgongut.com). Thank you very much ❤️", 72 | "donors_list": "🦸 *Heroes of Docker Controller Bot*\n\n$1\n\n_Thank you all for using the bot! A special thanks to these heroes for their generosity and altruistic spirit in making a donation with the /donate command. Your support makes a difference! 🚀💙_", 73 | "empty_schedule": "There are no stored schedules.\n\nUsage:\n/schedule CRON run/stop/restart container\n/schedule CRON mute minutes\n\nExample:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nIf you are not familiar with CRON statements, here you have a website to generate it following the standard.", 74 | "error_adding_schedule": "❌ It appears that the instruction entered does not follow the correct format. Entered: $1\n\nUsage:\n/schedule CRON run/stop/restart container\n\nExample:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nIf you are not familiar with CRON statements, here you have a website to generate it following the standard.", 75 | "error_bot_container_name": "Container name needs to be set in the CONTAINER_NAME variable", 76 | "error_bot_telegram_admin": "You need to configure the chatId of the user who will interact with the bot with the TELEGRAM_ADMIN variable", 77 | "error_bot_telegram_admin_anonymous": "You cannot be anonymous to control the bot. In the variable TELEGRAM_ADMIN you have to put your user id.", 78 | "error_bot_telegram_thread": "The variable TELEGRAM_THREAD is the thread within a supergroup, it is a numeric value. It has been set to $1.", 79 | "error_bot_token": "You need to configure the bot token with the TELEGRAM_TOKEN variable", 80 | "error_can_not_do_that": "❌ Can't do that.", 81 | "error_checking_label_with_error": "Could not check label $1 of container $2. Error: [$3]", 82 | "error_checking_update_with_error": "Could not check update: [$1]", 83 | "error_creating_new_container_with_error": "Error creating and/or running the new container. The container information is: [$1]", 84 | "error_deleting_container": "❌ Failed to delete container *$1*. See bot logs for more information.", 85 | "error_deleting_container_with_error": "Could not delete container $1. Error: [$2]", 86 | "error_deleting_from_file_with_error": "Failed to delete the line from file. Error: [$1]", 87 | "error_getting_architecture": "Error getting system architecture. Error: [$1]", 88 | "error_getting_donors": "❌ Could not get donors. Try it later.", 89 | "error_getting_donors_with_error": "An error occurred while obtaining donors. Error: [$1]", 90 | "error_getting_tags": "❌ Could not get tags from *$1*. Repository not supported at this time.", 91 | "error_getting_tags_with_error": "Error getting $1 tags. Error: [$2]", 92 | "error_monitor_daemon": "An error occurred in the event daemon. Relaunching... Error: [$1]", 93 | "error_multiple_admin_only_with_group": "Multiple administrators can only be specified if used in a group (using the TELEGRAM_GROUP variable)", 94 | "error_prune_containers": "❌ An error occurred deleting unused containers. See the bot logs for more information.", 95 | "error_prune_containers_with_error": "An error has occurred deleting unused containers. Error: [$1]", 96 | "error_prune_images": "❌ An error occurred deleting unused images. See bot logs for more information.", 97 | "error_prune_images_with_error": "An error occurred deleting unused images. Error: [$1]", 98 | "error_prune_networks": "❌ An error occurred while deleting unused networks. See bot logs for more information.", 99 | "error_prune_networks_with_error": "An error occurred while deleting unused networks. Error: [$1]", 100 | "error_prune_volumes": "❌ An error has occurred deleting unused volumes. See the bot logs for more information.", 101 | "error_prune_volumes_with_error": "An error occurred deleting unused volumes. Error: [$1]", 102 | "error_reading_schedule_file": "An error occurred while processing the schedules file. Error: [$1]", 103 | "error_renaming_container": "❌ Failed to rename container *$1*. See bot logs for more information.", 104 | "error_renaming_container_with_error": "Could not rename container $1. Error: [$2]", 105 | "error_restarting_container": "❌ Failed to restart container *$1*. See bot logs for more information.", 106 | "error_restarting_container_with_error": "Could not restart container $1. Error: [$2]", 107 | "error_schedule_daemon": "An error occurred in the scheduling daemon. Relaunching... Error: [$1]", 108 | "error_sending_document": "Could not send document to $1. Error: [$2]", 109 | "error_sending_message": "Could not send message to $1: $2. Error: [$3]", 110 | "error_sending_updates": "Could not update container $1. Error: [$2]", 111 | "error_showing_compose_container": "❌ Failed to show docker compose for container *$1*. See bot logs for more information.", 112 | "error_showing_compose_container_with_error": "Could not show docker compose for container $1. Error: [$2]", 113 | "error_showing_info_container": "❌ The information for container *$1* could not be displayed. See the bot logs for more information.", 114 | "error_showing_info_container_with_error": "Could not display information for container $1. Error: [$2]", 115 | "error_showing_logs_container": "❌ The logs for container *$1* could not be displayed. See the bot logs for more information.", 116 | "error_showing_logs_container_with_error": "The logs for container $1 could not be shown. Error: [$2]", 117 | "error_starting_container": "❌ Failed to start container *$1*. See bot logs for more information.", 118 | "error_starting_container_with_error": "Could not start container $1. Error: [$2]", 119 | "error_stats_not_available": "Container $1 statistics not available. Error: [$2]", 120 | "error_stopping_container": "❌ Failed to stop container *$1*. See bot logs for more information.", 121 | "error_stopping_container_with_error": "Could not stop container $1. Error: [$2]", 122 | "error_tag_name_too_long": "Error adding a tag to the list because it is too long. Container: [$1]. Tag: [$2].", 123 | "error_update_daemon": "An error occurred in the update daemon. Relaunching... Error: [$1]", 124 | "error_updating_container": "❌ Failed to update container *$1*. See bot logs for more information.", 125 | "error_updating_container_with_error": "Could not update container $1. Error: [$2]", 126 | "error_use_mute_command": "❌ Please provide a valid number of minutes.\n · Usage: /mute \nTo deactivate use /mute 0", 127 | "error_use_mute_schedule": "❌ Please provide a valid number of minutes\n · Usage: /schedule CRON mute .", 128 | "error_writing_cache_with_error": "Error writing to cache. Key [$1]", 129 | "image_id": "Image ID", 130 | "information": "Information about", 131 | "loading_file": "_Loading file... Please wait_", 132 | "logs": "📃 $1 logs", 133 | "menu": "*🫡 Docker Controller Bot at your service*\n\nAvailable commands:\n\n · /list Complete list of containers.\n · /run Starts a container.\n · /stop Stops a container.\n · /restart Restarts a container.\n · /delete Delete a container.\n · /checkupdate Update a container.\n · /updateall Update all containers\n · /changetag Change container tag. ⚠️\n · /logs Shows the last logs of a container.\n · /logfile Shows the last logs of a container in file format.\n · /schedule Scheduling module.\n · /compose Extracts the docker-compose from a container. ⚠️\n · /prune Clean up unused objects on the system.\n · /mute Mute notifications.\n · /info Displays information about a container.\n · /version Displays the current version.\n · /donate Donate to the developer\n · /donors Heroes of Docker-Controller-Bot\n\n⚠️ This function is in _experimental_ phase.", 134 | "menu_change_tag": "Change container tag", 135 | "menu_compose": "Extract docker-compose from a container", 136 | "menu_delete": "Delete a container", 137 | "menu_donate": "Donate to the developer", 138 | "menu_donors": "Heroes of DCB", 139 | "menu_info": "Displays information about a container", 140 | "menu_list": "Complete list of containers", 141 | "menu_logfile": "Shows the complete logs of a container in file format", 142 | "menu_logs": "Shows the latest logs of a container", 143 | "menu_mute": " Mute notifications", 144 | "menu_prune": "Prune allows you to remove unused objects from the system. \n\nPlease select the type of object to prune.", 145 | "menu_restart": "Restart a container", 146 | "menu_run": "Start a container", 147 | "menu_schedule": "Scheduling module", 148 | "menu_start": "Main menu", 149 | "menu_stop": "Stops a container", 150 | "menu_update": "Update a container", 151 | "menu_update_all": "Update all containers", 152 | "menu_version": "Shows the current version", 153 | "muted": "🔇 Bot muted for $1 minutes", 154 | "muted_singular": "🔇 Bot muted for 1 minute", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Update available ⬆️", 156 | "obtaining_info": "_Obtaining information from_ *$1*...", 157 | "prune_containers": "✅ Unused containers deleted. Space Reclaimed: *$1*", 158 | "prune_images": "✅ Unused images deleted. Space Reclaimed: *$1*", 159 | "prune_networks": "✅ Unused networks deleted", 160 | "prune_system": "🗑️ Cleans up unused system objects.\n\nPlease choose the type of object to remove:", 161 | "prune_volumes": "✅ Unused volumes deleted. Space Reclaimed: *$1*", 162 | "restart_a_container": "🟢 Click on a container to restart it", 163 | "restarted_container": "🟢 Container *$1* has been *restarted*", 164 | "restarting": "_Restarting_ *$1*...", 165 | "run_command": "Running [$1]", 166 | "run_command_for_container": "Running [$1] of [$2]", 167 | "schedule_saved": "✅ Saved schedule.\n```CRON $1```", 168 | "self_update_message": "⚙️ Now the bot will restart.\n\nPlease wait a moment, this may take up to 1 minute.\n\nThe bot will notify you when it is available again.", 169 | "show_compose": "📃 Click on a container to see its docker-compose.\n\nThis function is in *experimental* phase and may contain errors, it is recommended to check the docker-compose.", 170 | "show_info": "📜 Click on a container to see its information.", 171 | "show_logs": "📃 Click on a container to see its latest logs", 172 | "show_logsfile": "📃 Click on a container to see its logs in file mode", 173 | "showing_logs": "📃 These are the latest logs for *$1* container:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Click on a container to start it", 175 | "started_container": "🟢 Container *$1* has been *started*", 176 | "starting": "_Starting_ *$1*...", 177 | "status": "Status", 178 | "stop_a_container": "🔴 Click on a container to stop it", 179 | "stopped_container": "🔴 Container *$1* has been *stopped*", 180 | "stopping": "_Stopping_ *$1*...", 181 | "unmuted": "🔉 Bot notifies again", 182 | "update_container": "⚠️ Click on a container to update it", 183 | "updated_container": "✅ Container *$1* successfully updated.", 184 | "UPDATED_CONTAINER_TEXT": "Up-to-date container ✅", 185 | "updating": "_Updating_ *$1*...", 186 | "updating_creating": "_Updating_ *$1*...\nCreating container...", 187 | "updating_deleting_old": "_Updating_ *$1*...\nDeleting old container...", 188 | "updating_downloading": "_Updating_ *$1*...\nDownloading...", 189 | "updating_starting": "_Updating_ *$1*...\nStarting container...", 190 | "updating_stopping": "_Updating_ *$1*...\nStopping container...", 191 | "used_image": "Used image", 192 | "user_not_admin": "❌ This bot does not belong to you.\n\nIf you want to control your docker containers via telegram deploy me on your server.\n\nTake a look at [DockerHub](https://hub.docker.com /r/dgongut/docker-controller-bot) where you will find a docker-compose. \n\nAre you curious? The code is published on [GitHub](https://github.com/dgongut/docker-controller- bot).\n\nIf you have questions, ask me, I'm @dgongut", 193 | "version": "⚙️ _Version: $1_\nDeveloped with ❤️ by @dgongut\n\nIf you find any bugs or suggestions, contact me.\n\nYou can find everything related to this bot at [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) or on [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nTo watch the news channel in Spanish, [click here](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "User $1 (@$2) is not an administrator and has tried to use the bot." 195 | } -------------------------------------------------------------------------------- /locale/es.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Activo", 3 | "already_updated": "✅ El contenedor *$1* está actualizado", 4 | "already_updated_all": "✅ Todos los contenedores parecen estar actualizados", 5 | "auto_update": "⬆️ *Actualización detectada*:\n*$1*\nSe actualiza automáticamente.", 6 | "available_update": "⬆️ *Actualización disponible*:\n*$1*", 7 | "available_updates": "⬆️ *Actualizaciones disponibles*:\n*$1*", 8 | "button_cancel": "❌ - Cancelar", 9 | "button_close": "❌ - Cerrar", 10 | "button_confirm": "⚠️ - Sí", 11 | "button_confirm_change_tag": "⚠️ - Sí, cambiar a $1", 12 | "button_confirm_delete": "⚠️ - Sí, eliminar", 13 | "button_confirm_update": "⬆️ - Sí, actualizar", 14 | "button_containers": "Contenedores", 15 | "button_delete": "❌ - Eliminar", 16 | "button_images": "Imágenes", 17 | "button_networks": "Redes", 18 | "button_update": "⬆️ - Actualizar", 19 | "button_update_all": "⬆️ - Actualizar todo", 20 | "button_volumes": "Volúmenes", 21 | "change_tag": "⚙️ Selecciona un nuevo tag para el contenedor *$1*.", 22 | "change_tag_container": "⚙️ Pulsa en un contenedor para cambiar su tag", 23 | "channel": "📰 [Novedades](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Comprobar actualizaciones", 25 | "compose": "📃 El docker-compose de $1. Recuerda, esta función se encuentra en fase _experimental_.", 26 | "confirm_change_tag": "⚠️ ¿Estás seguro de que quieres cambiar el tag del contenedor *$1* a `$2`?\n\nRecuerda, esta función se encuentra en fase _experimental_.", 27 | "confirm_delete": "⚠️ ¿Estás seguro de que quieres eliminar el contenedor *$1*?\n\nEsta acción no se puede deshacer.", 28 | "confirm_prune_containers": "🗑️ ¿Está seguro que desea eliminar todos los contenedores detenidos/no utilizados?\n\nEsta operación no puede deshacerse.", 29 | "confirm_prune_images": "🗑️ ¿Está seguro que desea eliminar todas las imágenes no asociadas a un contenedor activo?\n\nEsta operación no puede deshacerse.", 30 | "confirm_prune_networks": "🗑️ ¿Está seguro que desea eliminar todas las redes no asociadas a un contenedor activo?\n\nEsta operación no puede deshacerse.", 31 | "confirm_prune_volumes": "🗑️ ¿Está seguro que desea eliminar todos los volúmenes no asociados a un contenedor activo?\n\nEsta operación no puede deshacerse.", 32 | "confirm_update_all": "⚠️ ¿Estás seguro de que quieres actualizar los siguientes contenedores?\n*$1*\nSiempre se recomienda comprobar si la configuración actual es compatible con la nueva versión del contenedor.\n\nEsta acción no se puede deshacer desde el bot.", 33 | "confirm_update": "⚠️ ¿Estás seguro de que quieres actualizar el contenedor *$1* con la nueva imagen disponible?\n\nSiempre se recomienda comprobar si la configuración actual es compatible con la nueva versión del contenedor.\n\nEsta acción no se puede deshacer desde el bot.", 34 | "container_does_not_exist": "❌ El contenedor *$1* no existe", 35 | "container_id": "ID del contenedor", 36 | "created_container": "🔵 El contenedor *$1* se ha *creado*", 37 | "debug_auto_update": "Actualizando automáticamente el contenedor $1", 38 | "debug_checking_update": "Comprobando actualización: $1 ($2): IMAGEN LOCAL [$3] - IMAGEN REMOTA [$4]", 39 | "debug_container_deleting_old_container": "Eliminando contenedor antiguo $1", 40 | "debug_container_found": "Contenedor [$1] encontrado", 41 | "debug_container_need_to_be_started": "El contenedor estaba iniciado anteriormente, lo inicio.", 42 | "debug_container_not_found": "Contenedor [$1] no encontrado", 43 | "debug_creating_new_container": "Creando el contenedor con la nueva imagen [$1]", 44 | "debug_deleted": "Eliminado: [$1]", 45 | "debug_deleting_image": "Eliminando la imagen [$1]", 46 | "debug_disabled_update_daemon": "Demonio de actualizaciones desactivado", 47 | "debug_find_container": "Buscando id del contenedor [$1]", 48 | "debug_ignore_check_for_update": "Comprobando actualización: $1 omitido", 49 | "debug_image_can_not_be_deleted": "La imagen local de $1 no puede eliminarse. Motivo: [$2]", 50 | "debug_muted_message": "Mensaje [$1] omitido por estar silenciado", 51 | "debug_notifying_update": "Notificando de la actualización...", 52 | "debug_pulled_image": "Pull de $1 completado", 53 | "debug_pulling_image": "Haciendo pull de la imagen [$1]", 54 | "debug_renaming_old_container": "Renombrando antiguo contenedor antes de eliminarlo [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Demonio de las programaciones activado", 56 | "debug_started_update_daemon": "Demonio de actualizaciones activado", 57 | "debug_starting_bot": "Arrancando Docker-Controler-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "Demonio de monitorización de estado activado", 59 | "debug_stopping_container": "El contenedor $1 está en ejecución. Se detendrá.", 60 | "debug_update_already_notified": "Ya se avisó de esta actualización. No se notifica.", 61 | "debug_update_detected": "¡Actualización de $1 detectada! Eliminando la imagen descargada [$2]", 62 | "debug_update_not_cached": "Se ha consultado por la actualización de $1 y no está disponible: [$2]", 63 | "debug_updated_container": "Contenedor $1 actualizado.", 64 | "debug_updating_container": "Actualizando contenedor $1", 65 | "debug_waiting_next_check_updates": "Comprobaciones de actualizaciones completadas, esperando $1 horas.", 66 | "delete_container": "⚠️ Pulsa en un contenedor para eliminarlo.\nEsta acción no puede deshacerse.", 67 | "delete_schedule": "🗑️ Pulsa en una programación para eliminarla", 68 | "deleted_container": "✅ Contenedor *$1* eliminado con éxito.", 69 | "deleted_schedule": "✅ Programación eliminada correctamente.\n```CRON $1```", 70 | "deleting": "_Eliminando_ *$1*...", 71 | "donate": "Este proyecto es de código abierto y lo realizo en mi tiempo libre. La donación no habilitará ninguna función extra. Es simplemente, una forma ideal de agradecer el trabajo que un proyecto como éste lleva detrás.\nSi deseas hacerlo, [haz click aquí](https://donate.dgongut.com).\nMil gracias ❤️", 72 | "donors_list": "🦸 *Héroes de Docker Controller Bot*\n\n$1\n\n_¡Gracias a todos por usar el bot! Un agradecimiento especial a estos héroes por su generosidad y espíritu altruista al donar con el comando /donate. ¡Su apoyo hace la diferencia! 🚀💙_", 73 | "empty_schedule": "No hay programaciones almacenadas.\n\nUso:\n/schedule CRON run/stop/restart contenedor\n/schedule CRON mute minutos\n\nEjemplo:\n/schedule 0 1 * * * start micontenedor\n/schedule 30 4 * * * mute 5\n\nSi no estás familiarizado con las sentencias CRON, aquí tienes una web para generarla acorde a tus gustos siguiendo el estándar.", 74 | "error_adding_schedule": "❌ Parece que la instrucción introducida no sigue el formato correcto. Introducido: $1\n\nUso:\n/schedule CRON run/stop/restart contenedor\n/schedule CRON mute minutos\n\nEjemplo:\n/schedule 0 1 * * * start micontenedor\n/schedule 30 4 * * * mute 5\n\nSi no estás familiarizado con las sentencias CRON, aquí tienes una web para generarla acorde a tus gustos siguiendo el estándar.", 75 | "error_bot_container_name": "Se necesita configurar el nombre del contenedor en la variable CONTAINER_NAME", 76 | "error_bot_telegram_admin": "Se necesita configurar el chatId del usuario que interactuará con el bot con la variable TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "No puedes ser anónimo para controlar el bot. En la variable TELEGRAM_ADMIN has de poner tu user id.", 78 | "error_bot_telegram_thread": "La variable TELEGRAM_THREAD es el tema dentro de un supergrupo, es un valor numérico. Se ha configurado como $1.", 79 | "error_bot_token": "Se necesita configurar el token del bot con la variable TELEGRAM_TOKEN", 80 | "error_can_not_do_that": "❌ No se puede hacer eso.", 81 | "error_checking_label_with_error": "No se ha podido comprobar la label $1 del contenedor $2. Error: [$3]", 82 | "error_checking_update_with_error": "No se pudo comprobar la actualización: [$1]", 83 | "error_creating_new_container_with_error": "Error al crear y/o ejecutar el nuevo contenedor. La información del contenedor es: [$1]", 84 | "error_deleting_container": "❌ No se ha podido eliminar el contenedor *$1*. Consulta los logs del bot para mayor información.", 85 | "error_deleting_container_with_error": "No se ha podido eliminar el contenedor $1. Error: [$2]", 86 | "error_deleting_from_file_with_error": "No se ha podido eliminar la línea del fichero. Error: [$1]", 87 | "error_getting_architecture": "Error al obtener la arquitectura del sistema. Error: [$1]", 88 | "error_getting_donors": "❌ No se han podido obtener los donadores. Inténtelo de nuevo más tarde.", 89 | "error_getting_donors_with_error": "Error al obtener los donadores. Error: [$1]", 90 | "error_getting_tags": "❌ No se han podido obtener los tags de *$1*. Repositorio no soportado en este momento.", 91 | "error_getting_tags_with_error": "Error al obtener los tags de $1. Error: [$2]", 92 | "error_monitor_daemon": "Se ha producido un error en el demonio de eventos. Relanzando... Error: [$1]", 93 | "error_multiple_admin_only_with_group": "Solo se pueden especificar varios administradores si se usa en un grupo (utilizando la variable TELEGRAM_GROUP)", 94 | "error_prune_containers": "❌ Se ha producido un error eliminando los contenedores no utilizados. Consulta los logs del bot para mayor información.", 95 | "error_prune_containers_with_error": "Se ha producido un error eliminando los contenedores no utilizados. Error: [$1]", 96 | "error_prune_images": "❌ Se ha producido un error eliminando las imágenes no utilizadas. Consulta los logs del bot para mayor información.", 97 | "error_prune_images_with_error": "Se ha producido un error eliminando las imágenes no utilizados. Error: [$1]", 98 | "error_prune_networks": "❌ Se ha producido un error eliminando las redes no utilizadas. Consulta los logs del bot para mayor información.", 99 | "error_prune_networks_with_error": "Se ha producido un error eliminando las redes no utilizados. Error: [$1]", 100 | "error_prune_volumes": "❌ Se ha producido un error eliminando los volúmenes no utilizados. Consulta los logs del bot para mayor información.", 101 | "error_prune_volumes_with_error": "Se ha producido un error eliminando los volúmenes no utilizados. Error: [$1]", 102 | "error_reading_schedule_file": "Se ha producido un error procesando el fichero de las programaciones. Error: [$1]", 103 | "error_renaming_container": "❌ No se ha podido renombrar el contenedor *$1*. Consulta los logs del bot para mayor información.", 104 | "error_renaming_container_with_error": "No se ha podido renombrar el contenedor $1. Error: [$2]", 105 | "error_restarting_container": "❌ No se ha podido reiniciar el contenedor *$1*. Consulta los logs del bot para mayor información.", 106 | "error_restarting_container_with_error": "No se ha podido reiniciar el contenedor $1. Error: [$2]", 107 | "error_schedule_daemon": "Se ha producido un error en el demonio de las programaciones. Relanzando... Error: [$1]", 108 | "error_sending_document": "No se ha podido enviar el documento a $1. Error: [$2]", 109 | "error_sending_message": "No se ha podido enviar el mensaje a $1: $2. Error: [$3]", 110 | "error_sending_updates": "No se ha podido actualizar el contenedor $1. Error: [$2]", 111 | "error_showing_compose_container": "❌ No se ha podido mostrar el docker compose del contenedor *$1*. Consulta los logs del bot para mayor información.", 112 | "error_showing_compose_container_with_error": "No se ha podido mostrar el docker compose del contenedor $1. Error: [$2]", 113 | "error_showing_info_container": "❌ No se ha podido mostrar la información del contenedor *$1*. Consulta los logs del bot para mayor información.", 114 | "error_showing_info_container_with_error": "No se ha podido mostrar la información del contenedor $1. Error: [$2]", 115 | "error_showing_logs_container": "❌ No se han podido mostrar los logs del contenedor *$1*. Consulta los logs del bot para mayor información.", 116 | "error_showing_logs_container_with_error": "No se han podido mostrar los logs del contenedor $1. Error: [$2]", 117 | "error_starting_container": "❌ No se ha podido iniciar el contenedor *$1*. Consulta los logs del bot para mayor información.", 118 | "error_starting_container_with_error": "No se ha podido iniciar el contenedor $1. Error: [$2]", 119 | "error_stats_not_available": "Estadísticas del contenedor $1 no disponibles. Error: [$2]", 120 | "error_stopping_container": "❌ No se ha podido detener el contenedor *$1*. Consulta los logs del bot para mayor información.", 121 | "error_stopping_container_with_error": "No se ha podido detener el contenedor $1. Error: [$2]", 122 | "error_tag_name_too_long": "Error al añadir un tag a la lista por ser demasiado largo. Contenedor: [$1]. Tag: [$2].", 123 | "error_update_daemon": "Se ha producido un error en el demonio de actualizaciones. Relanzando... Error: [$1]", 124 | "error_updating_container": "❌ No se ha podido actualizar el contenedor *$1*. Consulta los logs del bot para mayor información.", 125 | "error_updating_container_with_error": "No se ha podido actualizar el contenedor $1. Error: [$2]", 126 | "error_use_mute_command": "❌ Por favor, proporciona un número válido de minutos.\n · Uso: /mute \nPara desactivar usa /mute 0", 127 | "error_use_mute_schedule": "❌ Por favor, proporciona un número válido de minutos.\n · Uso: /schedule CRON mute ", 128 | "error_writing_cache_with_error": "Error al escribir en caché. Clave [$1]", 129 | "image_id": "ID de la imagen", 130 | "information": "Información de", 131 | "loading_file": "_Cargando archivo... Espera por favor_", 132 | "logs": "📃 Logs de $1", 133 | "menu": "*🫡 Docker Controller Bot a su servicio*\n\nComandos disponibles:\n\n · /list Listado completo de los contenedores.\n · /run Inicia un contenedor.\n · /stop Detiene un contenedor.\n · /restart Reinicia un contenedor.\n · /delete Elimina un contenedor.\n · /checkupdate Actualiza un contenedor.\n · /updateall Actualiza todos los contenedores.\n · /changetag Cambia el tag de un contenedor. ⚠️\n · /logs Muestra los últimos logs de un contenedor.\n · /logfile Muestra los últimos logs de un contenedor en formato fichero.\n · /schedule Módulo de programaciones\n · /compose Extrae el docker-compose de un contenedor. ⚠️\n · /prune Limpia objetos no utilizados en el sistema.\n· /mute Silencia las notificaciones un tiempo.\n · /info Muestra información de un contenedor.\n · /version Muestra la versión actual.\n · /donate Dona al desarrollador.\n · /donors Héroes de Docker-Controller-Bot\n\n⚠️ Esta función se encuentra en fase _experimental_.", 134 | "menu_change_tag": "Cambia el tag de un contenedor", 135 | "menu_compose": "Extrae el docker-compose de un contenedor", 136 | "menu_delete": "Elimina un contenedor", 137 | "menu_donate": "Dona al desarrollador", 138 | "menu_donors": "Héroes de DCB", 139 | "menu_info": "Muestra información de un contenedor", 140 | "menu_list": "Listado completo de los contenedores", 141 | "menu_logfile": "Muestra los logs completos de un contenedor en formato fichero", 142 | "menu_logs": "Muestra los últimos logs de un contenedor", 143 | "menu_mute": " Silencia las notificaciones", 144 | "menu_prune": "Prune te permite eliminar los objetos sin utilizar en el sistema. \n\nPor favor, selecciona el tipo de objeto a limpiar.", 145 | "menu_restart": "Reinicia un contenedor", 146 | "menu_run": "Inicia un contenedor", 147 | "menu_schedule": "Módulo de programaciones", 148 | "menu_start": "Menú principal", 149 | "menu_stop": "Detiene un contenedor", 150 | "menu_update": "Actualiza un contenedor", 151 | "menu_update_all": "Actualiza todos los contenedores", 152 | "menu_version": "Muestra la versión actual", 153 | "muted": "🔇 Bot silenciado por $1 minutos", 154 | "muted_singular": "🔇 Bot silenciado por 1 minuto", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Actualización disponible ⬆️", 156 | "obtaining_info": "_Obteniendo información de_ *$1*...", 157 | "prune_containers": "✅ Contenedores no utilizados eliminados. Espacio liberado: *$1*", 158 | "prune_images": "✅ Imágenes no utilizadas eliminadas. Espacio liberado: *$1*", 159 | "prune_networks": "✅ Redes no utilizadas eliminadas", 160 | "prune_system": "🗑️ Limpia objetos no utilizados en el sistema.\n\nPor favor, elija el tipo de objeto a eliminar:", 161 | "prune_volumes": "✅ Volúmenes no utilizados eliminados. Espacio liberado: *$1*", 162 | "restart_a_container": "🟢 Pulsa en un contenedor para reiniciarlo", 163 | "restarted_container": "🟢 El contenedor *$1* se ha *reiniciado*", 164 | "restarting": "_Reiniciando_ *$1*...", 165 | "run_command": "Ejecutando [$1]", 166 | "run_command_for_container": "Ejecutando [$1] de [$2]", 167 | "schedule_saved": "✅ Programación almacenada.\n```CRON $1```", 168 | "self_update_message": "⚙️ Ahora el bot se reiniciará.\n\nEspera un momento por favor, esto puede tardar hasta 1 minuto.\n\nEl bot avisará cuando vuelva a estar disponible.", 169 | "show_compose": "📃 Pulsa en un contenedor para ver su docker-compose.\n\nEsta función se encuentra en fase *experimental* y puede contener errores, se recomienda verificar el docker-compose.", 170 | "show_info": "📜 Pulsa en un contenedor para ver su información.", 171 | "show_logs": "📃 Pulsa en un contenedor para ver sus últimos logs", 172 | "show_logsfile": "📃 Pulsa en un contenedor para ver sus logs en modo fichero", 173 | "showing_logs": "📃 Estos son los últimos logs de *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Pulsa en un contenedor para iniciarlo", 175 | "started_container": "🟢 El contenedor *$1* se ha *iniciado*", 176 | "starting": "_Iniciando_ *$1*...", 177 | "status": "Estado", 178 | "stop_a_container": "🔴 Pulsa en un contenedor para detenerlo", 179 | "stopped_container": "🔴 El contenedor *$1* se ha *detenido*", 180 | "stopping": "_Deteniendo_ *$1*...", 181 | "unmuted": "🔉 Bot vuelve a notificar", 182 | "update_container": "⚠️ Pulsa en un contenedor para actualizarlo.", 183 | "updated_container": "✅ Contenedor *$1* actualizado con éxito.", 184 | "UPDATED_CONTAINER_TEXT": "Contenedor actualizado ✅", 185 | "updating": "_Actualizando_ *$1*...", 186 | "updating_creating": "_Actualizando_ *$1*...\nCreando contenedor...", 187 | "updating_deleting_old": "_Actualizando_ *$1*...\nEliminando contenedor antiguo...", 188 | "updating_downloading": "_Actualizando_ *$1*...\nDescargando...", 189 | "updating_starting": "_Actualizando_ *$1*...\nIniciando contenedor...", 190 | "updating_stopping": "_Actualizando_ *$1*...\nDeteniendo contenedor...", 191 | "used_image": "Imagen usada", 192 | "user_not_admin": "❌ Este bot no te pertenece.\n\nSi quieres controlar tus contenedores Docker a través de Telegram despliégame en tu servidor.\n\nEcha un vistazo en [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) donde encontrarás un docker-compose. \n\n¿Eres curioso? El código se encuentra publicado en [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSi tienes dudas, pregúntame, soy @dgongut", 193 | "version": "⚙️ _Versión: $1_\nDesarrollado con ❤️ por @dgongut\n\nSi encuentras cualquier fallo o sugerencia contáctame.\n\nPuedes encontrar todo lo relacionado con este bot en [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) o en [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSi quieres entrar al canal de noticias [haz click aquí](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "El usuario $1 (@$2) no es un administrador y ha tratado de usar el bot." 195 | } -------------------------------------------------------------------------------- /locale/gl.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Activo", 3 | "already_updated": "✅ O contedor *$1* está actualizado", 4 | "already_updated_all": "✅ Todos os contedores parecen estar actualizados", 5 | "auto_update": "⬆️ *Actualización detectada*:\n*$1*\nActualízase automaticamente.", 6 | "available_update": "⬆️ *Actualización dispoñible*:\n*$1*", 7 | "available_updates": "⬆️ *Actualizacións dispoñibles*:\n*$1*", 8 | "button_cancel": "❌ - Cancelar", 9 | "button_close": "❌ - Pechar", 10 | "button_confirm": "⚠️ - Si", 11 | "button_confirm_change_tag": "⚠️ - Si, cambiar a $1", 12 | "button_confirm_delete": "⚠️ - Si, eliminar", 13 | "button_confirm_update": "⬆️ - Si, actualizar", 14 | "button_containers": "contedores", 15 | "button_delete": "❌ - Eliminar", 16 | "button_images": "Imaxes", 17 | "button_networks": "Redes", 18 | "button_update": "⬆️ - Actualizar", 19 | "button_update_all": "⬆️ - Actualizar todo", 20 | "button_volumes": "Volumes", 21 | "change_tag": "⚙️ Selecciona un novo tag para o contedor *$1*.", 22 | "change_tag_container": "⚙️ Selecciona un contedor para mudar a súa tag", 23 | "channel": "📰 [Novidades](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Comprobar actualizacións", 25 | "compose": "📃 O docker-compose de $1. Recorda, esta función atópase en fase _experimental_.", 26 | "confirm_change_tag": "⚠️ Estás seguro de que queres mudar a tag do contedor *$1* a `$2`?\n\nRecorda, esta función encuentrase en fase _experimental_.", 27 | "confirm_delete": "⚠️ Estás seguro de que queres eliminar o contedor *$1*?\n\nEsta acción non se pode desfacer.", 28 | "confirm_prune_containers": "🗑️ Está seguro de que desexa eliminar todos os contedores detidos/non utilizados?\n\nEsta operación non se pode desfacer.", 29 | "confirm_prune_images": "🗑️ Está seguro de que desexa eliminar todas as imaxes non asociadas a un contedor activo?\n\nEsta operación non pode desfacerse.", 30 | "confirm_prune_networks": "🗑️ Está seguro de que desexa eliminar todas as redes non asociadas a un contedor activo?\n\nEsta operación non pode desfacerse.", 31 | "confirm_prune_volumes": "🗑️ Está seguro de que desexa eliminar todos os volumes non asociadas a un contedor activo?\n\nEsta operación non pode desfacerse.", 32 | "confirm_update_all": "⚠️ Estás seguro de que queres actualizar os seguintes contedores?\n*$1*\nSempre se recomenda comprobar se a configuración actual é compatible coa nova versión do contedor.\n\nEsta acción non se pode desfacer desde o bot.", 33 | "confirm_update": "⚠️ Estás seguro de que queres actualizar o contedor *$1* coa nova imaxe dispoñible?\n\nSempre se recomenda comprobar se a configuración actual é compatible coa nova versión do contedor.\n\nEsta acción non pode desfacerse desde o bot.", 34 | "container_does_not_exist": "❌ o contedor *$1* non existe", 35 | "container_id": "ID do contedor", 36 | "created_container": "🔵 *creouse* o contedor *$1*", 37 | "debug_auto_update": "Actualizando automaticamente o contedor $1", 38 | "debug_checking_update": "Comprobando actualización: $1 ($2): IMAXE LOCAL [$3] - IMAXE REMOTA [$4]", 39 | "debug_container_deleting_old_container": "Eliminando contedor antiguo $1", 40 | "debug_container_found": "contedor [$1] encontrado", 41 | "debug_container_need_to_be_started": "o contedor xa estaba iniciado, inicioo.", 42 | "debug_container_not_found": "contedor [$1] non encontrado", 43 | "debug_creating_new_container": "Creando o contedor coa nova imaxe [$1]", 44 | "debug_deleted": "Eliminado: [$1]", 45 | "debug_deleting_image": "Eliminando a imaxe [$1]", 46 | "debug_disabled_update_daemon": "Daemon de actualizacións desactivado", 47 | "debug_find_container": "Buscando id do contedor [$1]", 48 | "debug_ignore_check_for_update": "Comprobando actualización: $1 omitido", 49 | "debug_image_can_not_be_deleted": "A imaxe local de $1 no se pode eliminar. Motivo: [$2]", 50 | "debug_muted_message": "Mensaxe [$1] omitida por estar silenciado", 51 | "debug_notifying_update": "Notificando da actualización...", 52 | "debug_pulled_image": "Pull de $1 completado", 53 | "debug_pulling_image": "Facendo pull da imaxe [$1]", 54 | "debug_renaming_old_container": "Renomeando antiguo contedor antes de eliminalo [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Daemon das programacións activado", 56 | "debug_started_update_daemon": "Daemon das actualizacións activado", 57 | "debug_starting_bot": "Arrancando Docker-Controler-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "Daemon de monitorización de estado activado", 59 | "debug_stopping_container": "o contedor $1 está en execución. Deteráse.", 60 | "debug_update_already_notified": "Xa se avisou desta actualización. Non se notifica.", 61 | "debug_update_detected": "Actualización de $1 detectada! Eliminando a imaxe descargada [$2]", 62 | "debug_update_not_cached": "Consultouse sobre a actualización de $1 e non está dispoñible: [$2]", 63 | "debug_updated_container": "contedor $1 actualizado.", 64 | "debug_updating_container": "Actualizando contedor $1", 65 | "debug_waiting_next_check_updates": "Comprobacións de actualizacións completadas, esperando $1 horas.", 66 | "delete_container": "⚠️ Selecciona un contedor para eliminalo.\nEsta acción non se pode desfacer.", 67 | "delete_schedule": "🗑️ Selecciona unha programación para eliminala", 68 | "deleted_container": "✅ contedor *$1* eliminado con éxito.", 69 | "deleted_schedule": "✅ Programación eliminada correctamente.\n```CRON $1```", 70 | "deleting": "_Eliminando_ *$1*...", 71 | "donate": "Este proxecto é de código aberto e realizoo no meu tempo libre. A doazón non habilitará ningunha función extra. É simplemente, unha forma ideal de agradecer o traballo que un proxecto como este leva detrás.\nSe desexas facelo, [fai clic aquí](https://donate.dgongut.com).\nMil grazas ❤️", 72 | "donors_list": "🦸 *Héroes de Docker Controller Bot*\n\n$1\n\n_Grazas a todos por usar o bot! Un agradecemento especial a estes heroes pola súa xenerosidade e espírito altruísta ao facer unha doazón co comando /donate. O voso apoio fai a diferenza! 🚀💙_", 73 | "empty_schedule": "Non hai programacións almacenadas.\n\nUso:\n/schedule CRON run/stop/restart contedor\n/schedule CRON mute minutos\n\nExemplo:\n/schedule 0 1 * * * start micontedor\n/schedule 30 4 * * * mute 5\n\nSe non estás familiarizado coas sentencias CRON, aquí tes unha web para xerala acorde aos teus gustos seguindo o estándar.", 74 | "error_adding_schedule": "❌ Parece que a instrución inserida non segue o formato correcto. Instrución: $1\n\nUso:\n/schedule CRON run/stop/restart contedor\n/schedule CRON mute minutos\n\nExemplo:\n/schedule 0 1 * * * start micontedor\n/schedule 30 4 * * * mute 5\n\nSe non estás familiarizado coas sentencias CRON, aquí tes unha web para xerala acorde aos teus gustos seguindo o estándar.", 75 | "error_bot_container_name": "Hai que configurar o nome do contedor na variable CONTAINER_NAME", 76 | "error_bot_telegram_admin": "Hai que configurar o chatId do usuario que interactuará co bot coa variable TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "Non podes ser anónimo para controlar o bot. Na variable TELEGRAM_ADMIN tes que poñer o teu user id.", 78 | "error_bot_telegram_thread": "A variable TELEGRAM_THREAD é o tema dentro dun supergrupo, é un valor numérico. Configurouse como $1.", 79 | "error_bot_token": "É necesario configurar o token do bot coa variable TELEGRAM_TOKEN", 80 | "error_can_not_do_that": "❌ Non se pode facer iso.", 81 | "error_checking_label_with_error": "Non se puido comprobar a label $1 do contedor $2. Erro: [$3]", 82 | "error_checking_update_with_error": "Non se puido comprobar a actualización: [$1]", 83 | "error_creating_new_container_with_error": "Erro ao crear e/o executar o novo contedor. A información do contedor é: [$1]", 84 | "error_deleting_container": "❌ Non se puido eliminar o contedor *$1*. Consulta os logs do bot para mais información.", 85 | "error_deleting_container_with_error": "Non se puido eliminar o contedor $1. Erro: [$2]", 86 | "error_deleting_from_file_with_error": "Non se puido eliminar a liña do ficheiro. Erro: [$1]", 87 | "error_getting_architecture": "Erro ao obter a arquitectura do sistema. Erro: [$1]", 88 | "error_getting_donors": "❌ Non se puideron obter os doantes. Inténtao de novo máis tarde.", 89 | "error_getting_donors_with_error": "Non se puideron obter os doantes. Inténtao de novo máis tarde. Erro: [$1]", 90 | "error_getting_tags": "❌ Non se puido obter as tags de *$1*. Repositorio non soportado neste momento.", 91 | "error_getting_tags_with_error": "Erro ao obter as tags de $1. Erro: [$2]", 92 | "error_monitor_daemon": "Produciuse un erro no daemon de eventos. Relanzando... Erro: [$1]", 93 | "error_multiple_admin_only_with_group": "Só se poden especificar varios administradores se se usa nun grupo (utilizando a variable TELEGRAM_GROUP)", 94 | "error_prune_containers": "❌ Produciuse un erro eliminando os contedores non utilizados. Consulta os logs do bot para mais información.", 95 | "error_prune_containers_with_erro": "Produciuse un erro eliminando os contedores non utilizados. Erro: [$1]", 96 | "error_prune_images": "❌ Produciuse un erro eliminando as imaxes non utilizadas. Consulta os logs do bot para mais información.", 97 | "error_prune_images_with_erro": "Produciuse un erro eliminando as imaxes non utilizadas. Erro: [$1]", 98 | "error_prune_networks": "❌ Produciuse un erro eliminando as redes non utilizadas. Consulta os logs do bot para mais información.", 99 | "error_prune_networks_with_erro": "Produciuse un erro eliminando as redes non utilizados. Erro: [$1]", 100 | "error_prune_volumes": "❌ Produciuse un erro eliminando os volumes non utilizados. Consulta os logs do bot para mais información.", 101 | "error_prune_volumes_with_erro": "Produciuse un erro eliminando os volumes non utilizados. Erro: [$1]", 102 | "error_reading_schedule_file": "Produciuse un erro procesando o ficheiro das programacións. Erro: [$1]", 103 | "error_renaming_container": "❌ Non se puido renomear o contedor *$1*. Consulta os logs do bot para mais información.", 104 | "error_renaming_container_with_erro": "Non se puido renomear o contedor $1. Erro: [$2]", 105 | "error_restarting_container": "❌ Non se puido reiniciar o contedor *$1*. Consulta os logs do bot para mais información.", 106 | "error_restarting_container_with_erro": "Non se puido reiniciar o contedor $1. Erro: [$2]", 107 | "error_schedule_daemon": "Produciuse un erro no daemon das programacións. Relanzando... Erro: [$1]", 108 | "error_sending_document": "Non se puido enviar o documento a $1. Erro: [$2]", 109 | "error_sending_message": "Non se puido enviar o mensaxe a $1: $2. Erro: [$3]", 110 | "error_sending_updates": "Non se puido actualizar o contedor $1. Erro: [$2]", 111 | "error_showing_compose_container": "❌ Non se puido mostrar o docker compose do contedor *$1*. Consulta os logs do bot para mais información.", 112 | "error_showing_compose_container_with_erro": "Non se puido mostrar o docker compose do contedor $1. Erro: [$2]", 113 | "error_showing_info_container": "❌ Non se puido mostrar a información do contedor *$1*. Consulta os logs do bot para mais información.", 114 | "error_showing_info_container_with_erro": "Non se puido mostrar a información do contedor $1. Erro: [$2]", 115 | "error_showing_logs_container": "❌Non se puideron mostrar os logs do contedor *$1*. Consulta os logs do bot para mais información.", 116 | "error_showing_logs_container_with_erro": "Non se puideron mostrar os logs do contedor $1. Erro: [$2]", 117 | "error_starting_container": "❌ Non se puido iniciar o contedor *$1*. Consulta os logs do bot para mais información.", 118 | "error_starting_container_with_erro": "Non se puido iniciar o contedor $1. Erro: [$2]", 119 | "error_stats_not_available": "Estatísticas do contedor $1 non dispoñibles. Erro: [$2]", 120 | "error_stopping_container": "❌ Non se puido deter o contedor *$1*. Consulta os logs do bot para mais información.", 121 | "error_stopping_container_with_erro": "Non se puido detener o contedor $1. Erro: [$2]", 122 | "error_tag_name_too_long": "Erro ao engadir unha tag á lista por ser demasiado larga. contedor: [$1]. Tag: [$2].", 123 | "error_update_daemon": "Produciuse un erro no daemon de actualizaciós. Relanzando... Erro: [$1]", 124 | "error_updating_container": "❌ Non se puido actualizar o contedor *$1*. Consulta os logs do bot para mais información.", 125 | "error_updating_container_with_erro": "Non se puido actualizar o contedor $1. Erro: [$2]", 126 | "error_use_mute_command": "❌ Por favor, proporciona un número válido de minutos.\n · Uso: /mute \nPara desactivar usa /mute 0", 127 | "error_use_mute_schedule": "❌ Por favor, proporciona un número válido de minutos.\n · Uso: /schedule CRON mute ", 128 | "error_writing_cache_with_erro": "Erro ao escribir en caché. Chave [$1]", 129 | "image_id": "ID da imaxe", 130 | "information": "Información de", 131 | "loading_file": "_Cargando arquivo... Espera, por favor_", 132 | "logs": "📃 Logs de $1", 133 | "menu": "*🫡 Docker Controller Bot ao seu servizo*\n\nComandos dispoñibles:\n\n · /list Listado completo dos contedores.\n · /run Inicia un contedor.\n · /stop Detén un contedor.\n · /restart Reinicia un contedor.\n · /doete Elimina un contedor.\n · /checkupdate Actualiza un contedor.\n · /updateall Actualiza todos os contenedores.\n · /changetag Cambia a tag dun contedor. ⚠️\n · /logs Mostra os últimos logs dun contedor.\n · /logfile Mostra os últimos logs dun contedor en formato ficheiro.\n · /schedule Módulo de programacións\n · /compose Extrae o docker-compose dun contedor. ⚠️\n · /prune Limpia obxectos non utilizados no sistema.\n· /mute Silencia as notificacións un tempo.\n · /info Mostra información dun contedor.\n · /version Mostra a versión actual.\n · /donate Doa ao desenvolvedor.\n · /donors Héroes de Docker-Controller-Bot\n\n⚠️ Esta función encóntrase en fase _experimental_.", 134 | "menu_change_tag": "Cambia a tag dun contedor", 135 | "menu_compose": "Extrae o docker-compose dun contedor", 136 | "menu_delete": "Elimina un contedor", 137 | "menu_donate": "Doa ao desarrollador", 138 | "menu_donors": "Héroes de DCB", 139 | "menu_info": "Mostra información dun contedor", 140 | "menu_list": "Listado completo dos contedores", 141 | "menu_logfile": "Mostra os logs completos dun contedor en formato ficheiro", 142 | "menu_logs": "Mostra os últimos logs dun contedor", 143 | "menu_mute": " Silencia as notificacións", 144 | "menu_prune": "Prune permiteche eliminar os obxectos sen utilizar no sistema. \n\nPor favor, selecciona o tipo de obxecto a limpar.", 145 | "menu_restart": "Reinicia un contedor", 146 | "menu_run": "Inicia un contedor", 147 | "menu_schedule": "Módulo de programacións", 148 | "menu_start": "Menú principal", 149 | "menu_stop": "Detén un contedor", 150 | "menu_update": "Actualiza un contedor", 151 | "menu_update_all": "Actualiza todos os contedores", 152 | "menu_version": "Mostra a versión actual", 153 | "muted": "🔇 Bot silenciado por $1 minutos", 154 | "muted_singular": "🔇 Bot silenciado por 1 minuto", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Actualización dispoñible ⬆️", 156 | "obtaining_info": "_Obtendo información de_ *$1*...", 157 | "prune_containers": "✅ contedores non utilizados eliminados", 158 | "prune_images": "✅ Imaxes non utilizadas eliminadas", 159 | "prune_networks": "✅ Redes non utilizadas eliminadas", 160 | "prune_system": "🗑️ Limpa obxectos non utilizados no sistema.\n\nPor favor, elixa o tipo de obxecto a eliminar:", 161 | "prune_volumes": "✅ Volumes non utilizados eliminados", 162 | "restart_a_container": "🟢 Selecciona un contedor para reinicialo", 163 | "restarted_container": "🟢 *reiniciouse* o contedor *$1*", 164 | "restarting": "_Reiniciando_ *$1*...", 165 | "run_command": "Executando [$1]", 166 | "run_command_for_container": "Executando [$1] de [$2]", 167 | "schedule_saved": "✅ Programación almacenada.\n```CRON $1```", 168 | "self_update_message": "⚙️ Agora o bot reiniciarase.\n\nEspera un momento por favor, isto pode demorar ata 1 minuto.\n\nO bot avisará cando volva estar dispoñible.", 169 | "show_compose": "📃 Selecciona un contedor para ver o seu docker-compose.\n\nEsta función está en fase *experimental* e pode conter erros, recoméndase verificar o docker-compose.", 170 | "show_info": "📜 Selecciona un contedor para ver a súa información.", 171 | "show_logs": "📃 Selecciona un contedor para ver os seus últimos logs", 172 | "show_logsfile": "📃 Selecciona un contedor para ver os seus logs en modo ficheiro", 173 | "showing_logs": "📃 Istos son os últimos logs de *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Selecciona un contedor para inicialo", 175 | "started_container": "🟢 *iniciouse* o contedor *$1*", 176 | "starting": "_Iniciando_ *$1*...", 177 | "status": "Estado", 178 | "stop_a_container": "🔴 Selecciona un contedor para detelo", 179 | "stopped_container": "🔴 *detívose* o contedor *$1*", 180 | "stopping": "_Detendo_ *$1*...", 181 | "unmuted": "🔉 Bot volve a notificar", 182 | "update_container": "⚠️ Selecciona un contedor para actualizalo.", 183 | "updated_container": "✅ contedor *$1* actualizado con éxito.", 184 | "UPDATED_CONTAINER_TEXT": "contedor actualizado ✅", 185 | "updating": "_Actualizando_ *$1*...", 186 | "updating_creating": "_Actualizando_ *$1*...\nCreando contedor...", 187 | "updating_deleting_old": "_Actualizando_ *$1*...\nEliminando contedor antiguo...", 188 | "updating_downloading": "_Actualizando_ *$1*...\nDescargando...", 189 | "updating_starting": "_Actualizando_ *$1*...\nIniciando contedor...", 190 | "updating_stopping": "_Actualizando_ *$1*...\nDetendo contedor...", 191 | "used_image": "Imaxe usada", 192 | "user_not_admin": "❌ Este bot non te pertence.\n\nSe queres controlar os teus contedores Docker a través de Telegram desprégame no teu servidor.\n\nBota unha ollada en [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) onde encontrarás un docker-compose. \n\nEs curioso? O código está publicado en [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSi tes dúbidas, pregúntame, son @dgongut", 193 | "version": "⚙️ _Versión: $1_\nDesenvolvido con ❤️ por @dgongut\n\nSe encontras calquera fallo ou tes algunha suxestión contáctame.\n\nPodes encontrar todo o relacionado con este bot en [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) ou en [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSe queres entrar á canle de novas [fai clic aquí](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "O usuario $1 (@$2) non é un administrador e tratou de usar o bot." 195 | } -------------------------------------------------------------------------------- /locale/it.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Attivo", 3 | "already_updated": "✅ *$1* contenitore già aggiornato", 4 | "already_updated_all": "✅ Tutti i contenitori sembrano essere aggiornati", 5 | "auto_update": "⬆️ *Aggiornamento Trovato*:\n*$1\n*Aggiornato automaticamente.", 6 | "available_update": "⬆️ *Aggiornamento disponibile*:\n*$1*", 7 | "available_updates": "⬆️ *AAggiornamenti disponibili*:\n*$1*", 8 | "button_cancel": "❌ - Cancella", 9 | "button_close": "❌ - Chiudi", 10 | "button_confirm": "⚠️ - Sì", 11 | "button_confirm_change_tag": "⚠️ - Sì, modifica in $1", 12 | "button_confirm_delete": "⚠️ - Sì, cancella", 13 | "button_confirm_update": "⬆️ - Sì, aggiorna", 14 | "button_containers": "Contenitori", 15 | "button_delete": "❌ - Cancella", 16 | "button_images": "Immagini", 17 | "button_networks": "Reti", 18 | "button_update": "⬆️ - Aggiorna", 19 | "button_update_all": "⬆️ - Aggiorna tutto", 20 | "button_volumes": "Volumi", 21 | "change_tag": "⚙️ Seleziona un nuovo tag per *$1*.", 22 | "change_tag_container": "⚙️ Clicca su un contenitore per cambiare il suo tag", 23 | "channel": "📰 [Changelog (in spagnolo)](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Controlla aggiornamenti", 25 | "compose": "📃 Il $1 docker-compose. Ricorda, questa funzione è in fase _sperimentale_.", 26 | "confirm_change_tag": "⚠️ Sei sicuro di voler cambiare il tag del contenitore *$1* in `$2`?\n\n⚠️ Ricorda, questa funzione è in fase _sperimentale_.", 27 | "confirm_delete": "⚠️ Sei sicuro di voler eliminare il contenitore *$1*?\n\nQuesta azione non può essere annullata.", 28 | "confirm_prune_containers": "🗑️ Questo comando permette di rimuovere i contenitori inutilizzati/arrestati. Sei sicuro di voler rimuovere tutti i contenitori inutilizzati?\n\nQuesta operazione non può essere annullata.", 29 | "confirm_prune_images": "🗑️ Questo comando permette di rimuovere le immagini inutilizzate. Sei sicuro di voler rimuovere tutte le immagini non associate a un contenitore attivo?\n\nQuesta operazione non può essere annullata.", 30 | "confirm_prune_networks": "🗑️ Questo comando permette di rimuovere le reti inutilizzate. Sei sicuro di voler rimuovere tutte le reti non associate a un contenitore attivo?\n\nQuesta operazione non può essere annullata.", 31 | "confirm_prune_volumes": "🗑️ Questo comando permette di rimuovere i volumi inutilizzati. Sei sicuro di voler eliminare tutti i volumi non associati a un contenitore attivo?\n\nQuesta operazione non può essere annullata.", 32 | "confirm_update_all": "⚠️ Sei sicuro di voler aggiornare i seguenti contenitori?\n*$1*\nSi consiglia sempre di verificare se la configurazione attuale è compatibile con la nuova versione del contenitore.\n\nQuesta azione non può essere annullata tramite il bot.", 33 | "confirm_update": "⚠️ Sei sicuro di voler aggiornare il contenitore *$1* con la nuova immagine disponibile?\n\nSi consiglia sempre di verificare se la configurazione corrente è compatibile con la nuova versione del contenitore.\n\nQuesta azione non può essere annullata dal bot.", 34 | "container_does_not_exist": "❌ Il contenitore *$1* non esiste", 35 | "container_id": "ID del contenitore", 36 | "created_container": "🔵 Il contenitore *$1* è stato *creato*", 37 | "debug_auto_update": "Aggiornamento automatico del contenitore $1", 38 | "debug_checking_update": "Verifica aggiornamento: $1 ($2): IMMAGINE LOCALE [$3] - IMMAGINE REMOTA [$4]", 39 | "debug_container_deleting_old_container": "Eliminazione del vecchio contenitore $1", 40 | "debug_container_found": "Contenitore [$1] trovato", 41 | "debug_container_need_to_be_started": "Il contenitore era stato precedentemente avviato, lo avvio.", 42 | "debug_container_not_found": "Contenitore [$1] non trovato", 43 | "debug_creating_new_container": "Creazione del contenitore con la nuova immagine [$1]", 44 | "debug_deleted": "Eliminato: [$1]", 45 | "debug_deleting_image": "Eliminazione immagine [$1]", 46 | "debug_disabled_update_daemon": "Demone di aggiornamento disabilitato", 47 | "debug_find_container": "Ricerca ID contenitore [$1]", 48 | "debug_ignore_check_for_update": "Verifica aggiornamento: $1 omessa", 49 | "debug_image_can_not_be_deleted": "L'immagine locale di $1 non può essere eliminata. Motivo: [$2]", 50 | "debug_muted_message": "Messaggio [$1] omesso perché silenziato", 51 | "debug_notifying_update": "Notifica dell'aggiornamento...", 52 | "debug_pulled_image": "Pull completato per $1", 53 | "debug_pulling_image": "Pull immagine [$1]", 54 | "debug_renaming_old_container": "Rinomina del vecchio contenitore prima dell'eliminazione [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Demone di pianificazione attivato", 56 | "debug_started_update_daemon": "Demone di aggiornamento attivato", 57 | "debug_starting_bot": "Avvio di Docker-Controller-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "Demone di monitoraggio dello stato attivato", 59 | "debug_stopping_container": "Il contenitore $1 è in esecuzione. Verrà arrestato.", 60 | "debug_update_already_notified": "Questo aggiornamento è già stato segnalato. Non sarà notificato.", 61 | "debug_update_detected": "Aggiornamento rilevato per $1! Eliminazione immagine scaricata [$2]", 62 | "debug_update_not_cached": "Richiesta di aggiornamento $1 e non è disponibile: [$2]", 63 | "debug_updated_container": "Contenitore $1 aggiornato.", 64 | "debug_updating_container": "Aggiornamento del contenitore $1", 65 | "debug_waiting_next_check_updates": "Verifiche aggiornamenti completate, attesa di $1 ore.", 66 | "delete_container": "⚠️ Clicca su un contenitore per eliminarlo.\nQuesta azione non può essere annullata.", 67 | "delete_schedule": "🗑️ Clicca su una pianificazione per eliminarla", 68 | "deleted_container": "✅ Contenitore *$1* eliminato con successo.", 69 | "deleted_schedule": "✅ Pianificazione eliminata con successo.\n```CRON $1```", 70 | "deleting": "_Eliminazione_ *$1*...", 71 | "donate": "Questo progetto è open source e lo sviluppo nel mio tempo libero. Donare non sbloccherà funzionalità extra. È semplicemente un modo ideale per ringraziare per il lavoro dietro un progetto come questo. Se desideri farlo, [clicca qui](https://donate.dgongut.com). Grazie mille ❤️", 72 | "donors_list": "🦸 *Eroi di Docker Controller Bot*\n\n$1\n\n_Grazie a tutti per utilizzare il bot! Un ringraziamento speciale a questi eroi per la loro generosità e spirito altruista nel fare una donazione con il comando /donate. Il vostro supporto fa la differenza! 🚀💙_", 73 | "empty_schedule": "Non ci sono pianificazioni salvate.\n\nUtilizzo:\n/schedule CRON run/stop/restart container\n/schedule CRON mute minutes\n\nEsempio:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nSe non conosci le istruzioni CRON, qui trovi un sito per generarle seguendo lo standard.", 74 | "error_adding_schedule": "❌ Sembra che l'istruzione inserita non segua il formato corretto. Inserito: $1\n\nUtilizzo:\n/schedule CRON run/stop/restart container\n\nEsempio:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nSe non conosci le istruzioni CRON, qui trovi un sito per generarle seguendo lo standard.", 75 | "error_bot_container_name": "Il nome del contenitore deve essere impostato nella variabile CONTAINER_NAME", 76 | "error_bot_telegram_admin": "È necessario configurare il chatId dell'utente che interagirà con il bot utilizzando la variabile TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "Non puoi essere anonimo per controllare il bot. Nella variabile TELEGRAM_ADMIN devi inserire il tuo user ID.", 78 | "error_bot_telegram_thread": "La variabile TELEGRAM_THREAD è il thread all'interno di un supergruppo. È un valore numerico ed è stato impostato a $1.", 79 | "error_bot_token": "È necessario configurare il token del bot con la variabile TELEGRAM_TOKEN", 80 | "error_can_not_do_that": "❌ Impossibile eseguire l'operazione.", 81 | "error_checking_label_with_error": "Impossibile controllare l'etichetta $1 del contenitore $2. Errore: [$3]", 82 | "error_checking_update_with_error": "Impossibile verificare l'aggiornamento: [$1]", 83 | "error_creating_new_container_with_error": "Errore nella creazione e/o avvio del nuovo contenitore. Informazioni sul contenitore: [$1]", 84 | "error_deleting_container": "❌ Impossibile eliminare il contenitore *$1*. Vedi i log del bot per maggiori informazioni.", 85 | "error_deleting_container_with_error": "Impossibile eliminare il contenitore $1. Errore: [$2]", 86 | "error_deleting_from_file_with_error": "Impossibile eliminare la riga dal file. Errore: [$1]", 87 | "error_getting_architecture": "Errore durante l'acquisizione dell'architettura di sistema. Errore: [$1]", 88 | "error_getting_donors": "❌ Non è stato possibile ottenere i donatori. Riprova più tardi.", 89 | "error_getting_donors_with_error": "Non è stato possibile ottenere i donatori. Riprova più tardi. Errore: [$1]", 90 | "error_getting_tags": "❌ Impossibile ottenere i tag da *$1*. Repository non supportato al momento.", 91 | "error_getting_tags_with_error": "Errore nell'ottenere i tag di $1. Errore: [$2]", 92 | "error_monitor_daemon": "Si è verificato un errore nel demone eventi. Riavvio in corso... Errore: [$1]", 93 | "error_multiple_admin_only_with_group": "Più amministratori possono essere specificati solo se il bot viene utilizzato in un gruppo (usando la variabile TELEGRAM_GROUP)", 94 | "error_prune_containers": "❌ Si è verificato un errore durante l'eliminazione dei contenitori inutilizzati. Vedi i log del bot per ulteriori informazioni.", 95 | "error_prune_containers_with_error": "Si è verificato un errore durante l'eliminazione dei contenitori inutilizzati. Errore: [$1]", 96 | "error_prune_images": "❌ Si è verificato un errore durante l'eliminazione delle immagini inutilizzate. Vedi i log del bot per ulteriori informazioni.", 97 | "error_prune_images_with_error": "Si è verificato un errore durante l'eliminazione delle immagini inutilizzate. Errore: [$1]", 98 | "error_prune_networks": "❌ Si è verificato un errore durante l'eliminazione delle reti inutilizzate. Vedi i log del bot per ulteriori informazioni.", 99 | "error_prune_networks_with_error": "Si è verificato un errore durante l'eliminazione delle reti inutilizzate. Errore: [$1]", 100 | "error_prune_volumes": "❌ Si è verificato un errore durante l'eliminazione dei volumi inutilizzati. Vedi i log del bot per ulteriori informazioni.", 101 | "error_prune_volumes_with_error": "Si è verificato un errore durante l'eliminazione dei volumi inutilizzati. Errore: [$1]", 102 | "error_reading_schedule_file": "Si è verificato un errore durante l'elaborazione del file delle pianificazioni. Errore: [$1]", 103 | "error_renaming_container": "❌ Impossibile rinominare il contenitore *$1*. Vedi i log del bot per maggiori informazioni.", 104 | "error_renaming_container_with_error": "Impossibile rinominare il contenitore $1. Errore: [$2]", 105 | "error_restarting_container": "❌ Impossibile riavviare il contenitore *$1*. Vedi i log del bot per maggiori informazioni.", 106 | "error_restarting_container_with_error": "Impossibile riavviare il contenitore $1. Errore: [$2]", 107 | "error_schedule_daemon": "Si è verificato un errore nel demone di pianificazione. Riavvio in corso... Errore: [$1]", 108 | "error_sending_document": "Impossibile inviare il documento a $1. Errore: [$2]", 109 | "error_sending_message": "Impossibile inviare il messaggio a $1: $2. Errore: [$3]", 110 | "error_sending_updates": "Impossibile aggiornare il contenitore $1. Errore: [$2]", 111 | "error_showing_compose_container": "❌ Impossibile mostrare il docker-compose per il contenitore *$1*. Vedi i log del bot per ulteriori informazioni.", 112 | "error_showing_compose_container_with_error": "Impossibile mostrare il docker-compose per il contenitore $1. Errore: [$2]", 113 | "error_showing_info_container": "❌ Non è stato possibile visualizzare le informazioni per il contenitore *$1*. Vedi i log del bot per maggiori informazioni.", 114 | "error_showing_info_container_with_error": "Impossibile visualizzare le informazioni per il contenitore $1. Errore: [$2]", 115 | "error_showing_logs_container": "❌ Impossibile visualizzare i log per il contenitore *$1*. Consulta i log del bot per maggiori informazioni.", 116 | "error_showing_logs_container_with_error": "Impossibile visualizzare i log per il contenitore $1. Errore: [$2]", 117 | "error_starting_container": "❌ Impossibile avviare il contenitore *$1*. Consulta i log del bot per maggiori informazioni.", 118 | "error_starting_container_with_error": "Impossibile avviare il contenitore $1. Errore: [$2]", 119 | "error_stats_not_available": "Statistiche del contenitore $1 non disponibili. Errore: [$2]", 120 | "error_stopping_container": "❌ Impossibile arrestare il contenitore *$1*. Consulta i log del bot per maggiori informazioni.", 121 | "error_stopping_container_with_error": "Impossibile arrestare il contenitore $1. Errore: [$2]", 122 | "error_tag_name_too_long": "Errore durante l'aggiunta di un tag alla lista: troppo lungo. Contenitore: [$1]. Tag: [$2].", 123 | "error_update_daemon": "Si è verificato un errore nel demone di aggiornamento. Riavvio in corso... Errore: [$1]", 124 | "error_updating_container": "❌ Impossibile aggiornare il contenitore *$1*. Consulta i log del bot per maggiori informazioni.", 125 | "error_updating_container_with_error": "Impossibile aggiornare il contenitore $1. Errore: [$2]", 126 | "error_use_mute_command": "❌ Fornisci un numero valido di minuti.\n · Uso: /mute \nPer disattivare usa /mute 0", 127 | "error_use_mute_schedule": "❌ Fornisci un numero valido di minuti\n · Uso: /schedule CRON mute .", 128 | "error_writing_cache_with_error": "Errore durante la scrittura nella cache. Chiave: [$1]", 129 | "image_id": "ID Immagine", 130 | "information": "Informazioni su", 131 | "loading_file": "_Caricamento file... Attendere prego_", 132 | "logs": "📃 Log di $1", 133 | "menu": "*🫡 Docker Controller Bot al tuo servizio*\n\nComandi disponibili:\n\n · /list Elenco completo dei contenitori.\n · /run Avvia un contenitore.\n · /stop Arresta un contenitore.\n · /restart Riavvia un contenitore.\n · /delete Elimina un contenitore.\n · /checkupdate Aggiorna un contenitore.\n · /updateall Aggiorna tutti i contenitori.\n · /changetag Cambia il tag di un contenitore. ⚠️\n · /logs Mostra gli ultimi log di un contenitore.\n · /logfile Mostra gli ultimi log di un contenitore in formato file.\n · /schedule Modulo di pianificazione.\n · /compose Estrai il docker-compose da un contenitore. ⚠️\n · /prune Elimina gli oggetti inutilizzati dal sistema.\n · /mute Silenzia le notifiche.\n · /info Mostra informazioni su un contenitore.\n · /version Mostra la versione attuale.\n · /donate Dona allo sviluppatore\n · /donors Eroi di Docker-Controller-Bot\n\n⚠️ Questa funzione è in fase _sperimentale_.", 134 | "menu_change_tag": "Cambia il tag del contenitore", 135 | "menu_compose": "Estrai il docker-compose da un contenitore", 136 | "menu_delete": "Elimina un contenitore", 137 | "menu_donate": "Dona allo sviluppatore", 138 | "menu_donors": "Eroi di DCB", 139 | "menu_info": "Mostra informazioni su un contenitore", 140 | "menu_list": "Elenco completo dei contenitori", 141 | "menu_logfile": "Mostra i log completi di un contenitore in formato file", 142 | "menu_logs": "Mostra gli ultimi log di un contenitore", 143 | "menu_mute": " Silenzia notifiche", 144 | "menu_prune": "Prune consente di rimuovere oggetti inutilizzati dal sistema. \n\nSeleziona il tipo di oggetto da eliminare.", 145 | "menu_restart": "Riavvia un contenitore", 146 | "menu_run": "Avvia un contenitore", 147 | "menu_schedule": "Modulo di pianificazione", 148 | "menu_start": "Menu principale", 149 | "menu_stop": "Arresta un contenitore", 150 | "menu_update": "Aggiorna un contenitore", 151 | "menu_update_all": "Aggiorna tutti i contenitori", 152 | "menu_version": "Mostra la versione attuale", 153 | "muted": "🔇 Bot silenziato per $1 minuti", 154 | "muted_singular": "🔇 Bot silenziato per 1 minuto", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Aggiornamento disponibile ⬆️", 156 | "obtaining_info": "_Ottenimento informazioni dal contenitore_ *$1*...", 157 | "prune_containers": "✅ Contenitori inutilizzati eliminati", 158 | "prune_images": "✅ Immagini inutilizzate eliminate", 159 | "prune_networks": "✅ Reti inutilizzate eliminate", 160 | "prune_system": "🗑️ Elimina oggetti inutilizzati dal sistema.\n\nSeleziona il tipo di oggetto da rimuovere:", 161 | "prune_volumes": "✅ Volumi inutilizzati eliminati", 162 | "restart_a_container": "🟢 Clicca su un contenitore per riavviarlo", 163 | "restarted_container": "🟢 Il contenitore *$1* è stato *riavviato*", 164 | "restarting": "_Riavvio_ di *$1* in corso...", 165 | "run_command": "Esecuzione [$1]", 166 | "run_command_for_container": "Esecuzione [$1] su [$2]", 167 | "schedule_saved": "✅ Pianificazione salvata.\n```CRON $1```", 168 | "self_update_message": "⚙️ Ora il bot verrà riavviato.\n\nAttendere un momento, potrebbe richiedere fino a 1 minuto.\n\nIl bot notificherà quando sarà di nuovo disponibile.", 169 | "show_compose": "📃 Clicca su un contenitore per vedere il suo docker-compose.\n\nQuesta funzione è in fase _sperimentale_ e potrebbe contenere errori. È consigliato controllare il docker-compose.", 170 | "show_info": "📜 Clicca su un contenitore per vedere le sue informazioni.", 171 | "show_logs": "📃 Clicca su un contenitore per vedere i suoi ultimi log", 172 | "show_logsfile": "📃 Clicca su un contenitore per vedere i suoi log in modalità file", 173 | "showing_logs": "📃 Questi sono gli ultimi log per il contenitore *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Clicca su un contenitore per avviarlo", 175 | "started_container": "🟢 Il contenitore *$1* è stato *avviato*", 176 | "starting": "_Avvio_ di *$1* in corso...", 177 | "status": "Stato", 178 | "stop_a_container": "🔴 Clicca su un contenitore per arrestarlo", 179 | "stopped_container": "🔴 Il contenitore *$1* è stato *arrestato*", 180 | "stopping": "_Arresto_ di *$1* in corso...", 181 | "unmuted": "🔉 Il bot invia di nuovo notifiche", 182 | "update_container": "⚠️ Clicca su un contenitore per aggiornarlo", 183 | "updated_container": "✅ Il contenitore *$1* è stato aggiornato con successo.", 184 | "UPDATED_CONTAINER_TEXT": "Contenitore aggiornato ✅", 185 | "updating": "_Aggiornamento_ di *$1* in corso...", 186 | "updating_creating": "_Aggiornamento_ di *$1*...\nCreazione del contenitore...", 187 | "updating_deleting_old": "_Aggiornamento_ di *$1*...\nEliminazione del vecchio contenitore...", 188 | "updating_downloading": "_Aggiornamento_ di *$1*...\nDownload in corso...", 189 | "updating_starting": "_Aggiornamento_ di *$1*...\nAvvio del contenitore...", 190 | "updating_stopping": "_Aggiornamento_ di *$1*...\nArresto del contenitore...", 191 | "used_image": "Immagine utilizzata", 192 | "user_not_admin": "❌ Questo bot non appartiene a te.\n\nSe vuoi controllare i tuoi contenitori Docker tramite Telegram, implementami sul tuo server.\n\nDai un'occhiata a [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) dove troverai un docker-compose.\n\nCurioso? Il codice è pubblicato su [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nSe hai domande, chiedi a me, sono @dgongut", 193 | "version": "⚙️ _Versione: $1_\nSviluppato con ❤️ da @dgongut\n\nSe trovi bug o hai suggerimenti, contattami.\n\nPuoi trovare tutto ciò che riguarda questo bot su [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) o su [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nPer seguire il canale delle novità in spagnolo, [clicca qui](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "L'utente $1 (@$2) non è un amministratore e ha provato a utilizzare il bot." 195 | } -------------------------------------------------------------------------------- /locale/nl.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Actief", 3 | "already_updated": "✅ *$1* container is up to date", 4 | "already_updated_all": "✅ Alle containers lijken bijgewerkt te zijn", 5 | "auto_update": "⬆️ *Update gedetecteerd*:\n*$1*\nUpdate automatisch.", 6 | "available_update": "⬆️ *Update beschikbaar*:\n*$1*", 7 | "available_updates": "⬆️ *Beschikbare updates*:\n*$1*", 8 | "button_cancel": "❌ - Annuleren", 9 | "button_close": "❌ - Sluiten", 10 | "button_confirm": "⚠️ - Ja", 11 | "button_confirm_change_tag": "⚠️ - Ja, verander het in $1", 12 | "button_confirm_delete": "⚠️ - Ja, verwijderen", 13 | "button_confirm_update": "⬆️ - Ja, bijwerken", 14 | "button_containers": "Contents", 15 | "button_delete": "❌ - Verwijderen", 16 | "button_images": "Images", 17 | "button_networks": "Randen", 18 | "button_update": "⬆️ - Bijwerken", 19 | "button_update_all": "⬆️ - Alles bijwerken", 20 | "button_volumes": "Volumes", 21 | "change_tag": "⚙️ Selecteer een nieuwe tag voor container *$1*.", 22 | "change_tag_container": "⚙️ Klik op een container om de tag te wijzigen", 23 | "channel": "📰 [Veranderingen (in het Spaans)](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Controleren op updates", 25 | "compose": "📃 De docker-compose van $1. Onthoud dat deze functie zich in een _experimentele_ fase bevindt.", 26 | "confirm_change_tag": "⚠️ Weet je zeker dat je de container tag *$1* wilt veranderen in `$2`?\n\nOnthoud dat deze functie zich in een _experimentele_ fase bevindt.", 27 | "confirm_delete": "⚠️ Weet u zeker dat u container *$1* wilt verwijderen? Deze actie kan niet ongedaan worden gemaakt", 28 | "confirm_prune_containers": "🗑️ Met dit commando kunnen ongebruikte/gestopte containers worden verwijderd. Weet u zeker dat u alle ongebruikte containers wilt verwijderen?\n\nDeze bewerking kan niet ongedaan worden gemaakt.", 29 | "confirm_prune_images": "🗑️ Met deze opdracht kunt u ongebruikte afbeeldingen verwijderen. Weet u zeker dat u alle afbeeldingen wilt verwijderen die niet aan een actieve container zijn gekoppeld?\n\nDeze bewerking kan niet ongedaan worden gemaakt.", 30 | "confirm_prune_networks": "🗑️ Met deze opdracht kunt u ongebruikte netwerken verwijderen. Weet u zeker dat u alle netwerken wilt verwijderen die niet aan een actieve container zijn gekoppeld?\n\nDeze bewerking kan niet ongedaan worden gemaakt.", 31 | "confirm_prune_volumes": "🗑️ Met deze opdracht kunt u ongebruikte volumes verwijderen. Weet u zeker dat u alle volumes wilt verwijderen die niet aan een actieve container zijn gekoppeld?\n\nDeze bewerking kan niet ongedaan worden gemaakt.", 32 | "confirm_update_all": "⚠️ Weet je zeker dat je de volgende containers wilt bijwerken?\n*$1*\nHet wordt altijd aanbevolen om te controleren of de huidige configuratie compatibel is met de nieuwe versie van de container.\n\nDeze actie kan niet ongedaan worden gemaakt via de bot.", 33 | "confirm_update": "⚠️ Weet je zeker dat je container *$1* wilt updaten met de nieuwe image?\n\nHet is altijd aan te raden om te controleren of de huidige configuratie compatibel is met de nieuwe versie van de container.\n\nDeze actie kan niet ongedaan worden gemaakt.", 34 | "container_does_not_exist": "❌ Container *$1* bestaat niet", 35 | "container_id": "Container ID", 36 | "created_container": "🔵 Container *$1* is *aangemaakt*", 37 | "debug_auto_update": "De $1 container automatisch bijwerken", 38 | "debug_checking_update": "Update controleren: $1 ($2): LOKALE IMAGE [$3] - EXTERNE IMAGE [$4]", 39 | "debug_container_deleting_old_container": "Oude container $1 verwijderen", 40 | "debug_container_found": "Container [$1] gevonden", 41 | "debug_container_need_to_be_started": "De container is eerder gestart, ik start hem op.", 42 | "debug_container_not_found": "Container [$1] niet gevonden", 43 | "debug_creating_new_container": "Container aanmaken met nieuwe image [$1]", 44 | "debug_deleted": "Verwijderd: [$1]", 45 | "debug_deleting_image": "image [$1] verwijderen", 46 | "debug_disabled_update_daemon": "Update daemon uitgeschakeld", 47 | "debug_find_container": "Container-id [$1] gevonden", 48 | "debug_ignore_check_for_update": "Update controleren: $1 weggelaten", 49 | "debug_image_can_not_be_deleted": "Lokale image van $1 kan niet worden verwijderd. Reden: [$2]", 50 | "debug_muted_message": "Bericht [$1] weggelaten omdat gedempt", 51 | "debug_notifying_update": "Notificatie van de update...", 52 | "debug_pulled_image": "$1 pull voltooid", 53 | "debug_pulling_image": "Image ophalen [$1]", 54 | "debug_renaming_old_container": "Oude container hernoemen voor verwijderen [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Schema daemon gestart", 56 | "debug_started_update_daemon": "Update daemon gestart", 57 | "debug_starting_bot": "Docker-Controler-Bot starten (v$1)", 58 | "debug_starting_monitor_daemon": "State monitoring daemon ingeschakeld", 59 | "debug_stopping_container": "Container $1 draait. Deze wordt gestopt", 60 | "debug_update_already_notified": "Deze update is al gemeld. Er wordt geen melding van gemaakt.", 61 | "debug_update_detected": "Update gedetecteerd voor $1! Gedownloade image [$2] verwijderen", 62 | "debug_update_not_cached": "Opgevraagd voor update $1 en deze is niet beschikbaar: [$2]", 63 | "debug_updated_container": "Container $1 bijgewerkt", 64 | "debug_updating_container": "Container $1 wordt bijgewerkt", 65 | "debug_waiting_next_check_updates": "Updatecontroles voltooid, wachttijd $1 uur.", 66 | "delete_container": "⚠️ Klik op een container om deze te verwijderen.\nDeze actie kan niet ongedaan worden gemaakt.", 67 | "delete_schedule": "🗑️ Klik op een schema om deze te verwijderen", 68 | "deleted_container": "✅ Container *$1* succesvol verwijderd.", 69 | "deleted_schedule": "✅ Schema succesvol verwijderd.\n```CRON $1```", 70 | "deleting": "*$1* _verwijderen_...", 71 | "donate": "Dit project is open source en ik doe het in mijn vrije tijd. Doneren maakt geen extra functies mogelijk. Het is gewoon een ideale manier om dank je wel te zeggen voor het werk achter een project als dit. Als je dat wilt doen, [klik hier](https://donate.dgongut.com). Heel erg bedankt ❤️", 72 | "donors_list": "🦸 *Helden van Docker Controller Bot*\n\n$1\n\n_Dank aan iedereen voor het gebruik van de bot! Een speciale dank aan deze helden voor hun vrijgevigheid en altruïstische geest door een donatie te doen met het commando /donate. Jullie steun maakt het verschil! 🚀💙_", 73 | "empty_schedule": "Er worden geen schema's opgeslagen.\n\n/schedule CRON run/stop/restart container\n\nVoorbeeld:\n/schedule 0 1 * * start micontainer\n\nAls je niet bekend bent met CRON statements, hier heb je een website om het te genereren volgens de standaard.", 74 | "error_adding_schedule": "❌ Het lijkt erop dat de ingevoerde instructie niet het juiste formaat heeft. Ingevoerd: $1\n\nGebruiken:\n/schedule CRON run/stop/restart container\n\nVoorbeeld: /schedule 0 1 * * start micontainer\n\nAls je niet bekend bent met CRON statements, hier heb je een website om het te genereren volgens de standaard.", 75 | "error_bot_container_name": "De naam van de container moet worden ingesteld in de CONTAINER_NAME variabele", 76 | "error_bot_telegram_admin": "U moet de chatId configureren van de gebruiker die gebruik zal maken van de bot met de variabele TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "Je kunt niet anoniem de bot besturen. In de variabele TELEGRAM_ADMIN moet je je gebruikers-ID zetten.", 78 | "error_bot_telegram_thread": "De variabele TELEGRAM_THREAD is de thread binnen een supergroep, het is een numerieke waarde. Deze is ingesteld op $1.", 79 | "error_bot_token": "U moet het bot token configureren met de TELEGRAM_TOKEN variabele", 80 | "error_can_not_do_that": "❌ Dat kan niet.", 81 | "error_checking_label_with_error": "Kon label $1 van container $2 niet controleren. Fout: [$3]", 82 | "error_checking_update_with_error": "Kon update niet controleren: [$1]", 83 | "error_creating_new_container_with_error": "Fout bij het aanmaken en/of uitvoeren van de nieuwe container. De containerinformatie is: [$1]", 84 | "error_deleting_container": "❌ Kan container *$1* niet verwijderen. Zie botlogboeken voor meer informatie.", 85 | "error_deleting_container_with_error": "Kon container $1 niet verwijderen. Fout: [$2]", 86 | "error_deleting_from_file_with_error": "De regel is niet verwijderd uit het bestand. Fout: [$1]", 87 | "error_getting_architecture": "Fout bij het verkrijgen van systeemarchitectuur. Fout: [$1]", 88 | "error_getting_donors": "❌ De donateurs konden niet worden verkregen. Probeer het later opnieuw.", 89 | "error_getting_donors_with_error": "De donateurs konden niet worden verkregen. Probeer het later opnieuw. Fout: [$1]", 90 | "error_getting_tags": "❌ Kon geen tags ophalen van *$1*. Repository wordt op dit moment niet ondersteund.", 91 | "error_getting_tags_with_error": "Fout bij het verkrijgen van $1 tags. Fout: [$2]", 92 | "error_monitor_daemon": "Er is een fout opgetreden in de event daemon. Opnieuw starten... Fout: [$1]", 93 | "error_multiple_admin_only_with_group": "Meerdere beheerders kunnen alleen worden opgegeven als ze in een groep worden gebruikt (met behulp van de variabele TELEGRAM_GROUP)", 94 | "error_prune_containers": "Er is een fout opgetreden bij het verwijderen van ongebruikte containers. Zie de botlogs voor meer informatie.", 95 | "error_prune_containers_with_error": "Er is een fout opgetreden bij het verwijderen van ongebruikte containers. Fout: [$1]", 96 | "error_prune_images": "❌ Er is een fout opgetreden bij het verwijderen van ongebruikte afbeeldingen. Zie botlogs voor meer informatie.", 97 | "error_prune_images_with_error": "Er is een fout opgetreden bij het verwijderen van ongebruikte afbeeldingen. Fout: [$1]", 98 | "error_prune_networks": "❌ Er is een fout opgetreden bij het verwijderen van ongebruikte netwerken. Zie botlogs voor meer informatie.", 99 | "error_prune_networks_with_error": "Er is een fout opgetreden bij het verwijderen van ongebruikte netwerken. Fout: [$1]", 100 | "error_prune_volumes": "❌ Er is een fout opgetreden bij het verwijderen van ongebruikte volumes. Zie de botlogs voor meer informatie.", 101 | "error_prune_volumes_with_error": "Er is een fout opgetreden bij het verwijderen van ongebruikte volumes. Fout: [$1]", 102 | "error_reading_schedule_file": "Er is een fout opgetreden tijdens het verwerken van het planningsbestand. Fout: [$1]", 103 | "error_renaming_container": "Kan container *$1* niet hernoemen. Zie botlogboeken voor meer informatie", 104 | "error_renaming_container_with_error": "Kon container $1 niet hernoemen. Fout: [$2]", 105 | "error_restarting_container": "❌ Kan container *$1* niet herstarten. Zie botlogboeken voor meer informatie.", 106 | "error_restarting_container_with_error": "Kon container $1 niet herstarten. Fout: [$2]", 107 | "error_schedule_daemon": "Er is een fout opgetreden bij de scheduling-daemon. Opnieuw gestart... Fout: [$1]", 108 | "error_sending_document": "Kon document niet verzenden naar $1. Fout: [$2]", 109 | "error_sending_message": "Kon bericht niet verzenden naar $1: $2. Fout: [$3]", 110 | "error_sending_updates": "Kon container $1 niet bijwerken. Fout: [$2]", 111 | "error_showing_compose_container": "❌ Kan docker compose voor container *$1* niet weergeven. Zie botlogs voor meer informatie.", 112 | "error_showing_compose_container_with_error": "Kon docker compose voor container $1 niet weergeven. Fout: [$2]", 113 | "error_showing_info_container": "De informatie voor container *$1* kon niet worden weergegeven. Zie de botlogs voor meer informatie.", 114 | "error_showing_info_container_with_error": "Kon informatie voor container $1 niet weergeven. Fout: [$2]", 115 | "error_showing_logs_container": "❌ De logboeken voor container *$1* konden niet worden weergegeven. Zie de botlogs voor meer informatie.", 116 | "error_showing_logs_container_with_error": "De logs voor container $1 konden niet worden weergegeven. Fout: [$2]", 117 | "error_starting_container": "❌ Container *$1* niet gestart. Zie botlogs voor meer informatie.", 118 | "error_starting_container_with_error": "Kon container $1 niet starten. Fout: [$2]", 119 | "error_stats_not_available": "Container $1 statistieken niet beschikbaar. Fout: [$2]", 120 | "error_stopping_container": "Kan container *$1* niet stoppen. Zie botlogs voor meer informatie.", 121 | "error_stopping_container_with_error": "Kon container $1 niet stoppen. Fout: [$2]", 122 | "error_tag_name_too_long": "Fout bij het toevoegen van een tag aan de lijst omdat deze te lang is. Container: [$1]. Label: [$2].", 123 | "error_update_daemon": "Er is een fout opgetreden bij de update-daemon. Opnieuw gestart... Fout: [$1]", 124 | "error_updating_container": "❌ Kan container *$1* niet bijwerken. Zie botlogs voor meer informatie", 125 | "error_updating_container_with_error": "Kon container $1 niet bijwerken. Fout: [$2]", 126 | "error_use_mute_command": "❌ Geef een geldig aantal minuten op.\n · Gebruik: /mute \nOm te deactiveren gebruik /mute 0", 127 | "error_use_mute_schedule": "❌ Geef een geldig aantal minuten op.\n · Gebruik: /schedule CRON mute .", 128 | "error_writing_cache_with_error": "Fout bij het schrijven naar cache. Sleutel [$1]", 129 | "image_id": "Image ID", 130 | "information": "Informatie over", 131 | "loading_file": "_Bestand wordt geladen... Even geduld_", 132 | "logs": "📃 $1 logs", 133 | "menu": "*🫡 Docker Controller Bot tot uw dienst*\nBeschikbare commando's:\n · /list Volledige lijst van containers.\n · /run Start een container.\n · /stop Stopt een container.\n · /restart Start een container opnieuw.\n · /delete Verwijdert een container.\n · /checkupdate Een container updaten.\n · /updateall Werk alle containers bij.\n · /changetag Wijzig container tag. ⚠️\n · /logs Toont de laatste logs van een container.\n · /logfile Toont de laatste logs van een container in bestandsformaat.\n · /schedule Planningsmodule.\n · /compose Haalt de docker-compose van een container op. ⚠️\n· /prune Ruim ongebruikte objecten op het systeem op.\n · /mute Meldingen dempen.\n · /info Toont informatie over een container.\n · /version Toont de huidige versie.\n · /donate Doneer aan de ontwikkelaar.\n · /donors Helden van Docker-Controller-Bot\n\n⚠️ Deze functie is in _experimentele_ fase.", 134 | "menu_change_tag": "Wijzig container tag", 135 | "menu_compose": "Haal docker-compose van een container op", 136 | "menu_delete": "Een container verwijderen", 137 | "menu_donate": "Doneer aan de ontwikkelaar", 138 | "menu_donors": "Helden van DCB", 139 | "menu_info": "Toont informatie over een container", 140 | "menu_list": "Volledige lijst van containers", 141 | "menu_logfile": "Toont de volledige logs van een container in bestandsformaat", 142 | "menu_logs": "Toont de laatste logs van een container", 143 | "menu_mute": " Meldingen dempen", 144 | "menu_prune": "???", 145 | "menu_restart": "Start een container opnieuw", 146 | "menu_run": "Start een container", 147 | "menu_schedule": "Planningsmodule", 148 | "menu_start": "Hoofdmenu", 149 | "menu_stop": "Stopt een container", 150 | "menu_update": "Een container updaten", 151 | "menu_update_all": "Werk alle containers bij", 152 | "menu_version": "Toont de huidige versie", 153 | "muted": "🔇 Bot gedempt voor $1 minuten", 154 | "muted_singular": "🔇 Bot gedempt voor 1 minuut", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Update beschikbaar ⬆️", 156 | "obtaining_info": "_Informatie verkrijgen van_ *$1*...", 157 | "prune_containers": "✅ Ongebruikte containers verwijderd", 158 | "prune_images": "✅ Ongebruikte images verwijderd", 159 | "prune_networks": "✅ Ongebruikte netwerken verwijderd", 160 | "prune_system": "🗑️ Ruimt ongebruikte objecten in het systeem op. Kies het type object dat verwijderd moet worden:", 161 | "prune_volumes": "✅ Ongebruikte volumes verwijderd", 162 | "restart_a_container": "🟢 Klik op een container om deze opnieuw te starten", 163 | "restarted_container": "🟢 Container *$1* is *herstart*", 164 | "restarting": "*$1* _opnieuw starten_...", 165 | "run_command": "Uitvoeren van [$1]", 166 | "run_command_for_container": "Uitvoeren van [$1] van [$2]", 167 | "schedule_saved": "✅ Schema opgeslagen.\n```CRON $1```", 168 | "self_update_message": "⚙️ De bot start opnieuw op.\n\nEven geduld a.u.b., dit kan even duren.\n\nDe bot stuurt een bericht zodra deze weer beschikbaar is.", 169 | "show_compose": "📃 Klik op een container om de docker-compose te zien.\n\nDeze functie is in *experimentele* fase en kan fouten bevatten. Het wordt aanbevolen om de docker-compose zorgvuldig te controleren.", 170 | "show_info": "📜 Klik op een container om de informatie te zien.", 171 | "show_logs": "📃 Klik op een container om de laatste logboeken te bekijken", 172 | "show_logsfile": "📃 Klik op een container om de logboeken in bestandsmodus te bekijken", 173 | "showing_logs": "📃 Dit zijn de laatste logs voor de *$1* container:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Klik op een container om deze te starten", 175 | "started_container": "🟢 Container *$1* is *gestart*", 176 | "starting": "*$1* _starten_...", 177 | "status": "Status", 178 | "stop_a_container": "🔴 Klik op een container om deze te stoppen", 179 | "stopped_container": "🔴 Container *$1* is *gestopt*", 180 | "stopping": "*$1* _stoppen_...", 181 | "unmuted": "🔉 Bot meldt opnieuw", 182 | "update_container": "⚠️ Klik op een container om deze bij te werken.", 183 | "updated_container": "✅ Container *$1* succesvol bijgewerkt.", 184 | "UPDATED_CONTAINER_TEXT": "Container up-to-date ✅", 185 | "updating": "*$1* _bijwerken_...", 186 | "updating_creating": "*$1* _bijwerken_...\nContainer aanmaken...", 187 | "updating_deleting_old": "*$1* _bijwerken_...\nOude container verwijderen...", 188 | "updating_downloading": "*$1* _bijwerken_...\nDownloaden...", 189 | "updating_starting": "*$1* _bijwerken_...\nContainer starten...", 190 | "updating_stopping": "*$1* _bijwerken_...\nContainer stoppen...", 191 | "used_image": "Gebruikte image", 192 | "user_not_admin": "❌ Deze bot is niet van jou.\n\nAls je je dockercontainers via Telegram wilt besturen, zet me dan op je server.\n\nKijk eens op [DockerHub] (https://hub.docker.com /r/dgongut/docker-controller-bot) waar je een docker-compose kunt vinden.\n\nBen je nieuwsgierig? De code is gepubliceerd op [GitHub](https://github.com/dgongut/docker-controller- bot).\n\nAls je vragen hebt, stel ze me, ik ben @dgongut", 193 | "version": "⚙️ _Versie: $1_\nOntwikkeld met ❤️ door @dgongut\n\nAls je bugs of suggesties tegenkomt, neem dan contact met me op.\n\nJe kunt alles over deze bot vinden op [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) of op [GitHub](https://github.com/dgongut/docker-controller-bot)\n\nVertaald door [ManCaveMedia](https://github.com/ManCaveMedia).\n\nAls je het nieuwskanaal in het Spaans wilt bekijken, [klik dan hier](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "Gebruiker $1 (@$2) is geen beheerder en heeft geprobeerd de bot te gebruiken" 195 | } -------------------------------------------------------------------------------- /locale/ru.json: -------------------------------------------------------------------------------- 1 | { 2 | "active": "🟢 Активен", 3 | "already_updated": "✅ Контейнер *$1* уже обновлён", 4 | "already_updated_all": "✅ Все контейнеры, похоже, обновлены", 5 | "auto_update": "⬆️ *Обнаружено обновление*:\n*$1\n*Обновить автоматически.", 6 | "available_update": "⬆️ *Доступно обновление*:\n*$1*", 7 | "available_updates": "⬆️ *Доступные обновления*:\n*$1*", 8 | "button_cancel": "❌ - Отмена", 9 | "button_close": "❌ - Закрыть", 10 | "button_confirm": "⚠️ - Да", 11 | "button_confirm_change_tag": "⚠️ - Да, изменить на $1", 12 | "button_confirm_delete": "⚠️ - Да, удалить", 13 | "button_confirm_update": "⬆️ - Да, обновить", 14 | "button_containers": "Контейнеры", 15 | "button_delete": "❌ - Удалить", 16 | "button_images": "Образы", 17 | "button_networks": "Сети", 18 | "button_update": "⬆️ - Обновить", 19 | "button_update_all": "⬆️ - Обновить все", 20 | "button_volumes": "Тома", 21 | "change_tag": "⚙️ Выберите новый тег для *$1*.", 22 | "change_tag_container": "⚙️ Нажмите на контейнер, чтобы изменить его тег", 23 | "channel": "📰 [Список изменений (на испанском)](https://t.me/dockercontrollerbotnews)", 24 | "check_for_updates": "Проверить наличие обновлений", 25 | "compose": "📃 Docker-compose для $1. Помните, что эта функция находится в _экспериментальной_ фазе.", 26 | "confirm_change_tag": "⚠️ Вы уверены, что хотите изменить тег контейнера *$1* на `$2`?\n\n⚠️ Помните, что эта функция находится в _экспериментальной_ фазе.", 27 | "confirm_delete": "⚠️ Вы уверены, что хотите удалить контейнер *$1*?\n\nЭто действие необратимо.", 28 | "confirm_prune_containers": "🗑️ Команда позволяет удалить неиспользуемые/остановленные контейнеры. Вы уверены, что хотите удалить все неиспользуемые контейнеры?\n\nЭта операция необратима.", 29 | "confirm_prune_images": "🗑️ Команда позволяет удалить неиспользуемые образы. Вы уверены, что хотите удалить все тома, не связанные с активным контейнером?\n\nЭта операция необратима.", 30 | "confirm_prune_networks": "🗑️ Команда позволяет удалить неиспользуемые сети. Вы уверены, что хотите удалить все тома, не связанные с активным контейнером?\n\nЭта операция необратима.", 31 | "confirm_prune_volumes": "🗑️ Команда позволяет удалить неиспользуемые тома. Вы уверены, что хотите удалить все тома, не связанные с активным контейнером?\n\nЭта операция необратима.", 32 | "confirm_update_all": "⚠️ Вы уверены, что хотите обновить следующие контейнеры?\n*$1*\nВсегда рекомендуется проверить, совместима ли текущая конфигурация с новой версией контейнера.\n\nЭту операцию нельзя отменить через бота.", 33 | "confirm_update": "⚠️ Вы уверены, что хотите обновить контейнер *$1* новым доступным образом?\n\nВсегда рекомендуется проверить, совместима ли текущая конфигурация с новой версией контейнера.\n\nЭто действие необратимо из бота.", 34 | "container_does_not_exist": "❌ Контейнер *$1* не существует", 35 | "container_id": "ID контейнера", 36 | "created_container": "🔵 Контейнер *$1* был *создан*", 37 | "debug_auto_update": "Автоматическое обновление контейнера $1", 38 | "debug_checking_update": "Проверка обновления: $1 ($2): ЛОКАЛЬНЫЙ ОБРАЗ [$3] - УДАЛЕННЫЙ ОБРАЗ [$4]", 39 | "debug_container_deleting_old_container": "Удаление старого контейнера $1", 40 | "debug_container_found": "Контейнер [$1] найден", 41 | "debug_container_need_to_be_started": "Контейнер был запущен ранее, запускаю его.", 42 | "debug_container_not_found": "Контейнер [$1] не найден", 43 | "debug_creating_new_container": "Создание контейнера с новым образом [$1]", 44 | "debug_deleted": "Удалено: [$1]", 45 | "debug_deleting_image": "Удаление образа [$1]", 46 | "debug_disabled_update_daemon": "Демон обновления отключен", 47 | "debug_find_container": "Поиск ID контейнера [$1]", 48 | "debug_ignore_check_for_update": "Проверка обновления: $1 пропущена", 49 | "debug_image_can_not_be_deleted": "Локальный образ $1 не может быть удален. Причина: [$2]", 50 | "debug_muted_message": "Сообщение [$1] пропущено, потому что отключены уведомления", 51 | "debug_notifying_update": "Отправка уведомления об обновлении...", 52 | "debug_pulled_image": "Получение $1 завершено", 53 | "debug_pulling_image": "Получение образа [$1]", 54 | "debug_renaming_old_container": "Переименование старого контейнера перед удалением [$1] -> [$1_old]", 55 | "debug_started_schedule_daemon": "Демон планировщика активирован", 56 | "debug_started_update_daemon": "Демон обновления активирован", 57 | "debug_starting_bot": "Запуск Docker-Controler-Bot (v$1)", 58 | "debug_starting_monitor_daemon": "Демон мониторинга состояния включен", 59 | "debug_stopping_container": "Контейнер $1 запущен. Он будет остановлен.", 60 | "debug_update_already_notified": "Об этом обновлении уже сообщалось. Уведомление не отправлено.", 61 | "debug_update_detected": "Обнаружено обновление $1! Удаление загруженного образа [$2]", 62 | "debug_update_not_cached": "Запрошено обновление $1, но оно недоступно: [$2]", 63 | "debug_updated_container": "Контейнер $1 обновлён.", 64 | "debug_updating_container": "Обновление контейнера $1", 65 | "debug_waiting_next_check_updates": "Проверка обновлений завершена, ожидание $1 часов.", 66 | "delete_container": "⚠️ Нажмите на контейнер, чтобы удалить его.\nЭто действие необратимо.", 67 | "delete_schedule": "🗑️ Нажмите на расписание, чтобы удалить его", 68 | "deleted_container": "✅ Контейнер *$1* успешно удалён.", 69 | "deleted_schedule": "✅ Расписание успешно удалено.\n```CRON $1```", 70 | "deleting": "_Удаление_ *$1*...", 71 | "donate": "Этот проект с открытым исходным кодом, и я занимаюсь им в свободное время. Пожертвования не откроют никаких дополнительных функций. Это просто идеальный способ сказать спасибо за работу над таким проектом. Если вы хотите сделать это, [нажмите здесь](https://donate.dgongut.com). Большое спасибо ❤️", 72 | "donors_list": "🦸 *Герои Docker Controller Bot*\n\n$1\n\n_Спасибо всем за использование бота! Особая благодарность этим героям за их щедрость и альтруизм, сделавшим пожертвование с помощью команды /donate. Ваша поддержка имеет значение! 🚀💙_", 73 | "empty_schedule": "Нет сохраненных расписаний.\n\nИспользование:\n/schedule CRON run/stop/restart контейнер\n/schedule CRON mute минуты\n\nПример:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nЕсли вы не знакомы с CRON-выражениями, здесь есть сайт для их генерации в соответствии со стандартом.", 74 | "error_adding_schedule": "❌ Похоже, что введенная инструкция не соответствует правильному формату. Введено: $1\n\nИспользование:\n/schedule CRON run/stop/restart контейнер\n\nПример:\n/schedule 0 1 * * * start micontainer\n/schedule 30 4 * * * mute 5\n\nЕсли вы не знакомы с CRON-выражениями, здесь есть сайт для их генерации в соответствии со стандартом.", 75 | "error_bot_container_name": "Имя контейнера должно быть установлено в переменной CONTAINER_NAME", 76 | "error_bot_telegram_admin": "Необходимо настроить chatId пользователя, который будет взаимодействовать с ботом, с помощью переменной TELEGRAM_ADMIN", 77 | "error_bot_telegram_admin_anonymous": "Вы не можете быть анонимным, чтобы управлять ботом. В переменной TELEGRAM_ADMIN вы должны указать свой идентификатор пользователя.", 78 | "error_bot_telegram_thread": "Переменная TELEGRAM_THREAD - это ветка в супергруппе, это числовое значение. Оно было установлено на $1.", 79 | "error_bot_token": "Необходимо настроить токен бота с помощью переменной TELEGRAM_TOKEN", 80 | "error_can_not_do_that": "❌ Невозможно это сделать.", 81 | "error_checking_label_with_error": "Не удалось проверить метку $1 контейнера $2. Ошибка: [$3]", 82 | "error_checking_update_with_error": "Не удалось проверить обновление: [$1]", 83 | "error_creating_new_container_with_error": "Ошибка создания и/или запуска нового контейнера. Информация о контейнере: [$1]", 84 | "error_deleting_container": "❌ Не удалось удалить контейнер *$1*. Подробнее см. логи бота.", 85 | "error_deleting_container_with_error": "Не удалось удалить контейнер $1. Ошибка: [$2]", 86 | "error_deleting_from_file_with_error": "Не удалось удалить строку из файла. Ошибка: [$1]", 87 | "error_getting_architecture": "Ошибка получения архитектуры системы. Ошибка: [$1]", 88 | "error_getting_donors": "❌ Не удалось получить доноров. Попробуйте позже.", 89 | "error_getting_donors_with_error": "Не удалось получить доноров. Попробуйте позже. Ошибка: [$1]", 90 | "error_getting_tags": "❌ Не удалось получить теги из *$1*. Репозиторий в данный момент не поддерживается.", 91 | "error_getting_tags_with_error": "Ошибка получения тегов $1. Ошибка: [$2]", 92 | "error_monitor_daemon": "Произошла ошибка в демоне событий. Перезапуск... Ошибка: [$1]", 93 | "error_multiple_admin_only_with_group": "Несколько администраторов можно указать, только если они используются в группе (с помощью переменной TELEGRAM_GROUP)", 94 | "error_prune_containers": "❌ Произошла ошибка при удалении неиспользуемых контейнеров. Подробнее см. логи бота.", 95 | "error_prune_containers_with_error": "Произошла ошибка при удалении неиспользуемых контейнеров. Ошибка: [$1]", 96 | "error_prune_images": "❌ Произошла ошибка при удалении неиспользуемых образов. Подробнее см. логи бота.", 97 | "error_prune_images_with_error": "Произошла ошибка при удалении неиспользуемых образов. Ошибка: [$1]", 98 | "error_prune_networks": "❌ Произошла ошибка при удалении неиспользуемых сетей. Подробнее см. логи бота.", 99 | "error_prune_networks_with_error": "Произошла ошибка при удалении неиспользуемых сетей. Ошибка: [$1]", 100 | "error_prune_volumes": "❌ Произошла ошибка при удалении неиспользуемых томов. Подробнее см. логи бота.", 101 | "error_prune_volumes_with_error": "Произошла ошибка при удалении неиспользуемых томов. Ошибка: [$1]", 102 | "error_reading_schedule_file": "Произошла ошибка при обработке файла расписаний. Ошибка: [$1]", 103 | "error_renaming_container": "❌ Не удалось переименовать контейнер *$1*. Подробнее см. логи бота.", 104 | "error_renaming_container_with_error": "Не удалось переименовать контейнер $1. Ошибка: [$2]", 105 | "error_restarting_container": "❌ Не удалось перезапустить контейнер *$1*. Подробнее см. логи бота.", 106 | "error_restarting_container_with_error": "Не удалось перезапустить контейнер $1. Ошибка: [$2]", 107 | "error_schedule_daemon": "Произошла ошибка в демоне планировщика. Перезапуск... Ошибка: [$1]", 108 | "error_sending_document": "Не удалось отправить документ в $1. Ошибка: [$2]", 109 | "error_sending_message": "Не удалось отправить сообщение в $1: $2. Ошибка: [$3]", 110 | "error_sending_updates": "Не удалось обновить контейнер $1. Ошибка: [$2]", 111 | "error_showing_compose_container": "❌ Не удалось показать docker compose для контейнера *$1*. Подробнее см. логи бота.", 112 | "error_showing_compose_container_with_error": "Не удалось показать docker compose для контейнера $1. Ошибка: [$2]", 113 | "error_showing_info_container": "❌ Не удалось отобразить информацию о контейнере *$1*. Подробнее см. логи бота.", 114 | "error_showing_info_container_with_error": "Не удалось отобразить информацию о контейнере $1. Ошибка: [$2]", 115 | "error_showing_logs_container": "❌ Не удалось отобразить журналы контейнера *$1*. Подробнее см. логи бота.", 116 | "error_showing_logs_container_with_error": "Не удалось показать логи контейнера $1. Ошибка: [$2]", 117 | "error_starting_container": "❌ Не удалось запустить контейнер *$1*. Подробнее см. логи бота.", 118 | "error_starting_container_with_error": "Не удалось запустить контейнер $1. Ошибка: [$2]", 119 | "error_stats_not_available": "Статистика контейнера $1 недоступна. Ошибка: [$2]", 120 | "error_stopping_container": "❌ Не удалось остановить контейнер *$1*. Подробнее см. логи бота.", 121 | "error_stopping_container_with_error": "Не удалось остановить контейнер $1. Ошибка: [$2]", 122 | "error_tag_name_too_long": "Ошибка добавления тега в список, потому что он слишком длинный. Контейнер: [$1]. Тег: [$2].", 123 | "error_update_daemon": "Произошла ошибка в демоне обновления. Перезапуск... Ошибка: [$1]", 124 | "error_updating_container": "❌ Не удалось обновить контейнер *$1*. Подробнее см. логи бота.", 125 | "error_updating_container_with_error": "Не удалось обновить контейнер $1. Ошибка: [$2]", 126 | "error_use_mute_command": "❌ Пожалуйста, укажите количество минут.\n · Использование: /mute <минуты>\nЧтобы отключить, используйте /mute 0", 127 | "error_use_mute_schedule": "❌ Пожалуйста, укажите количество минут\n · Использование: /schedule CRON mute <минуты>.", 128 | "error_writing_cache_with_error": "Ошибка записи в кеш. Ключ [$1]", 129 | "image_id": "ID образа", 130 | "information": "Информация о", 131 | "loading_file": "_Загрузка файла... Пожалуйста, подождите_", 132 | "logs": "📃 Логи $1", 133 | "menu": "*🫡 Docker Controller Bot к вашим услугам*\n\nДоступные команды:\n\n · /list Полный список контейнеров.\n · /run Запустить контейнер.\n · /stop Остановить контейнер.\n · /restart Перезапустить контейнер.\n · /delete Удалить контейнер.\n · /checkupdate Обновить контейнер.\n · /updateall Обновить все контейнеры.\n · /changetag Изменить тег контейнера. ⚠️\n · /logs Показать последние логи контейнера.\n · /logfile Показать последние логи контейнера в виде файла.\n · /schedule Модуль планирования.\n · /compose Извлечь docker-compose из контейнера. ⚠️\n · /prune Очистить неиспользуемые объекты в системе.\n · /mute <мин> Отключить уведомления.\n · /info Отобразить информацию о контейнере.\n · /version Отобразить текущую версию.\n · /donate Сделать пожертвование разработчику\n · /donors Герои Docker-Controller-Bot\n\n⚠️ Эта функция находится в _экспериментальной_ фазе.", 134 | "menu_change_tag": "Изменить тег контейнера", 135 | "menu_compose": "Извлечь docker-compose из контейнера", 136 | "menu_delete": "Удалить контейнер", 137 | "menu_donate": "Сделать пожертвование разработчику", 138 | "menu_donors": "Герои DCB", 139 | "menu_info": "Отобразить информацию о контейнере", 140 | "menu_list": "Полный список контейнеров", 141 | "menu_logfile": "Показать полные логи контейнера в виде файла", 142 | "menu_logs": "Показать последние логи контейнера", 143 | "menu_mute": "<мин> Отключить уведомления", 144 | "menu_prune": "Очистка позволяет удалить неиспользуемые объекты из системы. \n\nВыберите тип объекта для очистки.", 145 | "menu_restart": "Перезапустить контейнер", 146 | "menu_run": "Запустить контейнер", 147 | "menu_schedule": "Модуль планирования", 148 | "menu_start": "Главное меню", 149 | "menu_stop": "Остановить контейнер", 150 | "menu_update": "Обновить контейнер", 151 | "menu_update_all": "Обновить все контейнеры", 152 | "menu_version": "Показать текущую версию", 153 | "muted": "🔇 Бот отключен на $1 минут", 154 | "muted_singular": "🔇 Бот отключен на 1 минуту", 155 | "NEED_UPDATE_CONTAINER_TEXT": "Доступно обновление ⬆️", 156 | "obtaining_info": "_Получение информации_ из *$1*...", 157 | "prune_containers": "✅ Неиспользуемые контейнеры удалены", 158 | "prune_images": "✅ Неиспользуемые образы удалены", 159 | "prune_networks": "✅ Неиспользуемые сети удалены", 160 | "prune_system": "🗑️ Очистить неиспользуемые объекты системы.\n\nВыберите тип объекта для удаления:", 161 | "prune_volumes": "✅ Неиспользуемые тома удалены", 162 | "restart_a_container": "🟢 Нажмите на контейнер, чтобы перезапустить его", 163 | "restarted_container": "🟢 Контейнер *$1* был *перезапущен*", 164 | "restarting": "_Перезапуск_ *$1*...", 165 | "run_command": "Выполнение [$1]", 166 | "run_command_for_container": "Выполнение [$1] для [$2]", 167 | "schedule_saved": "✅ Сохраненное расписание.\n```CRON $1```", 168 | "self_update_message": "⚙️ Сейчас бот будет перезапущен.\n\nПодождите немного, это может занять до 1 минуты.\n\nБот сообщит вам, когда он снова будет доступен.", 169 | "show_compose": "📃 Нажмите на контейнер, чтобы увидеть его docker-compose.\n\nЭта функция находится в *экспериментальной* фазе и может содержать ошибки, рекомендуется проверить docker-compose.", 170 | "show_info": "📜 Нажмите на контейнер, чтобы увидеть информацию о нем.", 171 | "show_logs": "📃 Нажмите на контейнер, чтобы увидеть его последние логи", 172 | "show_logsfile": "📃 Нажмите на контейнер, чтобы увидеть его логи в виде файла", 173 | "showing_logs": "📃 Это последние логи контейнера *$1*:\n\n```$1\n$2```", 174 | "start_a_container": "🟢 Нажмите на контейнер, чтобы запустить его", 175 | "started_container": "🟢 Контейнер *$1* был *запущен*", 176 | "starting": "_Запуск_ *$1*...", 177 | "status": "Статус", 178 | "stop_a_container": "🔴 Нажмите на контейнер, чтобы остановить его", 179 | "stopped_container": "🔴 Контейнер *$1* был *остановлен*", 180 | "stopping": "_Остановка_ *$1*...", 181 | "unmuted": "🔉 Уведомления бота снова включены", 182 | "update_container": "⚠️ Нажмите на контейнер, чтобы обновить его", 183 | "updated_container": "✅ Контейнер *$1* успешно обновлен.", 184 | "UPDATED_CONTAINER_TEXT": "Контейнер обновлен ✅", 185 | "updating": "_Обновление_ *$1*...", 186 | "updating_creating": "_Обновление_ *$1*...\nСоздание контейнера...", 187 | "updating_deleting_old": "_Обновление_ *$1*...\nУдаление старого контейнера...", 188 | "updating_downloading": "_Обновление_ *$1*...\nЗагрузка...", 189 | "updating_starting": "_Обновление_ *$1*...\nЗапуск контейнера...", 190 | "updating_stopping": "_Обновление_ *$1*...\nОстановка контейнера...", 191 | "used_image": "Используемый образ", 192 | "user_not_admin": "❌ Этот бот вам не принадлежит.\n\nЕсли вы хотите управлять своими Docker-контейнерами через Telegram, разверните меня на своем сервере.\n\nВзгляните на [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot), где вы найдете docker-compose. \n\nВам интересно? Код опубликован на [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nЕсли у вас есть вопросы, спросите меня, я @dgongut", 193 | "version": "⚙️ _Версия: $1_\nРазработано с ❤️ от @dgongut\n\nЕсли вы обнаружите ошибки или у вас есть предложения, свяжитесь со мной.\n\nВы можете найти все, что связано с этим ботом, на [DockerHub](https://hub.docker.com/r/dgongut/docker-controller-bot) или на [GitHub](https://github.com/dgongut/docker-controller-bot).\n\nЧтобы следить за новостями на испанском языке, [нажмите здесь](https://t.me/dockercontrollerbotnews).", 194 | "warning_not_admin": "Пользователь $1 (@$2) не является администратором и пытался использовать бота." 195 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | pyparsing==3.2.1 2 | requests==2.32.3 3 | pyTelegramBotAPI==4.26.0 4 | docker==7.1.0 5 | PyYAML==6.0.2 6 | croniter==6.0.0 --------------------------------------------------------------------------------