From df824a38d9f4c4f81302a838d6e8e8463934048e Mon Sep 17 00:00:00 2001 From: sose Date: Mon, 5 Apr 2021 03:00:24 +0000 Subject: [PATCH] first commit --- .gitignore | 3 + ...roject-so-it-has-to-have-a-shitty-logo.png | Bin 0 -> 51243 bytes license | 674 ++++++++++++++++++ readme.md | 35 + sk0r.js | 97 +++ 5 files changed, 809 insertions(+) create mode 100644 .gitignore create mode 100644 its-a-js-project-so-it-has-to-have-a-shitty-logo.png create mode 100644 license create mode 100644 readme.md create mode 100644 sk0r.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cbe70c5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +package-lock.json +skor diff --git a/its-a-js-project-so-it-has-to-have-a-shitty-logo.png b/its-a-js-project-so-it-has-to-have-a-shitty-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..cda51c5e80d7822dc940fa5a7596c13093ab06da GIT binary patch literal 51243 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 Tz5mco1|aZs^>bP0l+XkKg|8lV literal 0 HcmV?d00001 diff --git a/license b/license new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/license @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..8f35048 --- /dev/null +++ b/readme.md @@ -0,0 +1,35 @@ +# sk0r +![sk0r logo](its-a-js-project-so-it-has-to-have-a-shitty-logo.png) + +a script to get live scores from hltv.org + +## requirements +- nightmare +- electron + - if npm is giving you perm errors try `sudo npm install -g electron --unsafe-perm=true` +- libgtk-2-0 +- libgconf-2-4 +- xvfb (if you're running it headless) + +## running +- `node sk0r.js` +- or `xvfb-run node sk0r.js` for headless +- it will output the scores as json to stdout + +## notes +- its electron, don't run it on your 340e +- its very slow +- it's named after [this kid](https://www.hltv.org/player/18638/sk0r) (hes good) + +## additional notes +- i hate javascript +- i dont know how to write javascript +- i dont know how to use nightmare + +## more notes +- hltv doesn't like you scraping them, they'll probably break this and/or send + me a c&d soon +- in keeping with the theme of naming projects after counter-strike players, my + next project will be a mobile phone operating system named "ANDROID" + +(c) oneseveneight/sose diff --git a/sk0r.js b/sk0r.js new file mode 100644 index 0000000..6fa86bf --- /dev/null +++ b/sk0r.js @@ -0,0 +1,97 @@ +const Nightmare = require('nightmare') +const nightmare = Nightmare({ show: true }) + +var hltv_url = "https://hltv.org"; + +nightmare +.goto(hltv_url) +.wait("span[data-livescore-current-map-score='']") +.wait(2000) +.evaluate(function(hltv_url) { + var match_rows = document.querySelectorAll("div.teamrows"); + var matches = []; + for(var i = 0; i < match_rows.length; i++) { + var match_row = match_rows[i]; + var team_rows = match_row.children; + var parent = match_row.parentElement; + var grandparent = match_row.parentElement.parentElement; + var sibling = match_row.nextElementSibling; + // if (grandparent.className === "col-box a-reset") { continue; } + + // since the VOD boxes are always at the end we can just break + if (grandparent.className === "col-box a-reset") { break; } + + var event_name; + var start_time; + var link; + var stars; + var lan; + var team_names = []; + var team_countries = []; + var current_scores = []; + var maps_won = []; + + + for (var j = 0; j < team_rows.length; j++){ + var team_row = team_rows[j]; + if (team_row.className.includes("teamrow")) { + var flag_el = team_row.getElementsByClassName("flag")[0]; + var team_el = team_row.getElementsByClassName("team")[0]; + team_countries.push(flag_el.getAttribute("title")); + team_names.push(team_el.innerText); + } + } + + if (grandparent.className.includes("hotmatch-box")) { + stars = parent.getAttribute("stars"); + lan = parent.getAttribute("lan"); + link = grandparent.getAttribute("href"); + event_name = grandparent.getAttribute("title") + start_time = "LIVE" + } else if (grandparent.className.includes("col-box-con result-box")) { + stars = grandparent.getAttribute("stars"); + lan = grandparent.getAttribute("lan"); + link = grandparent.getAttribute("href"); + event_name = parent.previousElementSibling.getAttribute("title"); + start_time = "OVER" + } + + if (sibling.className === "twoRowExtra") { + score_rows = sibling.children; + for (var j = 0; j < score_rows.length; j++) { + var score_row = score_rows[j]; + if (score_row.className === "livescore twoRowExtraRow") { + var score_el = score_row.querySelector("[data-livescore-current-map-score='']"); + var maps_won_el = score_row.querySelector("[data-livescore-maps-won-for='']"); + current_scores.push(score_el.innerText); + maps_won.push(maps_won_el.innerText); + } else if (score_row.className.includes("twoRowExtraRow won") + || score_row.className.includes("twoRowExtraRow lost")) { + maps_won.push(score_row.innerText); + } + } + } else if (sibling.className === "middleExtra") { + start_time = sibling.getAttribute("data-unix"); + } + + link = hltv_url + link; + + matches.push({"event_name": event_name, + "start_time": start_time, + "link": link, + "stars": stars, + "lan": lan, + "team_names": team_names, + "team_countries": team_countries, + "current_scores": current_scores, + "maps_won": maps_won}); + + } + return JSON.stringify(matches); + }, hltv_url) +.end() +.then(m => console.log(m)) +.then(nightmare.end()) +.catch(error => { + console.error(error) +});