├── .gitignore ├── LICENSE ├── README.md ├── app.json ├── assets └── png.txt ├── heroku.yml ├── runtime.txt ├── sample.env ├── start └── tools ├── commands └── updates.txt ├── config.py ├── helpers └── helpers.txt └── plugins ├── FontStyle.py ├── __init__.py └── logo.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | -------------------------------------------------------------------------------- /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 | # Tools-Bot 2 | A Telegram Bot Include Many Useful Tools, picture Edit | Font Style | Voice To Text | Translator And Many More... 3 | 4 | This Project is not finished yet , hold On!! 5 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tools Bot", 3 | "description": "A Telegram Tools Bot with proper functions written in Python with Pyrogram .", 4 | "repository": "https://github.com/The-Mayans/Tools-Bot", 5 | "logo": "https://upload.wikimedia.org/wikipedia/commons/c/c3/Python-logo-notext.svg", 6 | "keywords": [ 7 | "python3", 8 | "telegram", 9 | "bot", 10 | "Tools", 11 | "ToolsBot", 12 | "telegram-bot", 13 | "pyrogram" 14 | ], 15 | "stack": "container", 16 | "env": { 17 | "API_ID": { 18 | "description": "Get this value from https://my.telegram.org", 19 | "value": "", 20 | "required": true 21 | }, 22 | "API_HASH": { 23 | "description": "Get this value from https://my.telegram.org", 24 | "value": "", 25 | "required": true 26 | }, 27 | "BOT_TOKEN": { 28 | "description": "A Bot's token from Botfather", 29 | "value": "", 30 | "required": true 31 | } 32 | }, 33 | "buildpacks": [ 34 | { 35 | "url": "heroku/python" 36 | } 37 | ], 38 | "formation": { 39 | "worker": { 40 | "quantity": 1, 41 | "size": "free" 42 | } 43 | }, 44 | "stack": "container" 45 | } 46 | -------------------------------------------------------------------------------- /assets/png.txt: -------------------------------------------------------------------------------- 1 | # w d 2 | -------------------------------------------------------------------------------- /heroku.yml: -------------------------------------------------------------------------------- 1 | build: 2 | docker: 3 | worker: Dockerfile 4 | -------------------------------------------------------------------------------- /runtime.txt: -------------------------------------------------------------------------------- 1 | python-3.9.0 2 | -------------------------------------------------------------------------------- /sample.env: -------------------------------------------------------------------------------- 1 | BOT_TOKEN= "" Get a token from @botFather 2 | 3 | API_ID= "" Get this value from https://my.telegram.org 4 | 5 | API_HASH= "" Get this value from https://my.telegram.org 6 | 7 | ## just start 8 | -------------------------------------------------------------------------------- /start: -------------------------------------------------------------------------------- 1 | python3 -m Tools 2 | -------------------------------------------------------------------------------- /tools/commands/updates.txt: -------------------------------------------------------------------------------- 1 | # start 10/9 2 | -------------------------------------------------------------------------------- /tools/config.py: -------------------------------------------------------------------------------- 1 | from os import getenv 2 | 3 | BOT_TOKEN = getenv("BOT_TOKEN") 4 | API_ID = int(getenv("API_ID", "")) 5 | API_HASH = getenv("API_HASH") 6 | -------------------------------------------------------------------------------- /tools/helpers/helpers.txt: -------------------------------------------------------------------------------- 1 | # -10/9 2 | -------------------------------------------------------------------------------- /tools/plugins/FontStyle.py: -------------------------------------------------------------------------------- 1 | 2 | class Fonts: 3 | def typewriter(text): 4 | style = { 5 | 'a': '𝚊', 6 | 'b': '𝚋', 7 | 'c': '𝚌', 8 | 'd': '𝚍', 9 | 'e': '𝚎', 10 | 'f': '𝚏', 11 | 'g': '𝚐', 12 | 'h': '𝚑', 13 | 'i': '𝚒', 14 | 'j': '𝚓', 15 | 'k': '𝚔', 16 | 'l': '𝚕', 17 | 'm': '𝚖', 18 | 'n': '𝚗', 19 | 'o': '𝚘', 20 | 'p': '𝚙', 21 | 'q': '𝚚', 22 | 'r': '𝚛', 23 | 's': '𝚜', 24 | 't': '𝚝', 25 | 'u': '𝚞', 26 | 'v': '𝚟', 27 | 'w': '𝚠', 28 | 'x': '𝚡', 29 | 'y': '𝚢', 30 | 'z': '𝚣', 31 | 'A': '𝙰', 32 | 'B': '𝙱', 33 | 'C': '𝙲', 34 | 'D': '𝙳', 35 | 'E': '𝙴', 36 | 'F': '𝙵', 37 | 'G': '𝙶', 38 | 'H': '𝙷', 39 | 'I': '𝙸', 40 | 'J': '𝙹', 41 | 'K': '𝙺', 42 | 'L': '𝙻', 43 | 'M': '𝙼', 44 | 'N': '𝙽', 45 | 'O': '𝙾', 46 | 'P': '𝙿', 47 | 'Q': '𝚀', 48 | 'R': '𝚁', 49 | 'S': '𝚂', 50 | 'T': '𝚃', 51 | 'U': '𝚄', 52 | 'V': '𝚅', 53 | 'W': '𝚆', 54 | 'X': '𝚇', 55 | 'Y': '𝚈', 56 | 'Z': '𝚉' 57 | } 58 | for i, j in style.items(): 59 | text = text.replace(i, j) 60 | return text 61 | 62 | def outline(text): 63 | style = { 64 | 'a': '𝕒', 65 | 'b': '𝕓', 66 | 'c': '𝕔', 67 | 'd': '𝕕', 68 | 'e': '𝕖', 69 | 'f': '𝕗', 70 | 'g': '𝕘', 71 | 'h': '𝕙', 72 | 'i': '𝕚', 73 | 'j': '𝕛', 74 | 'k': '𝕜', 75 | 'l': '𝕝', 76 | 'm': '𝕞', 77 | 'n': '𝕟', 78 | 'o': '𝕠', 79 | 'p': '𝕡', 80 | 'q': '𝕢', 81 | 'r': '𝕣', 82 | 's': '𝕤', 83 | 't': '𝕥', 84 | 'u': '𝕦', 85 | 'v': '𝕧', 86 | 'w': '𝕨', 87 | 'x': '𝕩', 88 | 'y': '𝕪', 89 | 'z': '𝕫', 90 | 'A': '𝔸', 91 | 'B': '𝔹', 92 | 'C': 'ℂ', 93 | 'D': '𝔻', 94 | 'E': '𝔼', 95 | 'F': '𝔽', 96 | 'G': '𝔾', 97 | 'H': 'ℍ', 98 | 'I': '𝕀', 99 | 'J': '𝕁', 100 | 'K': '𝕂', 101 | 'L': '𝕃', 102 | 'M': '𝕄', 103 | 'N': 'ℕ', 104 | 'O': '𝕆', 105 | 'P': 'ℙ', 106 | 'Q': 'ℚ', 107 | 'R': 'ℝ', 108 | 'S': '𝕊', 109 | 'T': '𝕋', 110 | 'U': '𝕌', 111 | 'V': '𝕍', 112 | 'W': '𝕎', 113 | 'X': '𝕏', 114 | 'Y': '𝕐', 115 | 'Z': 'ℤ', 116 | '0': '𝟘', 117 | '1': '𝟙', 118 | '2': '𝟚', 119 | '3': '𝟛', 120 | '4': '𝟜', 121 | '5': '𝟝', 122 | '6': '𝟞', 123 | '7': '𝟟', 124 | '8': '𝟠', 125 | '9': '𝟡' 126 | } 127 | for i, j in style.items(): 128 | text = text.replace(i, j) 129 | return text 130 | 131 | def serief(text): 132 | style = { 133 | 'a': '𝐚', 134 | 'b': '𝐛', 135 | 'c': '𝐜', 136 | 'd': '𝐝', 137 | 'e': '𝐞', 138 | 'f': '𝐟', 139 | 'g': '𝐠', 140 | 'h': '𝐡', 141 | 'i': '𝐢', 142 | 'j': '𝐣', 143 | 'k': '𝐤', 144 | 'l': '𝐥', 145 | 'm': '𝐦', 146 | 'n': '𝐧', 147 | 'o': '𝐨', 148 | 'p': '𝐩', 149 | 'q': '𝐪', 150 | 'r': '𝐫', 151 | 's': '𝐬', 152 | 't': '𝐭', 153 | 'u': '𝐮', 154 | 'v': '𝐯', 155 | 'w': '𝐰', 156 | 'x': '𝐱', 157 | 'y': '𝐲', 158 | 'z': '𝐳', 159 | 'A': '𝐀', 160 | 'B': '𝐁', 161 | 'C': '𝐂', 162 | 'D': '𝐃', 163 | 'E': '𝐄', 164 | 'F': '𝐅', 165 | 'G': '𝐆', 166 | 'H': '𝐇', 167 | 'I': '𝐈', 168 | 'J': '𝐉', 169 | 'K': '𝐊', 170 | 'L': '𝐋', 171 | 'M': '𝐌', 172 | 'N': '𝐍', 173 | 'O': '𝐎', 174 | 'P': '𝐏', 175 | 'Q': '𝐐', 176 | 'R': '𝐑', 177 | 'S': '𝐒', 178 | 'T': '𝐓', 179 | 'U': '𝐔', 180 | 'V': '𝐕', 181 | 'W': '𝐖', 182 | 'X': '𝐗', 183 | 'Y': '𝐘', 184 | 'Z': '𝐙', 185 | '0': '𝟎', 186 | '1': '𝟏', 187 | '2': '𝟐', 188 | '3': '𝟑', 189 | '4': '𝟒', 190 | '5': '𝟓', 191 | '6': '𝟔', 192 | '7': '𝟕', 193 | '8': '𝟖', 194 | '9': '𝟗' 195 | } 196 | for i, j in style.items(): 197 | text = text.replace(i, j) 198 | return text 199 | 200 | def bold_cool(text): 201 | style = { 202 | 'a': '𝒂', 203 | 'b': '𝒃', 204 | 'c': '𝒄', 205 | 'd': '𝒅', 206 | 'e': '𝒆', 207 | 'f': '𝒇', 208 | 'g': '𝒈', 209 | 'h': '𝒉', 210 | 'i': '𝒊', 211 | 'j': '𝒋', 212 | 'k': '𝒌', 213 | 'l': '𝒍', 214 | 'm': '𝒎', 215 | 'n': '𝒏', 216 | 'o': '𝒐', 217 | 'p': '𝒑', 218 | 'q': '𝒒', 219 | 'r': '𝒓', 220 | 's': '𝒔', 221 | 't': '𝒕', 222 | 'u': '𝒖', 223 | 'v': '𝒗', 224 | 'w': '𝒘', 225 | 'x': '𝒙', 226 | 'y': '𝒚', 227 | 'z': '𝒛', 228 | 'A': '𝑨', 229 | 'B': '𝑩', 230 | 'C': '𝑪', 231 | 'D': '𝑫', 232 | 'E': '𝑬', 233 | 'F': '𝑭', 234 | 'G': '𝑮', 235 | 'H': '𝑯', 236 | 'I': '𝑰', 237 | 'J': '𝑱', 238 | 'K': '𝑲', 239 | 'L': '𝑳', 240 | 'M': '𝑴', 241 | 'N': '𝑵', 242 | 'O': '𝑶', 243 | 'P': '𝑷', 244 | 'Q': '𝑸', 245 | 'R': '𝑹', 246 | 'S': '𝑺', 247 | 'T': '𝑻', 248 | 'U': '𝑼', 249 | 'V': '𝑽', 250 | 'W': '𝑾', 251 | 'X': '𝑿', 252 | 'Y': '𝒀', 253 | 'Z': '𝒁' 254 | } 255 | for i, j in style.items(): 256 | text = text.replace(i, j) 257 | return text 258 | 259 | def cool(text): 260 | style = { 261 | 'a': '𝑎', 262 | 'b': '𝑏', 263 | 'c': '𝑐', 264 | 'd': '𝑑', 265 | 'e': '𝑒', 266 | 'f': '𝑓', 267 | 'g': '𝑔', 268 | 'h': 'ℎ', 269 | 'i': '𝑖', 270 | 'j': '𝑗', 271 | 'k': '𝑘', 272 | 'l': '𝑙', 273 | 'm': '𝑚', 274 | 'n': '𝑛', 275 | 'o': '𝑜', 276 | 'p': '𝑝', 277 | 'q': '𝑞', 278 | 'r': '𝑟', 279 | 's': '𝑠', 280 | 't': '𝑡', 281 | 'u': '𝑢', 282 | 'v': '𝑣', 283 | 'w': '𝑤', 284 | 'x': '𝑥', 285 | 'y': '𝑦', 286 | 'z': '𝑧', 287 | 'A': '𝐴', 288 | 'B': '𝐵', 289 | 'C': '𝐶', 290 | 'D': '𝐷', 291 | 'E': '𝐸', 292 | 'F': '𝐹', 293 | 'G': '𝐺', 294 | 'H': '𝐻', 295 | 'I': '𝐼', 296 | 'J': '𝐽', 297 | 'K': '𝐾', 298 | 'L': '𝐿', 299 | 'M': '𝑀', 300 | 'N': '𝑁', 301 | 'O': '𝑂', 302 | 'P': '𝑃', 303 | 'Q': '𝑄', 304 | 'R': '𝑅', 305 | 'S': '𝑆', 306 | 'T': '𝑇', 307 | 'U': '𝑈', 308 | 'V': '𝑉', 309 | 'W': '𝑊', 310 | 'X': '𝑋', 311 | 'Y': '𝑌', 312 | 'Z': '𝑍' 313 | } 314 | for i, j in style.items(): 315 | text = text.replace(i, j) 316 | return text 317 | 318 | def smallcap(text): 319 | style = { 320 | 'a': 'ᴀ', 321 | 'b': 'ʙ', 322 | 'c': 'ᴄ', 323 | 'd': 'ᴅ', 324 | 'e': 'ᴇ', 325 | 'f': 'ғ', 326 | 'g': 'ɢ', 327 | 'h': 'ʜ', 328 | 'i': 'ɪ', 329 | 'j': 'ɪ', 330 | 'k': 'ᴋ', 331 | 'l': 'ʟ', 332 | 'm': 'ᴍ', 333 | 'n': 'ɴ', 334 | 'o': 'ᴏ', 335 | 'p': 'ᴘ', 336 | 'q': 'ǫ', 337 | 'r': 'ʀ', 338 | 's': 's', 339 | 't': 'ᴛ', 340 | 'u': 'ᴜ', 341 | 'v': 'ᴠ', 342 | 'w': 'ᴡ', 343 | 'x': 'x', 344 | 'y': 'ʏ', 345 | 'z': 'ᴢ', 346 | 'A': 'A', 347 | 'B': 'B', 348 | 'C': 'C', 349 | 'D': 'D', 350 | 'E': 'E', 351 | 'F': 'F', 352 | 'G': 'G', 353 | 'H': 'H', 354 | 'I': 'I', 355 | 'J': 'J', 356 | 'K': 'K', 357 | 'L': 'L', 358 | 'M': 'M', 359 | 'N': 'N', 360 | 'O': 'O', 361 | 'P': 'P', 362 | 'Q': 'Q', 363 | 'R': 'R', 364 | 'S': 'S', 365 | 'T': 'T', 366 | 'U': 'U', 367 | 'V': 'V', 368 | 'W': 'W', 369 | 'X': 'X', 370 | 'Y': 'Y', 371 | 'Z': 'Z', 372 | '0': '𝟶', 373 | '1': '𝟷', 374 | '2': '𝟸', 375 | '3': '𝟹', 376 | '4': '𝟺', 377 | '5': '𝟻', 378 | '6': '𝟼', 379 | '7': '𝟽', 380 | '8': '𝟾', 381 | '9': '𝟿' 382 | } 383 | for i, j in style.items(): 384 | text = text.replace(i, j) 385 | return text 386 | 387 | def script(text): 388 | style = { 389 | 'a': '𝒶', 390 | 'b': '𝒷', 391 | 'c': '𝒸', 392 | 'd': '𝒹', 393 | 'e': 'ℯ', 394 | 'f': '𝒻', 395 | 'g': 'ℊ', 396 | 'h': '𝒽', 397 | 'i': '𝒾', 398 | 'j': '𝒿', 399 | 'k': '𝓀', 400 | 'l': '𝓁', 401 | 'm': '𝓂', 402 | 'n': '𝓃', 403 | 'o': 'ℴ', 404 | 'p': '𝓅', 405 | 'q': '𝓆', 406 | 'r': '𝓇', 407 | 's': '𝓈', 408 | 't': '𝓉', 409 | 'u': '𝓊', 410 | 'v': '𝓋', 411 | 'w': '𝓌', 412 | 'x': '𝓍', 413 | 'y': '𝓎', 414 | 'z': '𝓏', 415 | 'A': '𝒜', 416 | 'B': 'ℬ', 417 | 'C': '𝒞', 418 | 'D': '𝒟', 419 | 'E': 'ℰ', 420 | 'F': 'ℱ', 421 | 'G': '𝒢', 422 | 'H': 'ℋ', 423 | 'I': 'ℐ', 424 | 'J': '𝒥', 425 | 'K': '𝒦', 426 | 'L': 'ℒ', 427 | 'M': 'ℳ', 428 | 'N': '𝒩', 429 | 'O': '𝒪', 430 | 'P': '𝒫', 431 | 'Q': '𝒬', 432 | 'R': 'ℛ', 433 | 'S': '𝒮', 434 | 'T': '𝒯', 435 | 'U': '𝒰', 436 | 'V': '𝒱', 437 | 'W': '𝒲', 438 | 'X': '𝒳', 439 | 'Y': '𝒴', 440 | 'Z': '𝒵' 441 | } 442 | for i, j in style.items(): 443 | text = text.replace(i, j) 444 | return text 445 | 446 | def bold_script(text): 447 | style = { 448 | 'a': '𝓪', 449 | 'b': '𝓫', 450 | 'c': '𝓬', 451 | 'd': '𝓭', 452 | 'e': '𝓮', 453 | 'f': '𝓯', 454 | 'g': '𝓰', 455 | 'h': '𝓱', 456 | 'i': '𝓲', 457 | 'j': '𝓳', 458 | 'k': '𝓴', 459 | 'l': '𝓵', 460 | 'm': '𝓶', 461 | 'n': '𝓷', 462 | 'o': '𝓸', 463 | 'p': '𝓹', 464 | 'q': '𝓺', 465 | 'r': '𝓻', 466 | 's': '𝓼', 467 | 't': '𝓽', 468 | 'u': '𝓾', 469 | 'v': '𝓿', 470 | 'w': '𝔀', 471 | 'x': '𝔁', 472 | 'y': '𝔂', 473 | 'z': '𝔃', 474 | 'A': '𝓐', 475 | 'B': '𝓑', 476 | 'C': '𝓒', 477 | 'D': '𝓓', 478 | 'E': '𝓔', 479 | 'F': '𝓕', 480 | 'G': '𝓖', 481 | 'H': '𝓗', 482 | 'I': '𝓘', 483 | 'J': '𝓙', 484 | 'K': '𝓚', 485 | 'L': '𝓛', 486 | 'M': '𝓜', 487 | 'N': '𝓝', 488 | 'O': '𝓞', 489 | 'P': '𝓟', 490 | 'Q': '𝓠', 491 | 'R': '𝓡', 492 | 'S': '𝓢', 493 | 'T': '𝓣', 494 | 'U': '𝓤', 495 | 'V': '𝓥', 496 | 'W': '𝓦', 497 | 'X': '𝓧', 498 | 'Y': '𝓨', 499 | 'Z': '𝓩' 500 | } 501 | for i, j in style.items(): 502 | text = text.replace(i, j) 503 | return text 504 | 505 | def tiny(text): 506 | style = { 507 | 'a': 'ᵃ', 508 | 'b': 'ᵇ', 509 | 'c': 'ᶜ', 510 | 'd': 'ᵈ', 511 | 'e': 'ᵉ', 512 | 'f': 'ᶠ', 513 | 'g': 'ᵍ', 514 | 'h': 'ʰ', 515 | 'i': 'ⁱ', 516 | 'j': 'ʲ', 517 | 'k': 'ᵏ', 518 | 'l': 'ˡ', 519 | 'm': 'ᵐ', 520 | 'n': 'ⁿ', 521 | 'o': 'ᵒ', 522 | 'p': 'ᵖ', 523 | 'q': 'ᵠ', 524 | 'r': 'ʳ', 525 | 's': 'ˢ', 526 | 't': 'ᵗ', 527 | 'u': 'ᵘ', 528 | 'v': 'ᵛ', 529 | 'w': 'ʷ', 530 | 'x': 'ˣ', 531 | 'y': 'ʸ', 532 | 'z': 'ᶻ', 533 | 'A': 'ᵃ', 534 | 'B': 'ᵇ', 535 | 'C': 'ᶜ', 536 | 'D': 'ᵈ', 537 | 'E': 'ᵉ', 538 | 'F': 'ᶠ', 539 | 'G': 'ᵍ', 540 | 'H': 'ʰ', 541 | 'I': 'ⁱ', 542 | 'J': 'ʲ', 543 | 'K': 'ᵏ', 544 | 'L': 'ˡ', 545 | 'M': 'ᵐ', 546 | 'N': 'ⁿ', 547 | 'O': 'ᵒ', 548 | 'P': 'ᵖ', 549 | 'Q': 'ᵠ', 550 | 'R': 'ʳ', 551 | 'S': 'ˢ', 552 | 'T': 'ᵗ', 553 | 'U': 'ᵘ', 554 | 'V': 'ᵛ', 555 | 'W': 'ʷ', 556 | 'X': 'ˣ', 557 | 'Y': 'ʸ', 558 | 'Z': 'ᶻ' 559 | } 560 | for i, j in style.items(): 561 | text = text.replace(i, j) 562 | return text 563 | 564 | def comic(text): 565 | style = { 566 | 'a': 'ᗩ', 567 | 'b': 'ᗷ', 568 | 'c': 'ᑕ', 569 | 'd': 'ᗪ', 570 | 'e': 'ᗴ', 571 | 'f': 'ᖴ', 572 | 'g': 'ᘜ', 573 | 'h': 'ᕼ', 574 | 'i': 'I', 575 | 'j': 'ᒍ', 576 | 'k': 'K', 577 | 'l': 'ᒪ', 578 | 'm': 'ᗰ', 579 | 'n': 'ᑎ', 580 | 'o': 'O', 581 | 'p': 'ᑭ', 582 | 'q': 'ᑫ', 583 | 'r': 'ᖇ', 584 | 's': 'Տ', 585 | 't': 'T', 586 | 'u': 'ᑌ', 587 | 'v': 'ᐯ', 588 | 'w': 'ᗯ', 589 | 'x': '᙭', 590 | 'y': 'Y', 591 | 'z': 'ᘔ', 592 | 'A': 'ᗩ', 593 | 'B': 'ᗷ', 594 | 'C': 'ᑕ', 595 | 'D': 'ᗪ', 596 | 'E': 'ᗴ', 597 | 'F': 'ᖴ', 598 | 'G': 'ᘜ', 599 | 'H': 'ᕼ', 600 | 'I': 'I', 601 | 'J': 'ᒍ', 602 | 'K': 'K', 603 | 'L': 'ᒪ', 604 | 'M': 'ᗰ', 605 | 'N': 'ᑎ', 606 | 'O': 'O', 607 | 'P': 'ᑭ', 608 | 'Q': 'ᑫ', 609 | 'R': 'ᖇ', 610 | 'S': 'Տ', 611 | 'T': 'T', 612 | 'U': 'ᑌ', 613 | 'V': 'ᐯ', 614 | 'W': 'ᗯ', 615 | 'X': '᙭', 616 | 'Y': 'Y', 617 | 'Z': 'ᘔ' 618 | } 619 | for i, j in style.items(): 620 | text = text.replace(i, j) 621 | return text 622 | 623 | def san(text): 624 | style = { 625 | 'a': '𝗮', 626 | 'b': '𝗯', 627 | 'c': '𝗰', 628 | 'd': '𝗱', 629 | 'e': '𝗲', 630 | 'f': '𝗳', 631 | 'g': '𝗴', 632 | 'h': '𝗵', 633 | 'i': '𝗶', 634 | 'j': '𝗷', 635 | 'k': '𝗸', 636 | 'l': '𝗹', 637 | 'm': '𝗺', 638 | 'n': '𝗻', 639 | 'o': '𝗼', 640 | 'p': '𝗽', 641 | 'q': '𝗾', 642 | 'r': '𝗿', 643 | 's': '𝘀', 644 | 't': '𝘁', 645 | 'u': '𝘂', 646 | 'v': '𝘃', 647 | 'w': '𝘄', 648 | 'x': '𝘅', 649 | 'y': '𝘆', 650 | 'z': '𝘇', 651 | 'A': '𝗔', 652 | 'B': '𝗕', 653 | 'C': '𝗖', 654 | 'D': '𝗗', 655 | 'E': '𝗘', 656 | 'F': '𝗙', 657 | 'G': '𝗚', 658 | 'H': '𝗛', 659 | 'I': '𝗜', 660 | 'J': '𝗝', 661 | 'K': '𝗞', 662 | 'L': '𝗟', 663 | 'M': '𝗠', 664 | 'N': '𝗡', 665 | 'O': '𝗢', 666 | 'P': '𝗣', 667 | 'Q': '𝗤', 668 | 'R': '𝗥', 669 | 'S': '𝗦', 670 | 'T': '𝗧', 671 | 'U': '𝗨', 672 | 'V': '𝗩', 673 | 'W': '𝗪', 674 | 'X': '𝗫', 675 | 'Y': '𝗬', 676 | 'Z': '𝗭', 677 | '0': '𝟬', 678 | '1': '𝟭', 679 | '2': '𝟮', 680 | '3': '𝟯', 681 | '4': '𝟰', 682 | '5': '𝟱', 683 | '6': '𝟲', 684 | '7': '𝟳', 685 | '8': '𝟴', 686 | '9': '𝟵' 687 | } 688 | for i, j in style.items(): 689 | text = text.replace(i, j) 690 | return text 691 | 692 | def slant_san(text): 693 | style = { 694 | 'a': '𝙖', 695 | 'b': '𝙗', 696 | 'c': '𝙘', 697 | 'd': '𝙙', 698 | 'e': '𝙚', 699 | 'f': '𝙛', 700 | 'g': '𝙜', 701 | 'h': '𝙝', 702 | 'i': '𝙞', 703 | 'j': '𝙟', 704 | 'k': '𝙠', 705 | 'l': '𝙡', 706 | 'm': '𝙢', 707 | 'n': '𝙣', 708 | 'o': '𝙤', 709 | 'p': '𝙥', 710 | 'q': '𝙦', 711 | 'r': '𝙧', 712 | 's': '𝙨', 713 | 't': '𝙩', 714 | 'u': '𝙪', 715 | 'v': '𝙫', 716 | 'w': '𝙬', 717 | 'x': '𝙭', 718 | 'y': '𝙮', 719 | 'z': '𝙯', 720 | 'A': '𝘼', 721 | 'B': '𝘽', 722 | 'C': '𝘾', 723 | 'D': '𝘿', 724 | 'E': '𝙀', 725 | 'F': '𝙁', 726 | 'G': '𝙂', 727 | 'H': '𝙃', 728 | 'I': '𝙄', 729 | 'J': '𝙅', 730 | 'K': '𝙆', 731 | 'L': '𝙇', 732 | 'M': '𝙈', 733 | 'N': '𝙉', 734 | 'O': '𝙊', 735 | 'P': '𝙋', 736 | 'Q': '𝙌', 737 | 'R': '𝙍', 738 | 'S': '𝙎', 739 | 'T': '𝙏', 740 | 'U': '𝙐', 741 | 'V': '𝙑', 742 | 'W': '𝙒', 743 | 'X': '𝙓', 744 | 'Y': '𝙔', 745 | 'Z': '𝙕' 746 | } 747 | for i, j in style.items(): 748 | text = text.replace(i, j) 749 | return text 750 | 751 | def slant(text): 752 | style = { 753 | 'a': '𝘢', 754 | 'b': '𝘣', 755 | 'c': '𝘤', 756 | 'd': '𝘥', 757 | 'e': '𝘦', 758 | 'f': '𝘧', 759 | 'g': '𝘨', 760 | 'h': '𝘩', 761 | 'i': '𝘪', 762 | 'j': '𝘫', 763 | 'k': '𝘬', 764 | 'l': '𝘭', 765 | 'm': '𝘮', 766 | 'n': '𝘯', 767 | 'o': '𝘰', 768 | 'p': '𝘱', 769 | 'q': '𝘲', 770 | 'r': '𝘳', 771 | 's': '𝘴', 772 | 't': '𝘵', 773 | 'u': '𝘶', 774 | 'v': '𝘷', 775 | 'w': '𝘸', 776 | 'x': '𝘹', 777 | 'y': '𝘺', 778 | 'z': '𝘻', 779 | 'A': '𝘈', 780 | 'B': '𝘉', 781 | 'C': '𝘊', 782 | 'D': '𝘋', 783 | 'E': '𝘌', 784 | 'F': '𝘍', 785 | 'G': '𝘎', 786 | 'H': '𝘏', 787 | 'I': '𝘐', 788 | 'J': '𝘑', 789 | 'K': '𝘒', 790 | 'L': '𝘓', 791 | 'M': '𝘔', 792 | 'N': '𝘕', 793 | 'O': '𝘖', 794 | 'P': '𝘗', 795 | 'Q': '𝘘', 796 | 'R': '𝘙', 797 | 'S': '𝘚', 798 | 'T': '𝘛', 799 | 'U': '𝘜', 800 | 'V': '𝘝', 801 | 'W': '𝘞', 802 | 'X': '𝘟', 803 | 'Y': '𝘠', 804 | 'Z': '𝘡' 805 | } 806 | for i, j in style.items(): 807 | text = text.replace(i, j) 808 | return text 809 | 810 | def sim(text): 811 | style = { 812 | 'a': '𝖺', 813 | 'b': '𝖻', 814 | 'c': '𝖼', 815 | 'd': '𝖽', 816 | 'e': '𝖾', 817 | 'f': '𝖿', 818 | 'g': '𝗀', 819 | 'h': '𝗁', 820 | 'i': '𝗂', 821 | 'j': '𝗃', 822 | 'k': '𝗄', 823 | 'l': '𝗅', 824 | 'm': '𝗆', 825 | 'n': '𝗇', 826 | 'o': '𝗈', 827 | 'p': '𝗉', 828 | 'q': '𝗊', 829 | 'r': '𝗋', 830 | 's': '𝗌', 831 | 't': '𝗍', 832 | 'u': '𝗎', 833 | 'v': '𝗏', 834 | 'w': '𝗐', 835 | 'x': '𝗑', 836 | 'y': '𝗒', 837 | 'z': '𝗓', 838 | 'A': '𝖠', 839 | 'B': '𝖡', 840 | 'C': '𝖢', 841 | 'D': '𝖣', 842 | 'E': '𝖤', 843 | 'F': '𝖥', 844 | 'G': '𝖦', 845 | 'H': '𝖧', 846 | 'I': '𝖨', 847 | 'J': '𝖩', 848 | 'K': '𝖪', 849 | 'L': '𝖫', 850 | 'M': '𝖬', 851 | 'N': '𝖭', 852 | 'O': '𝖮', 853 | 'P': '𝖯', 854 | 'Q': '𝖰', 855 | 'R': '𝖱', 856 | 'S': '𝖲', 857 | 'T': '𝖳', 858 | 'U': '𝖴', 859 | 'V': '𝖵', 860 | 'W': '𝖶', 861 | 'X': '𝖷', 862 | 'Y': '𝖸', 863 | 'Z': '𝖹' 864 | } 865 | for i, j in style.items(): 866 | text = text.replace(i, j) 867 | return text 868 | 869 | def circles(text): 870 | style = { 871 | 'a': 'Ⓐ︎', 872 | 'b': 'Ⓑ︎', 873 | 'c': 'Ⓒ︎', 874 | 'd': 'Ⓓ︎', 875 | 'e': 'Ⓔ︎', 876 | 'f': 'Ⓕ︎', 877 | 'g': 'Ⓖ︎', 878 | 'h': 'Ⓗ︎', 879 | 'i': 'Ⓘ︎', 880 | 'j': 'Ⓙ︎', 881 | 'k': 'Ⓚ︎', 882 | 'l': 'Ⓛ︎', 883 | 'm': 'Ⓜ︎', 884 | 'n': 'Ⓝ︎', 885 | 'o': 'Ⓞ︎', 886 | 'p': 'Ⓟ︎', 887 | 'q': 'Ⓠ︎', 888 | 'r': 'Ⓡ︎', 889 | 's': 'Ⓢ︎', 890 | 't': 'Ⓣ︎', 891 | 'u': 'Ⓤ︎', 892 | 'v': 'Ⓥ︎', 893 | 'w': 'Ⓦ︎', 894 | 'x': 'Ⓧ︎', 895 | 'y': 'Ⓨ︎', 896 | 'z': 'Ⓩ︎', 897 | 'A': 'Ⓐ︎', 898 | 'B': 'Ⓑ︎', 899 | 'C': 'Ⓒ︎', 900 | 'D': 'Ⓓ︎', 901 | 'E': 'Ⓔ︎', 902 | 'F': 'Ⓕ︎', 903 | 'G': 'Ⓖ︎', 904 | 'H': 'Ⓗ︎', 905 | 'I': 'Ⓘ︎', 906 | 'J': 'Ⓙ︎', 907 | 'K': 'Ⓚ︎', 908 | 'L': 'Ⓛ︎', 909 | 'M': 'Ⓜ︎', 910 | 'N': 'Ⓝ︎', 911 | 'O': 'Ⓞ︎', 912 | 'P': 'Ⓟ︎', 913 | 'Q': 'Ⓠ︎', 914 | 'R': 'Ⓡ︎', 915 | 'S': 'Ⓢ︎', 916 | 'T': 'Ⓣ︎', 917 | 'U': 'Ⓤ︎', 918 | 'V': 'Ⓥ︎', 919 | 'W': 'Ⓦ︎', 920 | 'X': 'Ⓧ︎', 921 | 'Y': 'Ⓨ︎', 922 | 'Z': 'Ⓩ︎', 923 | '0': '⓪', 924 | '1': '①', 925 | '2': '②', 926 | '3': '③', 927 | '4': '④', 928 | '5': '⑤', 929 | '6': '⑥', 930 | '7': '⑦', 931 | '8': '⑧', 932 | '9': '⑨' 933 | } 934 | for i, j in style.items(): 935 | text = text.replace(i, j) 936 | return text 937 | 938 | def dark_circle(text): 939 | style = { 940 | 'a': '🅐︎', 941 | 'b': '🅑︎', 942 | 'c': '🅒︎', 943 | 'd': '🅓︎', 944 | 'e': '🅔︎', 945 | 'f': '🅕︎', 946 | 'g': '🅖︎', 947 | 'h': '🅗︎', 948 | 'i': '🅘︎', 949 | 'j': '🅙︎', 950 | 'k': '🅚︎', 951 | 'l': '🅛︎', 952 | 'm': '🅜︎', 953 | 'n': '🅝︎', 954 | 'o': '🅞︎', 955 | 'p': '🅟︎', 956 | 'q': '🅠︎', 957 | 'r': '🅡︎', 958 | 's': '🅢︎', 959 | 't': '🅣︎', 960 | 'u': '🅤︎', 961 | 'v': '🅥︎', 962 | 'w': '🅦︎', 963 | 'x': '🅧︎', 964 | 'y': '🅨︎', 965 | 'z': '🅩︎', 966 | 'A': '🅐︎', 967 | 'B': '🅑︎', 968 | 'C': '🅒︎', 969 | 'D': '🅓︎', 970 | 'E': '🅔︎', 971 | 'F': '🅕︎', 972 | 'G': '🅖︎', 973 | 'H': '🅗︎', 974 | 'I': '🅘︎', 975 | 'J': '🅙︎', 976 | 'K': '🅚︎', 977 | 'L': '🅛︎', 978 | 'M': '🅜︎', 979 | 'N': '🅝︎', 980 | 'O': '🅞︎', 981 | 'P': '🅟︎', 982 | 'Q': '🅠︎', 983 | 'R': '🅡︎', 984 | 'S': '🅢︎', 985 | 'T': '🅣︎', 986 | 'U': '🅤︎', 987 | 'V': '🅥︎', 988 | 'W': '🅦︎', 989 | 'X': '🅧︎', 990 | 'Y': '🅨︎', 991 | 'Z': '🅩', 992 | '0': '⓿', 993 | '1': '➊', 994 | '2': '➋', 995 | '3': '➌', 996 | '4': '➍', 997 | '5': '➎', 998 | '6': '➏', 999 | '7': '➐', 1000 | '8': '➑', 1001 | '9': '➒' 1002 | } 1003 | for i, j in style.items(): 1004 | text = text.replace(i, j) 1005 | return text 1006 | 1007 | def gothic(text): 1008 | style = { 1009 | 'a': '𝔞', 1010 | 'b': '𝔟', 1011 | 'c': '𝔠', 1012 | 'd': '𝔡', 1013 | 'e': '𝔢', 1014 | 'f': '𝔣', 1015 | 'g': '𝔤', 1016 | 'h': '𝔥', 1017 | 'i': '𝔦', 1018 | 'j': '𝔧', 1019 | 'k': '𝔨', 1020 | 'l': '𝔩', 1021 | 'm': '𝔪', 1022 | 'n': '𝔫', 1023 | 'o': '𝔬', 1024 | 'p': '𝔭', 1025 | 'q': '𝔮', 1026 | 'r': '𝔯', 1027 | 's': '𝔰', 1028 | 't': '𝔱', 1029 | 'u': '𝔲', 1030 | 'v': '𝔳', 1031 | 'w': '𝔴', 1032 | 'x': '𝔵', 1033 | 'y': '𝔶', 1034 | 'z': '𝔷', 1035 | 'A': '𝔄', 1036 | 'B': '𝔅', 1037 | 'C': 'ℭ', 1038 | 'D': '𝔇', 1039 | 'E': '𝔈', 1040 | 'F': '𝔉', 1041 | 'G': '𝔊', 1042 | 'H': 'ℌ', 1043 | 'I': 'ℑ', 1044 | 'J': '𝔍', 1045 | 'K': '𝔎', 1046 | 'L': '𝔏', 1047 | 'M': '𝔐', 1048 | 'N': '𝔑', 1049 | 'O': '𝔒', 1050 | 'P': '𝔓', 1051 | 'Q': '𝔔', 1052 | 'R': 'ℜ', 1053 | 'S': '𝔖', 1054 | 'T': '𝔗', 1055 | 'U': '𝔘', 1056 | 'V': '𝔙', 1057 | 'W': '𝔚', 1058 | 'X': '𝔛', 1059 | 'Y': '𝔜', 1060 | 'Z': 'ℨ' 1061 | } 1062 | for i, j in style.items(): 1063 | text = text.replace(i, j) 1064 | return text 1065 | 1066 | 1067 | def bold_gothic(text): 1068 | style = { 1069 | 'a': '𝖆', 1070 | 'b': '𝖇', 1071 | 'c': '𝖈', 1072 | 'd': '𝖉', 1073 | 'e': '𝖊', 1074 | 'f': '𝖋', 1075 | 'g': '𝖌', 1076 | 'h': '𝖍', 1077 | 'i': '𝖎', 1078 | 'j': '𝖏', 1079 | 'k': '𝖐', 1080 | 'l': '𝖑', 1081 | 'm': '𝖒', 1082 | 'n': '𝖓', 1083 | 'o': '𝖔', 1084 | 'p': '𝖕', 1085 | 'q': '𝖖', 1086 | 'r': '𝖗', 1087 | 's': '𝖘', 1088 | 't': '𝖙', 1089 | 'u': '𝖚', 1090 | 'v': '𝖛', 1091 | 'w': '𝖜', 1092 | 'x': '𝖝', 1093 | 'y': '𝖞', 1094 | 'z': '𝖟', 1095 | 'A': '𝕬', 1096 | 'B': '𝕭', 1097 | 'C': '𝕮', 1098 | 'D': '𝕺', 1099 | 'E': '𝕰', 1100 | 'F': '𝕱', 1101 | 'G': '𝕲', 1102 | 'H': '𝕳', 1103 | 'I': '𝕴', 1104 | 'J': '𝕵', 1105 | 'K': '𝕶', 1106 | 'L': '𝕷', 1107 | 'M': '𝕸', 1108 | 'N': '𝕹', 1109 | 'O': '𝕺', 1110 | 'P': '𝕻', 1111 | 'Q': '𝕼', 1112 | 'R': '𝕽', 1113 | 'S': '𝕾', 1114 | 'T': '𝕿', 1115 | 'U': '𝖀', 1116 | 'V': '𝖁', 1117 | 'W': '𝖂', 1118 | 'X': '𝖃', 1119 | 'Y': '𝖄', 1120 | 'Z': '𝖅' 1121 | } 1122 | for i, j in style.items(): 1123 | text = text.replace(i, j) 1124 | return text 1125 | 1126 | def cloud(text): 1127 | style = { 1128 | 'a': 'a͜͡', 1129 | 'b': 'b͜͡', 1130 | 'c': 'c͜͡', 1131 | 'd': 'd͜͡', 1132 | 'e': 'e͜͡', 1133 | 'f': 'f͜͡', 1134 | 'g': 'g͜͡', 1135 | 'h': 'h͜͡', 1136 | 'i': 'i͜͡', 1137 | 'j': 'j͜͡', 1138 | 'k': 'k͜͡', 1139 | 'l': 'l͜͡', 1140 | 'm': 'm͜͡', 1141 | 'n': 'n͜͡', 1142 | 'o': 'o͜͡', 1143 | 'p': 'p͜͡', 1144 | 'q': 'q͜͡', 1145 | 'r': 'r͜͡', 1146 | 's': 's͜͡', 1147 | 't': 't͜͡', 1148 | 'u': 'u͜͡', 1149 | 'v': 'v͜͡', 1150 | 'w': 'w͜͡', 1151 | 'x': 'x͜͡', 1152 | 'y': 'y͜͡', 1153 | 'z': 'z͜͡', 1154 | 'A': 'A͜͡', 1155 | 'B': 'B͜͡', 1156 | 'C': 'C͜͡', 1157 | 'D': 'D͜͡', 1158 | 'E': 'E͜͡', 1159 | 'F': 'F͜͡', 1160 | 'G': 'G͜͡', 1161 | 'H': 'H͜͡', 1162 | 'I': 'I͜͡', 1163 | 'J': 'J͜͡', 1164 | 'K': 'K͜͡', 1165 | 'L': 'L͜͡', 1166 | 'M': 'M͜͡', 1167 | 'N': 'N͜͡', 1168 | 'O': 'O͜͡', 1169 | 'P': 'P͜͡', 1170 | 'Q': 'Q͜͡', 1171 | 'R': 'R͜͡', 1172 | 'S': 'S͜͡', 1173 | 'T': 'T͜͡', 1174 | 'U': 'U͜͡', 1175 | 'V': 'V͜͡', 1176 | 'W': 'W͜͡', 1177 | 'X': 'X͜͡', 1178 | 'Y': 'Y͜͡', 1179 | 'Z': 'Z͜͡' 1180 | } 1181 | for i, j in style.items(): 1182 | text = text.replace(i, j) 1183 | return text 1184 | 1185 | def happy(text): 1186 | style = { 1187 | 'a': 'ă̈', 1188 | 'b': 'b̆̈', 1189 | 'c': 'c̆̈', 1190 | 'd': 'd̆̈', 1191 | 'e': 'ĕ̈', 1192 | 'f': 'f̆̈', 1193 | 'g': 'ğ̈', 1194 | 'h': 'h̆̈', 1195 | 'i': 'ĭ̈', 1196 | 'j': 'j̆̈', 1197 | 'k': 'k̆̈', 1198 | 'l': 'l̆̈', 1199 | 'm': 'm̆̈', 1200 | 'n': 'n̆̈', 1201 | 'o': 'ŏ̈', 1202 | 'p': 'p̆̈', 1203 | 'q': 'q̆̈', 1204 | 'r': 'r̆̈', 1205 | 's': 's̆̈', 1206 | 't': 't̆̈', 1207 | 'u': 'ŭ̈', 1208 | 'v': 'v̆̈', 1209 | 'w': 'w̆̈', 1210 | 'x': 'x̆̈', 1211 | 'y': 'y̆̈', 1212 | 'z': 'z̆̈', 1213 | 'A': 'Ă̈', 1214 | 'B': 'B̆̈', 1215 | 'C': 'C̆̈', 1216 | 'D': 'D̆̈', 1217 | 'E': 'Ĕ̈', 1218 | 'F': 'F̆̈', 1219 | 'G': 'Ğ̈', 1220 | 'H': 'H̆̈', 1221 | 'I': 'Ĭ̈', 1222 | 'J': 'J̆̈', 1223 | 'K': 'K̆̈', 1224 | 'L': 'L̆̈', 1225 | 'M': 'M̆̈', 1226 | 'N': 'N̆̈', 1227 | 'O': 'Ŏ̈', 1228 | 'P': 'P̆̈', 1229 | 'Q': 'Q̆̈', 1230 | 'R': 'R̆̈', 1231 | 'S': 'S̆̈', 1232 | 'T': 'T̆̈', 1233 | 'U': 'Ŭ̈', 1234 | 'V': 'V̆̈', 1235 | 'W': 'W̆̈', 1236 | 'X': 'X̆̈', 1237 | 'Y': 'Y̆̈', 1238 | 'Z': 'Z̆̈' 1239 | } 1240 | for i, j in style.items(): 1241 | text = text.replace(i, j) 1242 | return text 1243 | 1244 | def sad(text): 1245 | style = { 1246 | 'a': 'ȃ̈', 1247 | 'b': 'b̑̈', 1248 | 'c': 'c̑̈', 1249 | 'd': 'd̑̈', 1250 | 'e': 'ȇ̈', 1251 | 'f': 'f̑̈', 1252 | 'g': 'g̑̈', 1253 | 'h': 'h̑̈', 1254 | 'i': 'ȋ̈', 1255 | 'j': 'j̑̈', 1256 | 'k': 'k̑̈', 1257 | 'l': 'l̑̈', 1258 | 'm': 'm̑̈', 1259 | 'n': 'n̑̈', 1260 | 'o': 'ȏ̈', 1261 | 'p': 'p̑̈', 1262 | 'q': 'q̑̈', 1263 | 'r': 'ȓ̈', 1264 | 's': 's̑̈', 1265 | 't': 't̑̈', 1266 | 'u': 'ȗ̈', 1267 | 'v': 'v̑̈', 1268 | 'w': 'w̑̈', 1269 | 'x': 'x̑̈', 1270 | 'y': 'y̑̈', 1271 | 'z': 'z̑̈', 1272 | 'A': 'Ȃ̈', 1273 | 'B': 'B̑̈', 1274 | 'C': 'C̑̈', 1275 | 'D': 'D̑̈', 1276 | 'E': 'Ȇ̈', 1277 | 'F': 'F̑̈', 1278 | 'G': 'G̑̈', 1279 | 'H': 'H̑̈', 1280 | 'I': 'Ȋ̈', 1281 | 'J': 'J̑̈', 1282 | 'K': 'K̑̈', 1283 | 'L': 'L̑̈', 1284 | 'M': 'M̑̈', 1285 | 'N': 'N̑̈', 1286 | 'O': 'Ȏ̈', 1287 | 'P': 'P̑̈', 1288 | 'Q': 'Q̑̈', 1289 | 'R': 'Ȓ̈', 1290 | 'S': 'S̑̈', 1291 | 'T': 'T̑̈', 1292 | 'U': 'Ȗ̈', 1293 | 'V': 'V̑̈', 1294 | 'W': 'W̑̈', 1295 | 'X': 'X̑̈', 1296 | 'Y': 'Y̑̈', 1297 | 'Z': 'Z̑̈' 1298 | } 1299 | for i, j in style.items(): 1300 | text = text.replace(i, j) 1301 | return text 1302 | 1303 | def special(text): 1304 | style = { 1305 | 'a': '🇦 ', 1306 | 'b': '🇧 ', 1307 | 'c': '🇨 ', 1308 | 'd': '🇩 ', 1309 | 'e': '🇪 ', 1310 | 'f': '🇫 ', 1311 | 'g': '🇬 ', 1312 | 'h': '🇭 ', 1313 | 'i': '🇮 ', 1314 | 'j': '🇯 ', 1315 | 'k': '🇰 ', 1316 | 'l': '🇱 ', 1317 | 'm': '🇲 ', 1318 | 'n': '🇳 ', 1319 | 'o': '🇴 ', 1320 | 'p': '🇵 ', 1321 | 'q': '🇶 ', 1322 | 'r': '🇷 ', 1323 | 's': '🇸 ', 1324 | 't': '🇹 ', 1325 | 'u': '🇺 ', 1326 | 'v': '🇻 ', 1327 | 'w': '🇼 ', 1328 | 'x': '🇽 ', 1329 | 'y': '🇾 ', 1330 | 'z': '🇿 ', 1331 | 'A': '🇦 ', 1332 | 'B': '🇧 ', 1333 | 'C': '🇨 ', 1334 | 'D': '🇩 ', 1335 | 'E': '🇪 ', 1336 | 'F': '🇫 ', 1337 | 'G': '🇬 ', 1338 | 'H': '🇭 ', 1339 | 'I': '🇮 ', 1340 | 'J': '🇯 ', 1341 | 'K': '🇰 ', 1342 | 'L': '🇱 ', 1343 | 'M': '🇲 ', 1344 | 'N': '🇳 ', 1345 | 'O': '🇴 ', 1346 | 'P': '🇵 ', 1347 | 'Q': '🇶 ', 1348 | 'R': '🇷 ', 1349 | 'S': '🇸 ', 1350 | 'T': '🇹 ', 1351 | 'U': '🇺 ', 1352 | 'V': '🇻 ', 1353 | 'W': '🇼 ', 1354 | 'X': '🇽 ', 1355 | 'Y': '🇾 ', 1356 | 'Z': '🇿 ' 1357 | } 1358 | for i, j in style.items(): 1359 | text = text.replace(i, j) 1360 | return text 1361 | 1362 | def square(text): 1363 | style = { 1364 | 'a': '🄰', 1365 | 'b': '🄱', 1366 | 'c': '🄲', 1367 | 'd': '🄳', 1368 | 'e': '🄴', 1369 | 'f': '🄵', 1370 | 'g': '🄶', 1371 | 'h': '🄷', 1372 | 'i': '🄸', 1373 | 'j': '🄹', 1374 | 'k': '🄺', 1375 | 'l': '🄻', 1376 | 'm': '🄼', 1377 | 'n': '🄽', 1378 | 'o': '🄾', 1379 | 'p': '🄿', 1380 | 'q': '🅀', 1381 | 'r': '🅁', 1382 | 's': '🅂', 1383 | 't': '🅃', 1384 | 'u': '🅄', 1385 | 'v': '🅅', 1386 | 'w': '🅆', 1387 | 'x': '🅇', 1388 | 'y': '🅈', 1389 | 'z': '🅉', 1390 | 'A': '🄰', 1391 | 'B': '🄱', 1392 | 'C': '🄲', 1393 | 'D': '🄳', 1394 | 'E': '🄴', 1395 | 'F': '🄵', 1396 | 'G': '🄶', 1397 | 'H': '🄷', 1398 | 'I': '🄸', 1399 | 'J': '🄹', 1400 | 'K': '🄺', 1401 | 'L': '🄻', 1402 | 'M': '🄼', 1403 | 'N': '🄽', 1404 | 'O': '🄾', 1405 | 'P': '🄿', 1406 | 'Q': '🅀', 1407 | 'R': '🅁', 1408 | 'S': '🅂', 1409 | 'T': '🅃', 1410 | 'U': '🅄', 1411 | 'V': '🅅', 1412 | 'W': '🅆', 1413 | 'X': '🅇', 1414 | 'Y': '🅈', 1415 | 'Z': '🅉' 1416 | } 1417 | for i, j in style.items(): 1418 | text = text.replace(i, j) 1419 | return text 1420 | 1421 | def dark_square(text): 1422 | style = { 1423 | 'a': '🅰︎', 1424 | 'b': '🅱︎', 1425 | 'c': '🅲︎', 1426 | 'd': '🅳︎', 1427 | 'e': '🅴︎', 1428 | 'f': '🅵︎', 1429 | 'g': '🅶︎', 1430 | 'h': '🅷︎', 1431 | 'i': '🅸︎', 1432 | 'j': '🅹︎', 1433 | 'k': '🅺︎', 1434 | 'l': '🅻︎', 1435 | 'm': '🅼︎', 1436 | 'n': '🅽︎', 1437 | 'o': '🅾︎', 1438 | 'p': '🅿︎', 1439 | 'q': '🆀︎', 1440 | 'r': '🆁︎', 1441 | 's': '🆂︎', 1442 | 't': '🆃︎', 1443 | 'u': '🆄︎', 1444 | 'v': '🆅︎', 1445 | 'w': '🆆︎', 1446 | 'x': '🆇︎', 1447 | 'y': '🆈︎', 1448 | 'z': '🆉︎', 1449 | 'A': '🅰︎', 1450 | 'B': '🅱︎', 1451 | 'C': '🅲︎', 1452 | 'D': '🅳︎', 1453 | 'E': '🅴︎', 1454 | 'F': '🅵︎', 1455 | 'G': '🅶︎', 1456 | 'H': '🅷︎', 1457 | 'I': '🅸︎', 1458 | 'J': '🅹︎', 1459 | 'K': '🅺︎', 1460 | 'L': '🅻︎', 1461 | 'M': '🅼︎', 1462 | 'N': '🅽︎', 1463 | 'O': '🅾︎', 1464 | 'P': '🅿︎', 1465 | 'Q': '🆀︎', 1466 | 'R': '🆁︎', 1467 | 'S': '🆂︎', 1468 | 'T': '🆃︎', 1469 | 'U': '🆄︎', 1470 | 'V': '🆅︎', 1471 | 'W': '🆆︎', 1472 | 'X': '🆇︎', 1473 | 'Y': '🆈︎', 1474 | 'Z': '🆉︎' 1475 | } 1476 | for i, j in style.items(): 1477 | text = text.replace(i, j) 1478 | return text 1479 | 1480 | def andalucia(text): 1481 | style = { 1482 | 'a': 'ꪖ', 1483 | 'b': '᥇', 1484 | 'c': 'ᥴ', 1485 | 'd': 'ᦔ', 1486 | 'e': 'ꫀ', 1487 | 'f': 'ᠻ', 1488 | 'g': 'ᧁ', 1489 | 'h': 'ꫝ', 1490 | 'i': '𝓲', 1491 | 'j': '𝓳', 1492 | 'k': '𝘬', 1493 | 'l': 'ꪶ', 1494 | 'm': 'ꪑ', 1495 | 'n': 'ꪀ', 1496 | 'o': 'ꪮ', 1497 | 'p': 'ρ', 1498 | 'q': '𝘲', 1499 | 'r': '𝘳', 1500 | 's': '𝘴', 1501 | 't': '𝓽', 1502 | 'u': 'ꪊ', 1503 | 'v': 'ꪜ', 1504 | 'w': '᭙', 1505 | 'x': '᥊', 1506 | 'y': 'ꪗ', 1507 | 'z': 'ɀ', 1508 | 'A': 'ꪖ', 1509 | 'B': '᥇', 1510 | 'C': 'ᥴ', 1511 | 'D': 'ᦔ', 1512 | 'E': 'ꫀ', 1513 | 'F': 'ᠻ', 1514 | 'G': 'ᧁ', 1515 | 'H': 'ꫝ', 1516 | 'I': '𝓲', 1517 | 'J': '𝓳', 1518 | 'K': '𝘬', 1519 | 'L': 'ꪶ', 1520 | 'M': 'ꪑ', 1521 | 'N': 'ꪀ', 1522 | 'O': 'ꪮ', 1523 | 'P': 'ρ', 1524 | 'Q': '𝘲', 1525 | 'R': '𝘳', 1526 | 'S': '𝘴', 1527 | 'T': '𝓽', 1528 | 'U': 'ꪊ', 1529 | 'V': 'ꪜ', 1530 | 'W': '᭙', 1531 | 'X': '᥊', 1532 | 'Y': 'ꪗ', 1533 | 'Z': 'ɀ' 1534 | } 1535 | for i, j in style.items(): 1536 | text = text.replace(i, j) 1537 | return text 1538 | 1539 | def manga(text): 1540 | style = { 1541 | 'a': '卂', 1542 | 'b': '乃', 1543 | 'c': '匚', 1544 | 'd': 'ᗪ', 1545 | 'e': '乇', 1546 | 'f': '千', 1547 | 'g': 'ᘜ', 1548 | 'h': '卄', 1549 | 'i': '|', 1550 | 'j': 'フ', 1551 | 'k': 'Ҝ', 1552 | 'l': 'ㄥ', 1553 | 'm': '爪', 1554 | 'n': '几', 1555 | 'o': 'ㄖ', 1556 | 'p': '卩', 1557 | 'q': 'Ҩ', 1558 | 'r': '尺', 1559 | 's': '丂', 1560 | 't': 'ㄒ', 1561 | 'u': 'ㄩ', 1562 | 'v': 'ᐯ', 1563 | 'w': '山', 1564 | 'x': '乂', 1565 | 'y': 'ㄚ', 1566 | 'z': '乙', 1567 | 'A': '卂', 1568 | 'B': '乃', 1569 | 'C': '匚', 1570 | 'D': 'ᗪ', 1571 | 'E': '乇', 1572 | 'F': '千', 1573 | 'G': 'ᘜ', 1574 | 'H': '卄', 1575 | 'I': '|', 1576 | 'J': 'フ', 1577 | 'K': 'Ҝ', 1578 | 'L': 'ㄥ', 1579 | 'M': '爪', 1580 | 'N': '几', 1581 | 'O': 'ㄖ', 1582 | 'P': '卩', 1583 | 'Q': 'Ҩ', 1584 | 'R': '尺', 1585 | 'S': '丂', 1586 | 'T': 'ㄒ', 1587 | 'U': 'ㄩ', 1588 | 'V': 'ᐯ', 1589 | 'W': '山', 1590 | 'X': '乂', 1591 | 'Y': 'ㄚ', 1592 | 'Z': '乙' 1593 | } 1594 | for i, j in style.items(): 1595 | text = text.replace(i, j) 1596 | return text 1597 | 1598 | def stinky(text): 1599 | style = { 1600 | 'a': 'a̾', 1601 | 'b': 'b̾', 1602 | 'c': 'c̾', 1603 | 'd': 'd̾', 1604 | 'e': 'e̾', 1605 | 'f': 'f̾', 1606 | 'g': 'g̾', 1607 | 'h': 'h̾', 1608 | 'i': 'i̾', 1609 | 'j': 'j̾', 1610 | 'k': 'k̾', 1611 | 'l': 'l̾', 1612 | 'm': 'm̾', 1613 | 'n': 'n̾', 1614 | 'o': 'o̾', 1615 | 'p': 'p̾', 1616 | 'q': 'q̾', 1617 | 'r': 'r̾', 1618 | 's': 's̾', 1619 | 't': 't̾', 1620 | 'u': 'u̾', 1621 | 'v': 'v̾', 1622 | 'w': 'w̾', 1623 | 'x': 'x̾', 1624 | 'y': 'y̾', 1625 | 'z': 'z̾', 1626 | 'A': 'A̾', 1627 | 'B': 'B̾', 1628 | 'C': 'C̾', 1629 | 'D': 'D̾', 1630 | 'E': 'E̾', 1631 | 'F': 'F̾', 1632 | 'G': 'G̾', 1633 | 'H': 'H̾', 1634 | 'I': 'I̾', 1635 | 'J': 'J̾', 1636 | 'K': 'K̾', 1637 | 'L': 'L̾', 1638 | 'M': 'M̾', 1639 | 'N': 'N̾', 1640 | 'O': 'O̾', 1641 | 'P': 'P̾', 1642 | 'Q': 'Q̾', 1643 | 'R': 'R̾', 1644 | 'S': 'S̾', 1645 | 'T': 'T̾', 1646 | 'U': 'U̾', 1647 | 'V': 'V̾', 1648 | 'W': 'W̾', 1649 | 'X': 'X̾', 1650 | 'Y': 'Y̾', 1651 | 'Z': 'Z̾' 1652 | } 1653 | for i, j in style.items(): 1654 | text = text.replace(i, j) 1655 | return text 1656 | 1657 | def bubbles(text): 1658 | style = { 1659 | 'a': 'ḁͦ', 1660 | 'b': 'b̥ͦ', 1661 | 'c': 'c̥ͦ', 1662 | 'd': 'd̥ͦ', 1663 | 'e': 'e̥ͦ', 1664 | 'f': 'f̥ͦ', 1665 | 'g': 'g̥ͦ', 1666 | 'h': 'h̥ͦ', 1667 | 'i': 'i̥ͦ', 1668 | 'j': 'j̥ͦ', 1669 | 'k': 'k̥ͦ', 1670 | 'l': 'l̥ͦ', 1671 | 'm': 'm̥ͦ', 1672 | 'n': 'n̥ͦ', 1673 | 'o': 'o̥ͦ', 1674 | 'p': 'p̥ͦ', 1675 | 'q': 'q̥ͦ', 1676 | 'r': 'r̥ͦ', 1677 | 's': 's̥ͦ', 1678 | 't': 't̥ͦ', 1679 | 'u': 'u̥ͦ', 1680 | 'v': 'v̥ͦ', 1681 | 'w': 'w̥ͦ', 1682 | 'x': 'x̥ͦ', 1683 | 'y': 'y̥ͦ', 1684 | 'z': 'z̥ͦ', 1685 | 'A': 'Ḁͦ', 1686 | 'B': 'B̥ͦ', 1687 | 'C': 'C̥ͦ', 1688 | 'D': 'D̥ͦ', 1689 | 'E': 'E̥ͦ', 1690 | 'F': 'F̥ͦ', 1691 | 'G': 'G̥ͦ', 1692 | 'H': 'H̥ͦ', 1693 | 'I': 'I̥ͦ', 1694 | 'J': 'J̥ͦ', 1695 | 'K': 'K̥ͦ', 1696 | 'L': 'L̥ͦ', 1697 | 'M': 'M̥ͦ', 1698 | 'N': 'N̥ͦ', 1699 | 'O': 'O̥ͦ', 1700 | 'P': 'P̥ͦ', 1701 | 'Q': 'Q̥ͦ', 1702 | 'R': 'R̥ͦ', 1703 | 'S': 'S̥ͦ', 1704 | 'T': 'T̥ͦ', 1705 | 'U': 'U̥ͦ', 1706 | 'V': 'V̥ͦ', 1707 | 'W': 'W̥ͦ', 1708 | 'X': 'X̥ͦ', 1709 | 'Y': 'Y̥ͦ', 1710 | 'Z': 'Z̥ͦ' 1711 | } 1712 | for i, j in style.items(): 1713 | text = text.replace(i, j) 1714 | return text 1715 | 1716 | def underline(text): 1717 | style = { 1718 | 'a': 'a͟', 1719 | 'b': 'b͟', 1720 | 'c': 'c͟', 1721 | 'd': 'd͟', 1722 | 'e': 'e͟', 1723 | 'f': 'f͟', 1724 | 'g': 'g͟', 1725 | 'h': 'h͟', 1726 | 'i': 'i͟', 1727 | 'j': 'j͟', 1728 | 'k': 'k͟', 1729 | 'l': 'l͟', 1730 | 'm': 'm͟', 1731 | 'n': 'n͟', 1732 | 'o': 'o͟', 1733 | 'p': 'p͟', 1734 | 'q': 'q͟', 1735 | 'r': 'r͟', 1736 | 's': 's͟', 1737 | 't': 't͟', 1738 | 'u': 'u͟', 1739 | 'v': 'v͟', 1740 | 'w': 'w͟', 1741 | 'x': 'x͟', 1742 | 'y': 'y͟', 1743 | 'z': 'z͟', 1744 | 'A': 'A͟', 1745 | 'B': 'B͟', 1746 | 'C': 'C͟', 1747 | 'D': 'D͟', 1748 | 'E': 'E͟', 1749 | 'F': 'F͟', 1750 | 'G': 'G͟', 1751 | 'H': 'H͟', 1752 | 'I': 'I͟', 1753 | 'J': 'J͟', 1754 | 'K': 'K͟', 1755 | 'L': 'L͟', 1756 | 'M': 'M͟', 1757 | 'N': 'N͟', 1758 | 'O': 'O͟', 1759 | 'P': 'P͟', 1760 | 'Q': 'Q͟', 1761 | 'R': 'R͟', 1762 | 'S': 'S͟', 1763 | 'T': 'T͟', 1764 | 'U': 'U͟', 1765 | 'V': 'V͟', 1766 | 'W': 'W͟', 1767 | 'X': 'X͟', 1768 | 'Y': 'Y͟', 1769 | 'Z': 'Z͟' 1770 | } 1771 | for i, j in style.items(): 1772 | text = text.replace(i, j) 1773 | return text 1774 | 1775 | def ladybug(text): 1776 | style = { 1777 | 'a': 'ꍏ', 1778 | 'b': 'ꌃ', 1779 | 'c': 'ꏳ', 1780 | 'd': 'ꀷ', 1781 | 'e': 'ꏂ', 1782 | 'f': 'ꎇ', 1783 | 'g': 'ꁅ', 1784 | 'h': 'ꀍ', 1785 | 'i': 'ꀤ', 1786 | 'j': '꒻', 1787 | 'k': 'ꀘ', 1788 | 'l': '꒒', 1789 | 'm': 'ꎭ', 1790 | 'n': 'ꈤ', 1791 | 'o': 'ꂦ', 1792 | 'p': 'ᖘ', 1793 | 'q': 'ꆰ', 1794 | 'r': 'ꋪ', 1795 | 's': 'ꌚ', 1796 | 't': '꓄', 1797 | 'u': 'ꀎ', 1798 | 'v': '꒦', 1799 | 'w': 'ꅐ', 1800 | 'x': 'ꉧ', 1801 | 'y': 'ꌩ', 1802 | 'z': 'ꁴ', 1803 | 'A': 'ꍏ', 1804 | 'B': 'ꌃ', 1805 | 'C': 'ꏳ', 1806 | 'D': 'ꀷ', 1807 | 'E': 'ꏂ', 1808 | 'F': 'ꎇ', 1809 | 'G': 'ꁅ', 1810 | 'H': 'ꀍ', 1811 | 'I': 'ꀤ', 1812 | 'J': '꒻', 1813 | 'K': 'ꀘ', 1814 | 'L': '꒒', 1815 | 'M': 'ꎭ', 1816 | 'N': 'ꈤ', 1817 | 'O': 'ꂦ', 1818 | 'P': 'ᖘ', 1819 | 'Q': 'ꆰ', 1820 | 'R': 'ꋪ', 1821 | 'S': 'ꌚ', 1822 | 'T': '꓄', 1823 | 'U': 'ꀎ', 1824 | 'V': '꒦', 1825 | 'W': 'ꅐ', 1826 | 'X': 'ꉧ', 1827 | 'Y': 'ꌩ', 1828 | 'Z': 'ꁴ' 1829 | } 1830 | for i, j in style.items(): 1831 | text = text.replace(i, j) 1832 | return text 1833 | 1834 | def rays(text): 1835 | style = { 1836 | 'a': 'a҉', 1837 | 'b': 'b҉', 1838 | 'c': 'c҉', 1839 | 'd': 'd҉', 1840 | 'e': 'e҉', 1841 | 'f': 'f҉', 1842 | 'g': 'g҉', 1843 | 'h': 'h҉', 1844 | 'i': 'i҉', 1845 | 'j': 'j҉', 1846 | 'k': 'k҉', 1847 | 'l': 'l҉', 1848 | 'm': 'm҉', 1849 | 'n': 'n҉', 1850 | 'o': 'o҉', 1851 | 'p': 'p҉', 1852 | 'q': 'q҉', 1853 | 'r': 'r҉', 1854 | 's': 's҉', 1855 | 't': 't҉', 1856 | 'u': 'u҉', 1857 | 'v': 'v҉', 1858 | 'w': 'w҉', 1859 | 'x': 'x҉', 1860 | 'y': 'y҉', 1861 | 'z': 'z҉', 1862 | 'A': 'A҉', 1863 | 'B': 'B҉', 1864 | 'C': 'C҉', 1865 | 'D': 'D҉', 1866 | 'E': 'E҉', 1867 | 'F': 'F҉', 1868 | 'G': 'G҉', 1869 | 'H': 'H҉', 1870 | 'I': 'I҉', 1871 | 'J': 'J҉', 1872 | 'K': 'K҉', 1873 | 'L': 'L҉', 1874 | 'M': 'M҉', 1875 | 'N': 'N҉', 1876 | 'O': 'O҉', 1877 | 'P': 'P҉', 1878 | 'Q': 'Q҉', 1879 | 'R': 'R҉', 1880 | 'S': 'S҉', 1881 | 'T': 'T҉', 1882 | 'U': 'U҉', 1883 | 'V': 'V҉', 1884 | 'W': 'W҉', 1885 | 'X': 'X҉', 1886 | 'Y': 'Y҉', 1887 | 'Z': 'Z҉' 1888 | } 1889 | for i, j in style.items(): 1890 | text = text.replace(i, j) 1891 | return text 1892 | 1893 | def birds(text): 1894 | style = { 1895 | 'a': 'a҈', 1896 | 'b': 'b҈', 1897 | 'c': 'c҈', 1898 | 'd': 'd҈', 1899 | 'e': 'e҈', 1900 | 'f': 'f҈', 1901 | 'g': 'g҈', 1902 | 'h': 'h҈', 1903 | 'i': 'i҈', 1904 | 'j': 'j҈', 1905 | 'k': 'k҈', 1906 | 'l': 'l҈', 1907 | 'm': 'm҈', 1908 | 'n': 'n҈', 1909 | 'o': 'o҈', 1910 | 'p': 'p҈', 1911 | 'q': 'q҈', 1912 | 'r': 'r҈', 1913 | 's': 's҈', 1914 | 't': 't҈', 1915 | 'u': 'u҈', 1916 | 'v': 'v҈', 1917 | 'w': 'w҈', 1918 | 'x': 'x҈', 1919 | 'y': 'y҈', 1920 | 'z': 'z҈', 1921 | 'A': 'A҈', 1922 | 'B': 'B҈', 1923 | 'C': 'C҈', 1924 | 'D': 'D҈', 1925 | 'E': 'E҈', 1926 | 'F': 'F҈', 1927 | 'G': 'G҈', 1928 | 'H': 'H҈', 1929 | 'I': 'I҈', 1930 | 'J': 'J҈', 1931 | 'K': 'K҈', 1932 | 'L': 'L҈', 1933 | 'M': 'M҈', 1934 | 'N': 'N҈', 1935 | 'O': 'O҈', 1936 | 'P': 'P҈', 1937 | 'Q': 'Q҈', 1938 | 'R': 'R҈', 1939 | 'S': 'S҈', 1940 | 'T': 'T҈', 1941 | 'U': 'U҈', 1942 | 'V': 'V҈', 1943 | 'W': 'W҈', 1944 | 'X': 'X҈', 1945 | 'Y': 'Y҈', 1946 | 'Z': 'Z҈' 1947 | } 1948 | for i, j in style.items(): 1949 | text = text.replace(i, j) 1950 | return text 1951 | 1952 | def slash(text): 1953 | style = { 1954 | 'a': 'a̸', 1955 | 'b': 'b̸', 1956 | 'c': 'c̸', 1957 | 'd': 'd̸', 1958 | 'e': 'e̸', 1959 | 'f': 'f̸', 1960 | 'g': 'g̸', 1961 | 'h': 'h̸', 1962 | 'i': 'i̸', 1963 | 'j': 'j̸', 1964 | 'k': 'k̸', 1965 | 'l': 'l̸', 1966 | 'm': 'm̸', 1967 | 'n': 'n̸', 1968 | 'o': 'o̸', 1969 | 'p': 'p̸', 1970 | 'q': 'q̸', 1971 | 'r': 'r̸', 1972 | 's': 's̸', 1973 | 't': 't̸', 1974 | 'u': 'u̸', 1975 | 'v': 'v̸', 1976 | 'w': 'w̸', 1977 | 'x': 'x̸', 1978 | 'y': 'y̸', 1979 | 'z': 'z̸', 1980 | 'A': 'A̸', 1981 | 'B': 'B̸', 1982 | 'C': 'C̸', 1983 | 'D': 'D̸', 1984 | 'E': 'E̸', 1985 | 'F': 'F̸', 1986 | 'G': 'G̸', 1987 | 'H': 'H̸', 1988 | 'I': 'I̸', 1989 | 'J': 'J̸', 1990 | 'K': 'K̸', 1991 | 'L': 'L̸', 1992 | 'M': 'M̸', 1993 | 'N': 'N̸', 1994 | 'O': 'O̸', 1995 | 'P': 'P̸', 1996 | 'Q': 'Q̸', 1997 | 'R': 'R̸', 1998 | 'S': 'S̸', 1999 | 'T': 'T̸', 2000 | 'U': 'U̸', 2001 | 'V': 'V̸', 2002 | 'W': 'W̸', 2003 | 'X': 'X̸', 2004 | 'Y': 'Y̸', 2005 | 'Z': 'Z̸' 2006 | } 2007 | for i, j in style.items(): 2008 | text = text.replace(i, j) 2009 | return text 2010 | 2011 | def stop(text): 2012 | style = { 2013 | 'a': 'a⃠', 2014 | 'b': 'b⃠', 2015 | 'c': 'c⃠', 2016 | 'd': 'd⃠', 2017 | 'e': 'e⃠', 2018 | 'f': 'f⃠', 2019 | 'g': 'g⃠', 2020 | 'h': 'h⃠', 2021 | 'i': 'i⃠', 2022 | 'j': 'j⃠', 2023 | 'k': 'k⃠', 2024 | 'l': 'l⃠', 2025 | 'm': 'm⃠', 2026 | 'n': 'n⃠', 2027 | 'o': 'o⃠', 2028 | 'p': 'p⃠', 2029 | 'q': 'q⃠', 2030 | 'r': 'r⃠', 2031 | 's': 's⃠', 2032 | 't': 't⃠', 2033 | 'u': 'u⃠', 2034 | 'v': 'v⃠', 2035 | 'w': 'w⃠', 2036 | 'x': 'x⃠', 2037 | 'y': 'y⃠', 2038 | 'z': 'z⃠', 2039 | 'A': 'A⃠', 2040 | 'B': 'B⃠', 2041 | 'C': 'C⃠', 2042 | 'D': 'D⃠', 2043 | 'E': 'E⃠', 2044 | 'F': 'F⃠', 2045 | 'G': 'G⃠', 2046 | 'H': 'H⃠', 2047 | 'I': 'I⃠', 2048 | 'J': 'J⃠', 2049 | 'K': 'K⃠', 2050 | 'L': 'L⃠', 2051 | 'M': 'M⃠', 2052 | 'N': 'N⃠', 2053 | 'O': 'O⃠', 2054 | 'P': 'P⃠', 2055 | 'Q': 'Q⃠', 2056 | 'R': 'R⃠', 2057 | 'S': 'S⃠', 2058 | 'T': 'T⃠', 2059 | 'U': 'U⃠', 2060 | 'V': 'V⃠', 2061 | 'W': 'W⃠', 2062 | 'X': 'X⃠', 2063 | 'Y': 'Y⃠', 2064 | 'Z': 'Z⃠' 2065 | } 2066 | for i, j in style.items(): 2067 | text = text.replace(i, j) 2068 | return text 2069 | 2070 | def skyline(text): 2071 | style = { 2072 | 'a': 'a̺͆', 2073 | 'b': 'b̺͆', 2074 | 'c': 'c̺͆', 2075 | 'd': 'd̺͆', 2076 | 'e': 'e̺͆', 2077 | 'f': 'f̺͆', 2078 | 'g': 'g̺͆', 2079 | 'h': 'h̺͆', 2080 | 'i': 'i̺͆', 2081 | 'j': 'j̺͆', 2082 | 'k': 'k̺͆', 2083 | 'l': 'l̺͆', 2084 | 'm': 'm̺͆', 2085 | 'n': 'n̺͆', 2086 | 'o': 'o̺͆', 2087 | 'p': 'p̺͆', 2088 | 'q': 'q̺͆', 2089 | 'r': 'r̺͆', 2090 | 's': 's̺͆', 2091 | 't': 't̺͆', 2092 | 'u': 'u̺͆', 2093 | 'v': 'v̺͆', 2094 | 'w': 'w̺͆', 2095 | 'x': 'x̺͆', 2096 | 'y': 'y̺͆', 2097 | 'z': 'z̺͆', 2098 | 'A': 'A̺͆', 2099 | 'B': 'B̺͆', 2100 | 'C': 'C̺͆', 2101 | 'D': 'D̺͆', 2102 | 'E': 'E̺͆', 2103 | 'F': 'F̺͆', 2104 | 'G': 'G̺͆', 2105 | 'H': 'H̺͆', 2106 | 'I': 'I̺͆', 2107 | 'J': 'J̺͆', 2108 | 'K': 'K̺͆', 2109 | 'L': 'L̺͆', 2110 | 'M': 'M̺͆', 2111 | 'N': 'N̺͆', 2112 | 'O': 'O̺͆', 2113 | 'P': 'P̺͆', 2114 | 'Q': 'Q̺͆', 2115 | 'R': 'R̺͆', 2116 | 'S': 'S̺͆', 2117 | 'T': 'T̺͆', 2118 | 'U': 'U̺͆', 2119 | 'V': 'V̺͆', 2120 | 'W': 'W̺͆', 2121 | 'X': 'X̺͆', 2122 | 'Y': 'Y̺͆', 2123 | 'Z': 'Z̺͆' 2124 | } 2125 | for i, j in style.items(): 2126 | text = text.replace(i, j) 2127 | return text 2128 | 2129 | def arrows(text): 2130 | style = { 2131 | 'a': 'a͎', 2132 | 'b': 'b͎', 2133 | 'c': 'c͎', 2134 | 'd': 'd͎', 2135 | 'e': 'e͎', 2136 | 'f': 'f͎', 2137 | 'g': 'g͎', 2138 | 'h': 'h͎', 2139 | 'i': 'i͎', 2140 | 'j': 'j͎', 2141 | 'k': 'k͎', 2142 | 'l': 'l͎', 2143 | 'm': 'm͎', 2144 | 'n': 'n͎', 2145 | 'o': 'o͎', 2146 | 'p': 'p͎', 2147 | 'q': 'q͎', 2148 | 'r': 'r͎', 2149 | 's': 's͎', 2150 | 't': 't͎', 2151 | 'u': 'u͎', 2152 | 'v': 'v͎', 2153 | 'w': 'w͎', 2154 | 'x': 'x͎', 2155 | 'y': 'y͎', 2156 | 'z': 'z͎', 2157 | 'A': 'A͎', 2158 | 'B': 'B͎', 2159 | 'C': 'C͎', 2160 | 'D': 'D͎', 2161 | 'E': 'E͎', 2162 | 'F': 'F͎', 2163 | 'G': 'G͎', 2164 | 'H': 'H͎', 2165 | 'I': 'I͎', 2166 | 'J': 'J͎', 2167 | 'K': 'K͎', 2168 | 'L': 'L͎', 2169 | 'M': 'M͎', 2170 | 'N': 'N͎', 2171 | 'O': 'O͎', 2172 | 'P': 'P͎', 2173 | 'Q': 'Q͎', 2174 | 'R': 'R͎', 2175 | 'S': 'S͎', 2176 | 'T': 'T͎', 2177 | 'U': 'U͎', 2178 | 'V': 'V͎', 2179 | 'W': 'W͎', 2180 | 'X': 'X͎', 2181 | 'Y': 'Y͎', 2182 | 'Z': 'Z͎' 2183 | } 2184 | for i, j in style.items(): 2185 | text = text.replace(i, j) 2186 | return text 2187 | 2188 | def rvnes(text): 2189 | style = { 2190 | 'a': 'ል', 2191 | 'b': 'ጌ', 2192 | 'c': 'ር', 2193 | 'd': 'ዕ', 2194 | 'e': 'ቿ', 2195 | 'f': 'ቻ', 2196 | 'g': 'ኗ', 2197 | 'h': 'ዘ', 2198 | 'i': 'ጎ', 2199 | 'j': 'ጋ', 2200 | 'k': 'ጕ', 2201 | 'l': 'ረ', 2202 | 'm': 'ጠ', 2203 | 'n': 'ክ', 2204 | 'o': 'ዐ', 2205 | 'p': 'የ', 2206 | 'q': 'ዒ', 2207 | 'r': 'ዪ', 2208 | 's': 'ነ', 2209 | 't': 'ፕ', 2210 | 'u': 'ሁ', 2211 | 'v': 'ሀ', 2212 | 'w': 'ሠ', 2213 | 'x': 'ሸ', 2214 | 'y': 'ሃ', 2215 | 'z': 'ጊ', 2216 | 'A': 'ል', 2217 | 'B': 'ጌ', 2218 | 'C': 'ር', 2219 | 'D': 'ዕ', 2220 | 'E': 'ቿ', 2221 | 'F': 'ቻ', 2222 | 'G': 'ኗ', 2223 | 'H': 'ዘ', 2224 | 'I': 'ጎ', 2225 | 'J': 'ጋ', 2226 | 'K': 'ጕ', 2227 | 'L': 'ረ', 2228 | 'M': 'ጠ', 2229 | 'N': 'ክ', 2230 | 'O': 'ዐ', 2231 | 'P': 'የ', 2232 | 'Q': 'ዒ', 2233 | 'R': 'ዪ', 2234 | 'S': 'ነ', 2235 | 'T': 'ፕ', 2236 | 'U': 'ሁ', 2237 | 'V': 'ሀ', 2238 | 'W': 'ሠ', 2239 | 'X': 'ሸ', 2240 | 'Y': 'ሃ', 2241 | 'Z': 'ጊ' 2242 | } 2243 | for i, j in style.items(): 2244 | text = text.replace(i, j) 2245 | return text 2246 | 2247 | def strike(text): 2248 | style = { 2249 | 'a': 'a̶', 2250 | 'b': 'b̶', 2251 | 'c': 'c̶', 2252 | 'd': 'd̶', 2253 | 'e': 'e̶', 2254 | 'f': 'f̶', 2255 | 'g': 'g̶', 2256 | 'h': 'h̶', 2257 | 'i': 'i̶', 2258 | 'j': 'j̶', 2259 | 'k': 'k̶', 2260 | 'l': 'l̶', 2261 | 'm': 'm̶', 2262 | 'n': 'n̶', 2263 | 'o': 'o̶', 2264 | 'p': 'p̶', 2265 | 'q': 'q̶', 2266 | 'r': 'r̶', 2267 | 's': 's̶', 2268 | 't': 't̶', 2269 | 'u': 'u̶', 2270 | 'v': 'v̶', 2271 | 'w': 'w̶', 2272 | 'x': 'x̶', 2273 | 'y': 'y̶', 2274 | 'z': 'z̶', 2275 | 'A': 'A̶', 2276 | 'B': 'B̶', 2277 | 'C': 'C̶', 2278 | 'D': 'D̶', 2279 | 'E': 'E̶', 2280 | 'F': 'F̶', 2281 | 'G': 'G̶', 2282 | 'H': 'H̶', 2283 | 'I': 'I̶', 2284 | 'J': 'J̶', 2285 | 'K': 'K̶', 2286 | 'L': 'L̶', 2287 | 'M': 'M̶', 2288 | 'N': 'N̶', 2289 | 'O': 'O̶', 2290 | 'P': 'P̶', 2291 | 'Q': 'Q̶', 2292 | 'R': 'R̶', 2293 | 'S': 'S̶', 2294 | 'T': 'T̶', 2295 | 'U': 'U̶', 2296 | 'V': 'V̶', 2297 | 'W': 'W̶', 2298 | 'X': 'X̶', 2299 | 'Y': 'Y̶', 2300 | 'Z': 'Z̶' 2301 | } 2302 | for i, j in style.items(): 2303 | text = text.replace(i, j) 2304 | return text 2305 | 2306 | def frozen(text): 2307 | style = { 2308 | 'a': 'a༙', 2309 | 'b': 'b༙', 2310 | 'c': 'c༙', 2311 | 'd': 'd༙', 2312 | 'e': 'e༙', 2313 | 'f': 'f༙', 2314 | 'g': 'g༙', 2315 | 'h': 'h༙', 2316 | 'i': 'i༙', 2317 | 'j': 'j༙', 2318 | 'k': 'k༙', 2319 | 'l': 'l༙', 2320 | 'm': 'm༙', 2321 | 'n': 'n༙', 2322 | 'o': 'o༙', 2323 | 'p': 'p༙', 2324 | 'q': 'q༙', 2325 | 'r': 'r༙', 2326 | 's': 's༙', 2327 | 't': 't༙', 2328 | 'u': 'u༙', 2329 | 'v': 'v༙', 2330 | 'w': 'w༙', 2331 | 'x': 'x༙', 2332 | 'y': 'y༙', 2333 | 'z': 'z༙', 2334 | 'A': 'A༙', 2335 | 'B': 'B༙', 2336 | 'C': 'C༙', 2337 | 'D': 'D༙', 2338 | 'E': 'E༙', 2339 | 'F': 'F༙', 2340 | 'G': 'G༙', 2341 | 'H': 'H༙', 2342 | 'I': 'I༙', 2343 | 'J': 'J༙', 2344 | 'K': 'K༙', 2345 | 'L': 'L༙', 2346 | 'M': 'M༙', 2347 | 'N': 'N༙', 2348 | 'O': 'O༙', 2349 | 'P': 'P༙', 2350 | 'Q': 'Q༙', 2351 | 'R': 'R༙', 2352 | 'S': 'S༙', 2353 | 'T': 'T༙', 2354 | 'U': 'U༙', 2355 | 'V': 'V༙', 2356 | 'W': 'W༙', 2357 | 'X': 'X༙', 2358 | 'Y': 'Y༙', 2359 | 'Z': 'Z༙' 2360 | } 2361 | for i, j in style.items(): 2362 | text = text.replace(i, j) 2363 | return text 2364 | -------------------------------------------------------------------------------- /tools/plugins/__init__.py: -------------------------------------------------------------------------------- 1 | ####----Copyright (C) 2021 @kalanakt @The-Mayans----#### 2 | 3 | import glob 4 | from os.path import basename, dirname, isfile 5 | 6 | 7 | def __list_all_modules(): 8 | mod_paths = glob.glob(dirname(__file__) + "/*.py") 9 | 10 | all_modules = [ 11 | basename(f)[:-3] 12 | for f in mod_paths 13 | if isfile(f) and f.endswith(".py") and not f.endswith("__init__.py") 14 | ] 15 | 16 | return all_modules 17 | 18 | 19 | ALL_MODULES = sorted(__list_all_modules()) 20 | __all__ = ALL_MODULES + ["ALL_MODULES"] 21 | -------------------------------------------------------------------------------- /tools/plugins/logo.py: -------------------------------------------------------------------------------- 1 | # !0/09 2 | --------------------------------------------------------------------------------