diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 0ad25db..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,661 +0,0 @@
- GNU AFFERO GENERAL PUBLIC LICENSE
- Version 3, 19 November 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 Affero General Public License is a free, copyleft license for
-software and other kinds of works, specifically designed to ensure
-cooperation with the community in the case of network server software.
-
- The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works. By contrast,
-our General Public Licenses are 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.
-
- 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.
-
- Developers that use our General Public Licenses protect your rights
-with two steps: (1) assert copyright on the software, and (2) offer
-you this License which gives you legal permission to copy, distribute
-and/or modify the software.
-
- A secondary benefit of defending all users' freedom is that
-improvements made in alternate versions of the program, if they
-receive widespread use, become available for other developers to
-incorporate. Many developers of free software are heartened and
-encouraged by the resulting cooperation. However, in the case of
-software used on network servers, this result may fail to come about.
-The GNU General Public License permits making a modified version and
-letting the public access it on a server without ever releasing its
-source code to the public.
-
- The GNU Affero General Public License is designed specifically to
-ensure that, in such cases, the modified source code becomes available
-to the community. It requires the operator of a network server to
-provide the source code of the modified version running there to the
-users of that server. Therefore, public use of a modified version, on
-a publicly accessible server, gives the public access to the source
-code of the modified version.
-
- An older license, called the Affero General Public License and
-published by Affero, was designed to accomplish similar goals. This is
-a different license, not a version of the Affero GPL, but Affero has
-released a new version of the Affero GPL which permits relicensing under
-this license.
-
- 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License.
-
- Notwithstanding any other provision of this License, if you modify the
-Program, your modified version must prominently offer all users
-interacting with it remotely through a computer network (if your version
-supports such interaction) an opportunity to receive the Corresponding
-Source of your version by providing access to the Corresponding Source
-from a network server at no charge, through some standard or customary
-means of facilitating copying of software. This Corresponding Source
-shall include the Corresponding Source for any work covered by version 3
-of the GNU General Public License that is incorporated pursuant to the
-following paragraph.
-
- 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 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 work with which it is combined will remain governed by version
-3 of the GNU General Public License.
-
- 14. Revised Versions of this License.
-
- The Free Software Foundation may publish revised and/or new versions of
-the GNU Affero 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 Affero 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 Affero 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 Affero 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 Affero 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 Affero General Public License for more details.
-
- You should have received a copy of the GNU Affero General Public License
- along with this program. If not, see .
-
-Also add information on how to contact you by electronic and paper mail.
-
- If your software can interact with users remotely through a computer
-network, you should also make sure that it provides a way for users to
-get its source. For example, if your program is a web application, its
-interface could display a "Source" link that leads users to an archive
-of the code. There are many ways you could offer source, and different
-solutions will be better for different programs; see section 13 for the
-specific requirements.
-
- 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 AGPL, see
-.
diff --git a/README.md b/README.md
deleted file mode 100644
index b93d500..0000000
--- a/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# Woomy
-![Status](https://top.gg/api/widget/status/435961704145485835.svg)
-![Servers](https://top.gg/api/widget/servers/435961704145485835.svg)
-![Discord](https://img.shields.io/discord/410990517841690625)
-![Version](https://img.shields.io/github/package-json/v/mudkipscience/woomy-v2)
-![License](https://img.shields.io/github/license/mudkipscience/woomy-v2)
-
-## A feature-rich and configurable Discord bot built with Discord.js for music, moderation, currency and more!
-
-# ARE YOU A DEVELOPER, OR MAKING A PULL REQUEST? **PLEASE ENABLE ESLINT!!!**
-
-**Links**
-* [Official bot invite](https://discord.com/oauth2/authorize?client_id=435961704145485835&permissions=2134240503&scope=bot)
-* [For updates and support join my Discord server!](https://discord.gg/HCF8mdv)
-
-## Using Woomy
-
-The easiest and recommended way to use Woomy is to invite the official version to your server, which is hosted 24/7 and gets the newest updates as soon as they come out. The invite can be found above, under links. You can also self-host, but no support will be provided to you if you decide to do this.
-
-## Contributors
-
-Thanks to the following people who have contributed to Woomy:
-
-* [@mudkipscience](https://github.com/mudkipscience/) - Creator and primary developer of Woomy
-* [@FLGX](https://github.com/FLGX06/) - Developer
-* [@TheCakeChicken](https://github.com/TheCakeChicken/) - Developer
-
-And a few other people as well. Check out the [Contributors](https://github.com/mudkipscience/woomy/graphs/contributors) tab!
-
-## Legal stuff
-
-### Using our code
-If you wish to use our code in your project, please credit us! We don't mind you using Woomy's code (it is open source for a reason :P) as long as you dont blatantly copy it and/or refrain from crediting us.
-
-### License
-
-Copyright (C) 2018-2020 Emily J. / mudkipscience and contributors.
-
-Copyrights licensed under the GNU AGPLv3 License, unless otherwise specified. See the accompanying LICENSE file for details.
diff --git a/application.yml b/application.yml
deleted file mode 100644
index daec336..0000000
--- a/application.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-server: # REST and WS server
- port: 2333
- address: 127.0.0.1
-lavalink:
- server:
- password: "youshallnotpass"
- sources:
- youtube: true
- bandcamp: true
- soundcloud: true
- twitch: true
- vimeo: true
- mixer: true
- http: true
- local: false
- bufferDurationMs: 400
- youtubePlaylistLoadLimit: 6 # Number of pages at 100 each
- youtubeSearchEnabled: true
- soundcloudSearchEnabled: true
- gc-warnings: true
- #ratelimit:
- #ipBlocks: ["1.0.0.0/8", "..."] # list of ip blocks
- #excludedIps: ["...", "..."] # ips which should be explicit excluded from usage by lavalink
- #strategy: "RotateOnBan" # RotateOnBan | LoadBalance | NanoSwitch | RotatingNanoSwitch
- #searchTriggersFail: true # Whether a search 429 should trigger marking the ip as failing
- #retryLimit: -1 # -1 = use default lavaplayer value | 0 = infinity | >0 = retry will happen this numbers times
-
-metrics:
- prometheus:
- enabled: false
- endpoint: /metrics
-
-sentry:
- dsn: ""
-# tags:
-# some_key: some_value
-# another_key: another_value
-
-logging:
- file:
- max-history: 30
- max-size: 1GB
- path: ./logs/
-
- level:
- root: INFO
- lavalink: INFO
\ No newline at end of file
diff --git a/bot/base/Command.js b/bot/base/Command.js
deleted file mode 100644
index cd4833b..0000000
--- a/bot/base/Command.js
+++ /dev/null
@@ -1,23 +0,0 @@
-class Command {
-
- constructor (client, {
- name = null,
- description = 'No description provided.',
- category = 'Miscellaneous',
- usage = 'No usage provided.',
- parameters = '',
- examples = '',
- enabled = true,
- guildOnly = false,
- devOnly = false,
- aliases = new Array(),
- userPerms = new Array(),
- botPerms = new Array (),
- cooldown = 2000
- }) {
- this.client = client;
- this.conf = { enabled, guildOnly, devOnly, aliases, userPerms, botPerms, cooldown };
- this.help = { name, description, category, usage, parameters, examples };
- }
-}
-module.exports = Command;
diff --git a/bot/commands/Configuration/blacklist.js b/bot/commands/Configuration/blacklist.js
deleted file mode 100644
index 04b7cc4..0000000
--- a/bot/commands/Configuration/blacklist.js
+++ /dev/null
@@ -1,92 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Blacklist extends Command {
- constructor (client) {
- super(client, {
- description: 'Add and remove users from the blacklist, preventing them from using commands in this server.',
- usage: '`blacklist [add | remove ]`',
- examples: '`blacklist`\n`blacklist add @annoyinguser123`\n`blacklist remove @cooluser456`',
- userPerms: ['ADMINISTRATOR'],
- guildOnly: true
- });
- }
-
- async run (message, [action, ...user], data) { // eslint-disable-line no-unused-vars
- if (!action) {
- return;
- } else {
- if (!user) return message.channel.send(
- 'You didn\'t specify a user!'
- );
-
- let member = message.mentions.users.first();
-
- if (!member && message.guild) {
- member = this.client.functions.searchForMembers(message.guild, user);
- if (member.length > 1) {
- return message.channel.send(
- 'Found multiple users, please be more specific or @mention the user instead.'
- );
- }
-
- if (member.length < 1) {
- return message.channel.send(
- 'Specified user couldn\'t be found, check for typing errors.'
- );
- }
- }
-
- member = member[0];
-
- const array = data.guild.blacklist;
-
- action = action.toLowerCase();
-
- if (action === 'add') {
- if (member.user.id === message.guild.owner.id) return message.channel.send(
- 'You can\'t add the owner to the blocklist!'
- );
-
- if (member.roles.highest.position >= message.guild.member(message.author).roles.highest.position && message.author.id !== message.guild.ownerID) {
- return message.channel.send(
- 'You can\'t add people higher ranked than yourself to the blocklist!'
- );
- }
-
- if (array.includes(member.user.id)) return message.channel.send(
- 'This user has already been blacklisted.'
- );
-
- array.push(member.user.id);
-
- await this.client.db.updateGuild(message.guild.id, 'blacklist', array);
-
- return message.channel.send(
- `Added \`${member.user.tag}\` to the blocklist.`
- );
- }
-
- if (action === 'remove') {
- if (member.roles.highest.position >= message.guild.member(message.author).roles.highest.position && message.author.id !== message.guild.ownerID) {
- return message.channel.send(
- 'You can\'t remove people higher ranked than yourself from the blocklist!'
- );
- }
-
- if (!array.includes(member.user.id)) return message.channel.send(
- 'This user isn\'t blacklisted.'
- );
-
- array.remove(member.user.id);
-
- await this.client.db.updateGuild(message.guild.id, 'blacklist', array);
-
- return message.channel.send(
- `Removed \`${member.user.tag}\` from the blocklist.`
- );
- }
- }
- }
-}
-
-module.exports = Blacklist;
diff --git a/bot/commands/Configuration/disable.js b/bot/commands/Configuration/disable.js
deleted file mode 100644
index 39e6966..0000000
--- a/bot/commands/Configuration/disable.js
+++ /dev/null
@@ -1,90 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Disable extends Command {
- constructor (client) {
- super(client, {
- description: 'Disables a command/category so they can\'t be used in this server.',
- usage: '`disable command [command]` - Disables the specified command.\n`disable category [category]` - Disables the specified category.',
- examples: '`disable command cuddle`\n`disable category music`',
- userPerms: ['ADMINISTRATOR'],
- guildOnly: true
- });
- }
-
- async run (message, args, data) {
- const essentialCategories = [
- 'Configuration',
- 'Developer'
- ];
-
- const essentialCommands = [
- 'help'
- ];
-
- if (!args[0]) {
-
- return;
- } else {
- if (!args[1]) return message.channel.send(
- 'You didn\'t specify a command/category to disable!'
- );
-
- if (args[0] === 'command') {
- const array = data.guild.disabledcommands;
- const name = args[1].toLowerCase();
- let command;
-
- if (this.client.commands.has(name)) {
- command = this.client.commands.get(name);
- } else if (this.client.aliases.has(name)) {
- command = this.client.commands.get(this.client.aliases.get(name));
- }
-
- if (!command) return message.channel.send(
- `\`${args[0]}\` does not exist as a command or an alias.`
- );
-
- if (essentialCategories.includes(command.help.category) || essentialCommands.includes(command.help.name)) {
- return message.channel.send('This command is essential, and cannot be disabled.');
- }
-
- if (array.includes(command.help.name)) return message.channel.send(
- 'This command has already been disabled. Use `enable` to re-enable it.'
- );
-
- array.push(command.help.name);
-
- await this.client.db.updateGuild(message.guild.id, 'disabledcommands', array);
-
- return message.channel.send(`Disabled command \`${name}\``);
- }
-
- if (args[0] === 'category') {
- const array = data.guild.disabledcategories;
- const name = args[1].toProperCase();
-
- if (!this.client.categories.includes(name)) return message.channel.send(
- 'I couldn\'t find this category. Are you sure you spelt it correctly?'
- );
-
- if (essentialCategories.includes(name)) return message.channel.send(
- 'This category is essential, and cannot be disabled.'
- );
-
- if (array.includes(name)) return message.channel.send(
- 'This command has already been disabled. Use `enable` to re-enable it.'
- );
-
- array.push(name);
-
- await this.client.db.updateGuild(message.guild.id, 'disabledcategories', array);
-
- return message.channel.send(`Disabled category \`${name}\``);
- }
- }
-
- return message.channel.send('didn\'t specify whether to disable a command or category');
- }
-}
-
-module.exports = Disable;
diff --git a/bot/commands/Configuration/enable.js b/bot/commands/Configuration/enable.js
deleted file mode 100644
index 2beeb0d..0000000
--- a/bot/commands/Configuration/enable.js
+++ /dev/null
@@ -1,73 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Enable extends Command {
- constructor (client) {
- super(client, {
- description: 'Re-enables a previously disabled command/category.',
- usage: '`enable command [command]` - Enables the specified command.\n`enable category [category]` - Enables the specified category.',
- examples: '`enable command cuddle`\n`enable category music`',
- userPerms: ['ADMINISTRATOR'],
- guildOnly: true
- });
- }
-
- async run (message, args, data) {
- if (!args[0]) {
-
- return;
- } else {
- if (!args[1]) return message.channel.send(
- 'You didn\'t specify a command/category to enable!'
- );
-
- if (args[0] === 'command') {
- const array = data.guild.disabledcommands;
- const name = args[1].toLowerCase();
- let command;
-
- if (this.client.commands.has(name)) {
- command = this.client.commands.get(name);
- } else if (this.client.aliases.has(name)) {
- command = this.client.commands.get(this.client.aliases.get(name));
- }
-
- if (!command) return message.channel.send(
- `\`${args[0]}\` does not exist as a command or an alias.`
- );
-
- if (!array.includes(command.help.name)) return message.channel.send(
- 'This command isn\'t disabled.'
- );
-
- array.remove(command.help.name);
-
- await this.client.db.updateGuild(message.guild.id, 'disabledcommands', array);
-
- return message.channel.send(`Enabled command \`${name}\``);
- }
-
- if (args[0] === 'category') {
- const array = data.guild.disabledcategories;
- const name = args[1].toProperCase();
-
- if (!this.client.categories.includes(name)) return message.channel.send(
- 'I couldn\'t find this category. Are you sure you spelt it correctly?'
- );
-
- if (!array.includes(name)) return message.channel.send(
- 'This command isn\'t disabled.'
- );
-
- array.remove(name);
-
- await this.client.db.updateGuild(message.guild.id, 'disabledcategories', array);
-
- return message.channel.send(`Enabled category \`${name}\``);
- }
- }
-
- return message.channel.send('didn\'t specify whether to enable a command or category');
- }
-}
-
-module.exports = Enable;
diff --git a/bot/commands/Configuration/settings.js b/bot/commands/Configuration/settings.js
deleted file mode 100644
index a78c131..0000000
--- a/bot/commands/Configuration/settings.js
+++ /dev/null
@@ -1,26 +0,0 @@
-const { MessageEmbed } = require('discord.js');
-const Command = require('../../base/Command.js');
-
-class Settings extends Command {
- constructor (client) {
- super(client, {
- description: 'View all of your server\'s settings.',
- usage: 'settings',
- guildOnly: true,
- aliases: ['config']
- });
- }
-
- async run (message, args) { // eslint-disable-line no-unused-vars
- const settings = await this.client.db.getGuild(message.guild.id);
-
- const embed = new MessageEmbed()
- .setAuthor('Settings Panel', message.guild.iconURL({dynamic: true}))
- .setDescription('All the settings for this server are listed below. To set a setting, use `set [setting] [what you want to set it to]')
- .addFields(
- { name: '**Prefix**', value: settings.prefix }
- );
- }
-}
-
-module.exports = Settings;
diff --git a/bot/commands/Configuration/userprefix.js b/bot/commands/Configuration/userprefix.js
deleted file mode 100644
index a7bac81..0000000
--- a/bot/commands/Configuration/userprefix.js
+++ /dev/null
@@ -1,25 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Userprefix extends Command {
- constructor (client) {
- super(client, {
- description: 'Change the prefix you use for Woomy. This will affect servers and commands in DM\'s.',
- usage: '`userprefix` ',
- examples: '`userprefix !!` - Sets your personal prefix to !!'
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- if (!args[0]) {
- return message.channel.send(
- `Your prefix for Woomy is currently: \`${data.user.prefix}\``
- );
- }
-
- await this.client.db.updateUser(message.author.id, 'prefix', args[0]);
-
- message.channel.send(`Your personal prefix has been set to: \`${args[0]}\``);
- }
-}
-
-module.exports = Userprefix;
diff --git a/bot/commands/Core/help.js b/bot/commands/Core/help.js
deleted file mode 100644
index 3b6a3db..0000000
--- a/bot/commands/Core/help.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Help extends Command {
- constructor (client) {
- super(client, {
- description: 'Lists what commands Woomy has, what they do, and how to use them.',
- usage: '`help` - Lists all commands.\n`help ` - Shows detailed information on a specific command.',
- aliases: ['cmds'],
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
-
- }
-}
-
-module.exports = Help;
diff --git a/bot/commands/Core/ping.js b/bot/commands/Core/ping.js
deleted file mode 100644
index 38bdeea..0000000
--- a/bot/commands/Core/ping.js
+++ /dev/null
@@ -1,24 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Ping extends Command {
- constructor (client) {
- super(client, {
- description: 'Latency and API response times.',
- usage: 'ping',
- aliases: ['pong']
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- try {
- const msg = await message.channel.send('Pinging...');
- msg.edit(
- `Pong! \`${msg.createdTimestamp - message.createdTimestamp}ms\` (💗 \`${Math.round(this.client.ws.ping)}ms\`)`
- );
- } catch (err) {
- this.client.logger.err(err);
- }
- }
-}
-
-module.exports = Ping;
diff --git a/bot/commands/Developer/eval.js b/bot/commands/Developer/eval.js
deleted file mode 100644
index c3d1dbf..0000000
--- a/bot/commands/Developer/eval.js
+++ /dev/null
@@ -1,37 +0,0 @@
-const Command = require('../../base/Command.js');
-const Discord = require('discord.js');
-
-class Eval extends Command {
- constructor (client) {
- super(client, {
- description: 'Evaluates arbitrary Javascript.',
- usage: 'eval ',
- aliases: ['ev'],
- permLevel: 'Bot Owner',
- devOnly: true
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- const code = args.join(' ');
- try {
- const evaled = eval(code);
- const clean = await this.client.functions.clean(evaled);
- const MAX_CHARS = 3 + 2 + clean.length + 3;
- if (MAX_CHARS > 2000) {
- message.channel.send({ files: [new Discord.MessageAttachment(Buffer.from(clean), 'output.txt')] });
- }
- message.channel.send(`\`\`\`js\n${clean}\n\`\`\``);
- } catch (err) {
- const e = await this.client.functions.clean(err);
- const MAX_CHARS = 1 + 5 + 1 + 3 + e.length + 3;
- if (MAX_CHARS > 2000) {
- return message.channel.send({ files: [new Discord.MessageAttachment(Buffer.from(e), 'error.txt')] });
- }
-
- message.channel.send(`\`ERROR\` \`\`\`xl\n${e}\n\`\`\``);
- }
- }
-}
-
-module.exports = Eval;
diff --git a/bot/commands/Developer/reload.js b/bot/commands/Developer/reload.js
deleted file mode 100644
index b00c72e..0000000
--- a/bot/commands/Developer/reload.js
+++ /dev/null
@@ -1,38 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Reload extends Command {
- constructor (client) {
- super(client, {
- description: 'Latency and API response times.',
- usage: '`reload [command]` - Reloads the specified command.',
- examples: '`reload ping`',
- devOnly: true
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- if (!args[0]) return message.channel.send('You didnt tell me what command to reload!');
-
- let command;
-
- if (this.client.commands.has(args[0])) {
- command = this.client.commands.get(args[0]);
- } else if (this.client.aliases.has(args[0])) {
- command = this.client.commands.get(this.client.aliases.get(args[0]));
- }
-
- if (!command) return message.channel.send(
- `\`${args[0]}\` does not exist as a command or an alias.`
- );
-
- let res = await this.client.commandHandler.unload(command.help.name, command.help.category);
- if (res) return message.channel.send('Error unloading: '+ res);
-
- res = await this.client.commandHandler.load(command.help.name, command.help.category);
- if (res) return message.channel.send('Error loading: ' + res);
-
- return message.channel.send(`Reloaded \`${args[0]}\``);
- }
-}
-
-module.exports = Reload;
diff --git a/bot/commands/Test/lastmessage.js b/bot/commands/Test/lastmessage.js
deleted file mode 100644
index 4541423..0000000
--- a/bot/commands/Test/lastmessage.js
+++ /dev/null
@@ -1,17 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Lastmessage extends Command {
- constructor (client) {
- super(client, {
- description: 'Grab last message sent to a channel.',
- usage: 'lastmessage',
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- const lastMsg = await this.client.functions.getLastMessage(message.channel);
- message.channel.send(lastMsg);
- }
-}
-
-module.exports = Lastmessage;
diff --git a/bot/commands/Test/msearch.js b/bot/commands/Test/msearch.js
deleted file mode 100644
index a13e2f0..0000000
--- a/bot/commands/Test/msearch.js
+++ /dev/null
@@ -1,36 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Msearch extends Command {
- constructor (client) {
- super(client, {
- description: 'Lists all members found that match the input',
- usage: '`msearch` [query] - Finds users in this server that match the query.`',
- aliases: ['membersearch']
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- if (!args[0]) return message.channel.send('No username provided.');
-
- let mlist = '';
- let count = 0;
-
- this.client.functions.searchForMembers(message.guild, args[0]).forEach((member) => {
- if (member) {
- mlist += `\`${member.user.tag}\``;
- count = count + 1;
- }
- mlist += '**, **';
- });
-
- mlist = mlist.substring(0, mlist.length - 6);
-
- const mlist1 = `Found ${count} users:\n` + mlist;
-
- if (!mlist1) return message.channel.send('No users found!');
-
- message.channel.send(mlist1);
- }
-}
-
-module.exports = Msearch;
diff --git a/bot/commands/Test/retrieve.js b/bot/commands/Test/retrieve.js
deleted file mode 100644
index 3f8f757..0000000
--- a/bot/commands/Test/retrieve.js
+++ /dev/null
@@ -1,32 +0,0 @@
-const Command = require('../../base/Command.js');
-
-class Retrieve extends Command {
- constructor (client) {
- super(client, {
- description: 'Retrieves a key\'s value from the Postgres DB.',
- usage: 'retrieve [setting]',
- guildOnly: true
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- if (!args[0]) return message.channel.send('You didn\'t specify what database to access!');
- if (args[0].toLowerCase() !== 'guild' && args[0].toLowerCase() !== 'member' && args[0].toLowerCase() !== 'user') {
- return message.channel.send('Invalid database. Valid databases: `guild`, `member`, `user`');
- }
-
- if (!args[1]) {
- message.channel.send(
- `\`\`\`js
- ${JSON.stringify(data[args[0]])}
- \`\`\``
- );
- } else {
- const res = data[args[0]][args[1]];
- if (!res) return message.channel.send('Invalid key. Check for typing errors and try again.');
- message.channel.send('```' + res + '```');
- }
- }
-}
-
-module.exports = Retrieve;
diff --git a/bot/commands/Utility/avatar.js b/bot/commands/Utility/avatar.js
deleted file mode 100644
index f883c26..0000000
--- a/bot/commands/Utility/avatar.js
+++ /dev/null
@@ -1,55 +0,0 @@
-const Discord = require('discord.js');
-const Command = require('../../base/Command.js');
-
-class Avatar extends Command {
- constructor (client) {
- super(client, {
- description: 'View a full-sized image of a person\'s profile picture.',
- usage: 'avatar ',
- examples: '`avatar` - Gets your avatar.\n`avatar emily` - Gets the avatar of the user "emily"',
- aliases: ['pfp'],
- botPerms: ['EMBED_LINKS']
- });
- }
-
- async run (message, args, data) { // eslint-disable-line no-unused-vars
- if (!args[0]) {
- const embed = this.createEmbed(message.author);
- return message.channel.send(embed);
- }
-
- let user = message.mentions.users.first();
-
- if (!user && message.guild) {
- user = this.client.functions.searchForMembers(message.guild, args[0]);
- if (user.length > 1) {
- return message.channel.send(
- 'Found multiple users, please be more specific or @mention the user instead.'
- );
- }
-
- if (user.length < 1) {
- return message.channel.send(
- 'Specified user couldn\'t be found, check for typing errors.'
- );
- }
- }
-
- user = user[0].user;
-
- const embed = this.createEmbed(user);
- return message.channel.send(embed);
- }
-
- createEmbed (user) {
- const URL = user.avatarURL({format: 'png', dynamic: true, size: 2048});
- const embed = new Discord.MessageEmbed()
- .setTitle(user.tag)
- .setDescription(`**[Avatar URL](${URL})**`)
- .setImage(URL);
-
- return embed;
- }
-}
-
-module.exports = Avatar;
diff --git a/bot/events/error.js b/bot/events/error.js
deleted file mode 100644
index baca31c..0000000
--- a/bot/events/error.js
+++ /dev/null
@@ -1,9 +0,0 @@
-module.exports = class {
- constructor (client) {
- this.client = client;
- }
-
- async run (error) {
- this.client.logger.log(`An error event was sent by Discord.js: \n${JSON.stringify(error)}`, 'error');
- }
-};
diff --git a/bot/events/message.js b/bot/events/message.js
deleted file mode 100644
index e79be32..0000000
--- a/bot/events/message.js
+++ /dev/null
@@ -1,127 +0,0 @@
-// The MESSAGE event runs anytime a message is received
-// Note that due to the binding of client to every event, every event
-// goes `client, other, args` when this function is run.
-
-module.exports = class {
- constructor (client) {
- this.client = client;
- }
-
- async run (message) {
- if (message.author.bot) return;
-
- const prefixes = [];
- const data = {};
-
- data.user = await this.client.db.getUser(message.author.id);
- if (!data.user) data.user = await this.client.db.createUser(message.author.id);
- prefixes.push(data.user.prefix);
-
- if (message.guild) {
- data.guild = await this.client.db.getGuild(message.guild.id);
- if (!data.guild) await this.client.db.createGuild(message.guild.id);
- prefixes.push(data.guild.prefix);
-
- data.member = await this.client.db.getMember(message.guild.id, message.author.id);
- if (!data.member) data.member = await this.client.db.createMember(message.guild.id, message.author.id);
- }
-
- // Blacklist
- if (data.guild.blacklist.includes(message.author.id)) return;
-
- // Respond with prefixes when pinged
- if (message.content === `<@${this.client.user.id}>` || message.content === `<@!${this.client.user.id}>`) {
- return message.channel.send(`Hi! The server prefix is \`${data.guild.prefix}\`, and your personal prefix is \`${data.user.prefix}\`. You can also ping me ^-^`);
- }
-
- // Allow pings to be used as prefixes
- prefixes.push(`<@${this.client.user.id}> `, `<@!${this.client.user.id}> `);
-
- let prefix;
-
- for (const thisPrefix of prefixes) {
- if (message.content.startsWith(thisPrefix)) prefix = thisPrefix;
- }
-
- if (message.content.indexOf(prefix) !== 0) return;
-
- if (prefix === `<@${this.client.user.id}> ` || prefix === `<@!${this.client.user.id}> `) {
- message.prefix = '@Woomy ';
- } else {
- message.prefix = prefix;
- }
-
- const args = message.content.slice(prefix.length).trim().split(/ +/g);
- const command = args.shift().toLowerCase();
-
- // Cache uncached members
- if (message.guild && !message.member) await message.guild.fetchMember(message.author);
-
- const cmd = this.client.commands.get(command) || this.client.commands.get(this.client.aliases.get(command));
- if (!cmd) return;
-
- if (message.guild) {
- if (!message.channel.permissionsFor(this.client.user).has('SEND_MESSAGES')) {
- try {
- return message.author.send(`I don't have permission to speak in \`#${message.channel.name}\`, Please ask a moderator to give me the send messages permission!`);
- } catch (err) {} //eslint-disable-line no-empty
- }
-
- if (data.guild.disabledcommands.includes(cmd.help.name)) return message.channel.send(
- 'This command has been disabled by a server administrator.'
- );
-
- if (data.guild.disabledcategories.includes(cmd.help.category)) return message.channel.send(
- 'The category this command is apart of has been disabled by a server administrator.'
- );
- }
-
- if (cmd && cmd.conf.enabled === false) {
- return message.channel.send('This command has been disabled by my developers.');
- }
-
- if (cmd && cmd.conf.devOnly && this.client.functions.isDeveloper(message.author.id) !== true) {
- return message.channel.send('devs only!');
- }
-
- if (cmd && !message.guild && cmd.conf.guildOnly === true) {
- return message.channel.send('This command is unavailable via private message. Please run this command in a guild.');
- }
-
- // Permission handler
- if (message.guild) {
- const missingUserPerms = this.client.functions.checkPermissions(cmd, message, message.member);
- if (missingUserPerms) return message.channel.send(`
- You don't have sufficient permissions to run this command! Missing: ${missingUserPerms}
- `);
-
- const missingBotPerms = this.client.functions.checkPermissions(cmd, message, message.guild.member(this.client.user));
- if (missingBotPerms) return message.channel.send(`
- I can't run this command because I'm missing these permissions: ${missingBotPerms}
- `);
- }
-
- // Cooldown
- if (this.client.cooldowns.get(cmd.help.name).has(message.author.id)) {
- const init = this.client.cooldowns.get(command).get(message.author.id);
- const curr = new Date();
- const diff = Math.round((curr - init) / 1000);
- const time = cmd.conf.cooldown / 1000;
- return message.reply(`this command is on cooldown! You'll be able to use it again in ${time - diff} seconds.`);
- } else {
- this.client.cooldowns.get(cmd.help.name).set(message.author.id, new Date());
-
- setTimeout(() => {
- this.client.cooldowns.get(cmd.help.name).delete(message.author.id);
- }, this.client.commands.get(cmd.help.name).conf.cooldown);
- }
-
- message.flags = [];
- while (args[0] &&args[0][0] === '-') {
- message.flags.push(args.shift().slice(1));
- }
-
- cmd.run(message, args, data);
- this.client.logger.cmd(`Command ran: ${message.content}`);
- }
-};
diff --git a/bot/events/ready.js b/bot/events/ready.js
deleted file mode 100644
index 8611520..0000000
--- a/bot/events/ready.js
+++ /dev/null
@@ -1,11 +0,0 @@
-module.exports = class {
- constructor (client) {
- this.client = client;
- }
-
- async run () {
- await this.client.functions.wait(1000);
- this.client.user.setActivity(`BNA | v${this.client.version}`, { type: 'WATCHING' }); // lol
- this.client.logger.ready(`Connected to Discord as ${this.client.user.tag}`);
- }
-};
diff --git a/bot/index.js b/bot/index.js
deleted file mode 100644
index 0c8ce02..0000000
--- a/bot/index.js
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright 2020 Emily J. / mudkipscience and contributors. Subject to the AGPLv3 license.
-
-const { Client, Collection } = require('discord.js');
-const { CommandHandler, EventHandler } = require('./util/handlers');
-const Functions = require('./util/functions');
-const Database = require('./util/database');
-const logger = require('./util/logger');
-const sentry = require('@sentry/node'); // eslint-disable-line no-unused-vars
-const { readdirSync } = require('fs');
-const config = require('../config.json');
-const pkg = require('../package.json');
-
-class WoomyClient extends Client {
- constructor () {
- super();
-
- // Important information our bot needs to access
- this.config = config;
- this.path = __dirname;
- this.version = pkg.version;
- this.categories = readdirSync('./commands/');
-
- // dev mode, disables some features if enabled
- this.dev = false;
- if (this.config.devmode === true) {
- this.dev = true;
- // sentry.init({ dsn: this.config.keys.sentry });
- }
-
- // Essential modules
- this.logger = logger;
- this.functions = new Functions(this);
- this.db = new Database(this);
-
- // collections, to store commands, their aliases and their cooldown timers in
- this.commands = new Collection();
- this.aliases = new Collection();
- this.cooldowns = new Collection();
-
- // Handlers, to load commands and events
- this.commandHandler = new CommandHandler(this);
- this.eventHandler = new EventHandler(this);
- }
-}
-
-async function init () {
- const client = new WoomyClient({ ws: {}});
-
- client.logger.info(`Initializing Woomy v${client.version}`);
-
- require('./util/prototypes');
-
- await client.commandHandler.loadAll();
- await client.eventHandler.loadAll();
-
- if (client.dev === true) {
- client.logger.warn('Development mode is enabled. Some features (such as Sentry) have been disabled.');
- client.login(client.config.devtoken);
- } else {
- client.login(client.config.token);
- }
-}
-
-init();
-
-process.on('uncaughtException', (err) => {
- const errorMsg = err.stack.replace(new RegExp(`${__dirname}/`, 'g'), './');
- console.error('Uncaught Exception: ', errorMsg);
- process.exit(1);
-});
-
-process.on('unhandledRejection', err => {
- console.error('Uncaught Promise Error: ', err);
-});
\ No newline at end of file
diff --git a/bot/shardLauncher.js b/bot/shardLauncher.js
deleted file mode 100644
index 28fec94..0000000
--- a/bot/shardLauncher.js
+++ /dev/null
@@ -1,13 +0,0 @@
-const discord = require('discord.js');
-const config = require('../config.json');
-
-const manager = new discord.ShardingManager('./index.js', {
- totalShards: 'auto',
- token: config.token
-});
-
-manager.on('shardCreate', (shard) => {
- console.log('Shard ' + shard.id + ' launched');
-});
-
-manager.spawn();
\ No newline at end of file
diff --git a/bot/util/database.js b/bot/util/database.js
deleted file mode 100644
index f3aaaa3..0000000
--- a/bot/util/database.js
+++ /dev/null
@@ -1,162 +0,0 @@
-/* eslint-disable no-unused-vars */
-
-const { Pool } = require('pg');
-const format = require('pg-format');
-const { level } = require('winston');
-const { pgCredentials } = require('../../config.json');
-
-class Database {
- constructor (client) {
- this.client = client;
- this.pool = new Pool(pgCredentials);
-
- this.pool.on('error', err => {
- this.client.logger.error('Postgres error: ' + err);
- });
- }
-
- async getGuild (id) {
- const res = await this.pool.query('SELECT * FROM guilds WHERE guild_id = $1;', [id]);
- return res.rows[0];
- }
-
- async getMember (guild_id, user_id) {
- const key = guild_id + ':' + user_id;
- const res = await this.pool.query('SELECT * FROM members WHERE member_id = $1;', [key]);
- return res.rows[0];
- }
-
- async getUser (id) {
- const res = await this.pool.query('SELECT * FROM users WHERE user_id = $1;', [id]);
- return res.rows[0];
- }
-
- async getGuildField (id, column) {
- const sql = format('SELECT %I FROM guilds WHERE guild_id = $1;', column);
- const query = {
- text: sql,
- values: [id],
- rowMode: 'array'
- };
-
- const res = await this.pool.query(query);
-
- return res.rows[0][0];
- }
-
- async getMemberField (guild_id, user_id, column) {
- const key = guild_id + ':' + user_id;
- const sql = format('SELECT %I FROM members WHERE member_id = $1;', column);
- const query = {
- text: sql,
- values: [key],
- rowMode: 'array'
- };
-
- const res = await this.pool.query(query);
-
- return res.rows[0][0];
- }
-
- async getUserField (id, column) {
- const sql = format('SELECT %I FROM users WHERE user_id = $1;', column);
- const query = {
- text: sql,
- values: [id],
- rowMode: 'array'
- };
-
- const res = await this.pool.query(query);
-
- return res.rows[0][0];
- }
-
- async updateGuild (id, column, newValue) {
- const sql = format('UPDATE guilds SET %I = $1 WHERE guild_id = $2;', column);
- await this.pool.query(sql, [newValue, id]);
- return;
- }
-
- async updateMember (guild_id, user_id, column, newValue) {
- const key = guild_id + ':' + user_id;
- const sql = format('UPDATE members SET %I = $1 WHERE member_id = $2;', column);
- await this.pool.query(sql, [newValue, key]);
- return;
- }
-
- async updateUser (id, column, newValue) {
- const sql = format('UPDATE users SET %I = $1 WHERE user_id = $2;', column);
- await this.pool.query(sql, [newValue, id]);
- return;
- }
-
- async resetGuild (id, column) {
- const regexp = /(?<=\')(.*?)(?=\')/; //eslint-disable-line no-useless-escape
- const res = await this.client.db.pool.query(
- 'SELECT column_default FROM information_schema.columns WHERE table_name=\'guilds\' AND column_name = $1;', [column]);
- const def = res.rows[0].column_default.match(regexp)[0];
-
- await this.updateGuild(id, column, def);
-
- return;
- }
-
- async resetMember (guild_id, user_id, column) {
- const key = guild_id + ':' + user_id;
- const regexp = /(?<=\')(.*?)(?=\')/; //eslint-disable-line no-useless-escape
- const res = await this.client.db.pool.query(
- 'SELECT column_default FROM information_schema.columns WHERE table_name=\'members\' AND column_name = $1;', [column]);
- const def = res.rows[0].column_default.match(regexp)[0];
-
- await this.updateGuild(key, column, def);
-
- return;
- }
-
- async resetUser (id, column) {
- const regexp = /(?<=\')(.*?)(?=\')/; //eslint-disable-line no-useless-escape
- const res = await this.client.db.pool.query(
- 'SELECT column_default FROM information_schema.columns WHERE table_name=\'users\' AND column_name = $1;', [column]);
- const def = res.rows[0].column_default.match(regexp)[0];
-
- await this.updateGuild(id, column, def);
-
- return;
- }
-
- async deleteGuild (id) {
- await this.pool.query('DELETE FROM guilds WHERE guild_id = $1;', [id]);
- await this.pool.query('DELETE FROM members WHERE member_id LIKE $1;', [`${id}%`]);
- return;
- }
-
- async deleteMember (guild_id, user_id) {
- const key = guild_id + ':' + user_id;
- await this.pool.query('DELETE FROM members WHERE member_id = $1;', [key]);
- return;
- }
-
- async deleteUser (id) {
- await this.pool.query('DELETE FROM users WHERE user_id = $1;', [id]);
- await this.pool.query('DELETE FROM members WHERE member_id LIKE $1;', [`${id}%`]);
- return;
- }
-
- async createGuild (id) {
- const res = await this.pool.query('INSERT INTO guilds (guild_id) VALUES ($1) RETURNING *;', [id]);
- return res;
- }
-
- async createMember (guild_id, user_id) {
- const key = guild_id + ':' + user_id;
- const res = await this.pool.query('INSERT INTO members (member_id) VALUES ($1) RETURNING *;', [key]);
- return res.rows[0];
- }
-
- async createUser (id) {
- const res = await this.pool.query('INSERT INTO users (user_id) VALUES ($1) RETURNING *;', [id]);
- return res.rows[0];
- }
-}
-
-module.exports = Database;
\ No newline at end of file
diff --git a/bot/util/dbdoctor.js b/bot/util/dbdoctor.js
deleted file mode 100644
index 78d88bc..0000000
--- a/bot/util/dbdoctor.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- * - Will work on this soon. Triggered when a mismatch between DB and Discord occurs
- * For instance, when a user deletes a role that the database has stored.
- *
- * - Will be implemented so if Woomy fails to find a role, user, etc. with the ID stored in
- * the database, database doctor is triggered. Will attempt to resolve the discrepancy, or reset
- * to default
- */
\ No newline at end of file
diff --git a/bot/util/functions.js b/bot/util/functions.js
deleted file mode 100644
index d91ef08..0000000
--- a/bot/util/functions.js
+++ /dev/null
@@ -1,147 +0,0 @@
-const { MessageEmbed } = require('discord.js');
-const { inspect, promisify } = require('util');
-
-class Functions {
- constructor (client) {
- this.client = client;
- }
-
- userError (channel, cmd, error) {
- const embed = new MessageEmbed()
- .setColor('#EF5350')
- .setTitle(`${cmd.help.name}:${cmd.help.category.toLowerCase()}`)
- .setDescription(error)
- .addField('**Usage**', cmd.help.usage)
- .setFooter(`Run 'help ${cmd.help.name}' for more information.`);
-
- channel.send(embed);
- }
-
- async getLastMessage (channel) {
- const messages = await channel.messages.fetch({ limit: 2 });
- return messages.last().content;
- }
-
- async awaitReply (message, question, limit = 60000) {
- const filter = (m) => m.author.id === message.author.id;
- await message.channel.send(question);
-
- try {
- const collected = await message.channel.awaitMessages(filter, {
- max: 1,
- time: limit,
- errors: ['time']
- });
-
- return collected.first().content;
- } catch (err) {
- return false;
- }
- }
-
- searchForMembers (guild, query) {
- query = query.toLowerCase();
-
- const matches = [];
- let match;
-
- try {
- match = guild.members.cache.find(x => x.displayName.toLowerCase() == query);
- if (!match) guild.members.cache.find(x => x.user.username.toLowerCase() == query);
- } catch (err) {} //eslint-disable-line no-empty
-
- if (match) matches.push(match);
- guild.members.cache.forEach(member => {
- if (
- (member.displayName.toLowerCase().startsWith(query) ||
- member.user.tag.toLowerCase().startsWith(query)) &&
- member.id != (match && match.id)
- ) {
- matches.push(member);
- }
- });
-
- return matches;
- }
-
- findRole (input, message) {
- let role;
- role = message.guild.roles.cache.find(r => r.name.toLowerCase() === input.toLowerCase());
- if (!role) {
- role = message.guild.roles.cache.get(input.toLowerCase());
- }
- if (!role) return;
- return role;
- }
-
- checkPermissions (command, message, member) {
- const missingPerms = [];
-
- if (member.user.bot) {
- command.conf.botPerms.forEach(p => {
- if (!message.channel.permissionsFor(member).has(p)) missingPerms.push(p);
- });
- } else {
- command.conf.userPerms.forEach(p => {
- if (!message.channel.permissionsFor(member).has(p)) missingPerms.push(p);
- });
- }
-
- if (missingPerms.length > 0) return missingPerms;
- }
-
-
- intBetween (min, max) {
- return Math.round((Math.random() * (max - min) + min));
- }
-
- isDeveloper (id) {
- if (this.client.config.ownerIDs.includes(id)) {
- return true;
- } else {
- return false;
- }
- }
-
- shutdown () {
- const exitQuotes = [
- 'Shutting down.',
- 'I don\'t blame you.',
- 'I don\'t hate you.',
- 'Whyyyyy',
- 'Goodnight.',
- 'Goodbye'
- ];
-
- this.client.db.pool.end().then(() => {
- this.client.logger.info('Connection to database closed.');
- });
-
- this.client.destroy();
-
- console.log(exitQuotes);
- }
-
- async clean (text) {
- if (text && text.constructor.name === 'Promise') {
- text = await text;
- }
-
- if (typeof text !== 'string') {
- text = inspect(text, { depth: 1});
- }
-
- text = text
- .replace(/`/g, '`' + String.fromCharCode(8203))
- .replace(/@/g, '@' + String.fromCharCode(8203))
- .replace(this.client.token, 'mfa.VkO_2G4Qv3T--NO--lWetW_tjND--TOKEN--QFTm6YGtzq9PH--4U--tG0');
-
- return text;
- }
-
- wait () {
- promisify(setTimeout);
- }
-}
-
-module.exports = Functions;
\ No newline at end of file
diff --git a/bot/util/handlers.js b/bot/util/handlers.js
deleted file mode 100644
index 5e9974d..0000000
--- a/bot/util/handlers.js
+++ /dev/null
@@ -1,126 +0,0 @@
-const fs = require('fs');
-
-class CommandHandler {
- constructor (client) {
- this.client = client;
- }
-
- load (name, category) {
- try {
- const path = this.client.path + '/commands/' + category + '/' + name + '.js';
- const props = new (require(path))(this.client);
-
- this.client.logger.debug(`Loading command ${category}/${name}`);
-
- props.help.name = name;
- props.help.category = category;
-
- if (props.init) {
- props.init(this.client);
- }
-
- this.client.commands.set(props.help.name, props);
-
- this.client.cooldowns.set(props.help.name, new Map());
-
- props.conf.aliases.forEach(alias => {
- this.client.aliases.set(alias, props.help.name);
- });
-
- return;
- } catch (err) {
- return `Failed to load command ${name}: ${err.stack}`;
- }
- }
-
- loadAll () {
- const commandDirectories = fs.readdirSync('./commands/');
- this.client.logger.debug(`Found ${commandDirectories.length} command directories.`);
- commandDirectories.forEach((dir) => {
- const commandFiles = fs.readdirSync('./commands/' + dir + '/');
- commandFiles.filter((cmd) => cmd.split('.').pop() === 'js').forEach((cmd) => {
- cmd = cmd.substring(0, cmd.length - 3);
- const resp = this.load(cmd, dir);
- if (resp) {
- this.client.logger.error(resp);
- }
- });
- });
- this.client.logger.info(`Loaded a total of ${this.client.commands.size} commands.`);
- }
-
- unload (name, category) {
- const path = this.client.path + '/commands/' + category + '/' + name + '.js';
-
- let command;
-
- if (this.client.commands.has(name)) {
- command = this.client.commands.get(name);
- } else if (this.client.aliases.has(name)) {
- command = this.client.commands.get(this.client.aliases.get(name));
- }
-
- if (!command) return `\`${name}\` does not exist as a command or an alias.`;
-
- this.client.logger.debug(`Unloading command ${category}/${name}`);
-
- for (const alias of command.conf.aliases) this.client.aliases.delete(alias);
- this.client.commands.delete(command.help.name);
- delete require.cache[require.resolve(path)];
-
- return;
- }
-
- unloadAll () {
- const commandDirectories = fs.readdirSync('./commands/');
- this.client.logger.debug(`Found ${commandDirectories.length} command directories.`);
- commandDirectories.forEach((dir) => {
- const commandFiles = fs.readdirSync('./commands/' + dir + '/');
- commandFiles.filter((cmd) => cmd.split('.').pop() === 'js').forEach((cmd) => {
- cmd = cmd.substring(0, cmd.length - 3);
- const res = this.unload(cmd, dir);
- if (res) this.client.logger.error('Command unload: ' + res);
- });
- });
- }
-}
-
-class EventHandler {
- constructor (client) {
- this.client = client;
- }
-
- load (name) {
- try {
- this.client.logger.debug(`Loading event ${name}`);
-
- const path = this.client.path + '/events/' + name + '.js';
- const event = new (require(path))(this.client);
- this.client.on(name, (...args) => event.run(...args));
- delete require.cache[require.resolve(path)];
-
- return;
- } catch (err) {
- return `Failed to load event ${name}: ${err}`;
- }
- }
-
- loadAll () {
- const eventFiles = fs.readdirSync(this.client.path + '/events');
- eventFiles.forEach(file => {
- const name = file.split('.')[0];
- const resp = this.load(name);
-
- if (resp) {
- this.client.logger.error(resp);
- }
- });
- }
-
- // TO-DO: EVENT UNLOADING/RELOADING
-}
-
-module.exports = {
- CommandHandler: CommandHandler,
- EventHandler: EventHandler
-};
\ No newline at end of file
diff --git a/bot/util/logger.js b/bot/util/logger.js
deleted file mode 100644
index f88c628..0000000
--- a/bot/util/logger.js
+++ /dev/null
@@ -1,53 +0,0 @@
-const { createLogger, format, transports, addColors } = require('winston');
-
-const fmt = format.printf(({ level, message, timestamp }) => {
- return '[' + timestamp + '] ' + level + ' ' + message;
-});
-
-const customLevels = {
- levels: {
- debug: 0,
- cmd: 1,
- info: 2,
- ready: 3,
- warn: 4,
- error: 5
- },
-
- colours: {
- debug: 'black magentaBG',
- cmd: 'black whiteBG',
- info: 'black cyanBG',
- ready: 'black greenBG',
- warn: 'black yellowBG',
- error: 'black redBG'
- }
-};
-
-const logger = createLogger({
- levels: customLevels.levels,
- level: 'error',
- format: format.combine(
- format.timestamp({
- format: 'YYYY-MM-DD hh:mm:ss'
- }),
- fmt
- ),
-
- transports: [
- new transports.Console({
- level: 'error',
- format: format.combine(
- format.timestamp({
- format: 'YYYY-MM-DD hh:mm:ss'
- }),
- format.colorize(),
- fmt
- )
- })
- ]
-});
-
-addColors(customLevels.colours);
-
-module.exports = logger;
\ No newline at end of file
diff --git a/bot/util/prototypes.js b/bot/util/prototypes.js
deleted file mode 100644
index 6d99b3c..0000000
--- a/bot/util/prototypes.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// YEAH IM EXTENDING PROTOTYPES FUCK YOU
-
-String.prototype.toProperCase = function () {
- return this.replace(/([^\W_]+[^\s-]*) */g, function (txt) {return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
-};
-
-Array.prototype.random = function () {
- return this[Math.floor(Math.random() * this.length)];
-};
-
-Array.prototype.remove = function (element) {
- const index = this.indexOf(element);
- if (index !== -1) this.splice(index, 1);
- return this;
-};
\ No newline at end of file
diff --git a/bot/util/schema.js b/bot/util/schema.js
deleted file mode 100644
index 6117743..0000000
--- a/bot/util/schema.js
+++ /dev/null
@@ -1 +0,0 @@
-// postgres schemas so i can remember them
\ No newline at end of file
diff --git a/config.json.example b/config.json.example
deleted file mode 100644
index bf0b57c..0000000
--- a/config.json.example
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "token": "",
- "devtoken": "",
- "ownerIDs": [],
- "devmode": false,
- "keys": {
- "topgg": "",
- "sentry": ""
- },
- "pgCredentials": {
- "user": "",
- "host": "",
- "database": "",
- "password": "",
- "port":
- },
- "lavalinkNodes": [
- {
- "name": "",
- "host": "",
- "port": ,
- "auth": ""
- }
- ],
- "emoji": {
- "success": "",
- "error": "",
- "denied": "",
- "wait": "",
- "warning": ""
- },
- "defaultUserData": {
- "blacklisted": false,
- "prefix": "w!",
- "experience": 0,
- "seashells": 0,
- "relationships": [],
- "pronouns": null,
- "colour": "#9d10e1"
- },
- "defaultMemberData": {
- "blacklisted": false,
- "experience": 0
- },
- "defaultGuildData": {
- "prefix": "w!",
- "mutedRole": null,
- "autorole": null,
- "welcomeChannel": null,
- "welcomeMessage": "Hey there [[user]], and welcome to [[server]]!",
- "leaveChannel": null,
- "leaveMessage": "[[user]] has left [[server]]... bye [[user]] 👋",
- "chatlogsChannel": null,
- "modlogsChannel": null,
- "starboardChannel": null
- }
-}
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 081b634..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,1446 +0,0 @@
-{
- "name": "woomy",
- "version": "2.0.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@babel/code-frame": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
- "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.10.4"
- }
- },
- "@babel/helper-validator-identifier": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
- "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
- "dev": true
- },
- "@babel/highlight": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
- "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.10.4",
- "chalk": "^2.0.0",
- "js-tokens": "^4.0.0"
- },
- "dependencies": {
- "chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- }
- }
- },
- "@dabh/diagnostics": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz",
- "integrity": "sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==",
- "requires": {
- "colorspace": "1.1.x",
- "enabled": "2.0.x",
- "kuler": "^2.0.0"
- }
- },
- "@discordjs/collection": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz",
- "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ=="
- },
- "@discordjs/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@discordjs/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-ZfFsbgEXW71Rw/6EtBdrP5VxBJy4dthyC0tpQKGKmYFImlmmrykO14Za+BiIVduwjte0jXEBlhSKf0MWbFp9Eg==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
- "@eslint/eslintrc": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.1.3.tgz",
- "integrity": "sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA==",
- "dev": true,
- "requires": {
- "ajv": "^6.12.4",
- "debug": "^4.1.1",
- "espree": "^7.3.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.2.1",
- "js-yaml": "^3.13.1",
- "lodash": "^4.17.19",
- "minimatch": "^3.0.4",
- "strip-json-comments": "^3.1.1"
- }
- },
- "@sentry/core": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.26.0.tgz",
- "integrity": "sha512-Ubrw7K52orTVsaxpz8Su40FPXugKipoQC+zPrXcH+JIMB+o18kutF81Ae4WzuUqLfP7YB91eAlRrP608zw0EXA==",
- "requires": {
- "@sentry/hub": "5.26.0",
- "@sentry/minimal": "5.26.0",
- "@sentry/types": "5.26.0",
- "@sentry/utils": "5.26.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/hub": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.26.0.tgz",
- "integrity": "sha512-lAYeWvvhGYS6eQ5d0VEojw0juxGc3v4aAu8VLvMKWcZ1jXD13Bhc46u9Nvf4qAY6BAQsJDQcpEZLpzJu1bk1Qw==",
- "requires": {
- "@sentry/types": "5.26.0",
- "@sentry/utils": "5.26.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/minimal": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.26.0.tgz",
- "integrity": "sha512-mdFo3FYaI1W3KEd8EHATYx8mDOZIxeoUhcBLlH7Iej6rKvdM7p8GoECrmHPU1l6sCCPtBuz66QT5YeXc7WILsA==",
- "requires": {
- "@sentry/hub": "5.26.0",
- "@sentry/types": "5.26.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/node": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.26.0.tgz",
- "integrity": "sha512-BuN9c84f8MxGhYZl+JgVsORh3GiDmuyG9QjawVQ2fmJKVxQ+fcNvde/wq5z7jEca4Z8FrNLa+DHb4c8Fl8gz8g==",
- "requires": {
- "@sentry/core": "5.26.0",
- "@sentry/hub": "5.26.0",
- "@sentry/tracing": "5.26.0",
- "@sentry/types": "5.26.0",
- "@sentry/utils": "5.26.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/tracing": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.26.0.tgz",
- "integrity": "sha512-N9qWGmKrFJYKFTZBe8zVT3Qiju0+9bbNJuyun69T+fqP3PCDh+aRlRiP+OKTJyeCZjNG5HIvIlU8wTVUDoYfjQ==",
- "requires": {
- "@sentry/hub": "5.26.0",
- "@sentry/minimal": "5.26.0",
- "@sentry/types": "5.26.0",
- "@sentry/utils": "5.26.0",
- "tslib": "^1.9.3"
- }
- },
- "@sentry/types": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.26.0.tgz",
- "integrity": "sha512-ugpa1ePOhK55pjsyutAsa2tiJVQEyGYCaOXzaheg/3+EvhMdoW+owiZ8wupfvPhtZFIU3+FPOVz0d5k9K5d1rw=="
- },
- "@sentry/utils": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.26.0.tgz",
- "integrity": "sha512-F2gnHIAWbjiowcAgxz3VpKxY/NQ39NTujEd/NPnRTWlRynLFg3bAV+UvZFXljhYJeN3b/zRlScNDcpCWTrtZGw==",
- "requires": {
- "@sentry/types": "5.26.0",
- "tslib": "^1.9.3"
- }
- },
- "abort-controller": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
- "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
- "requires": {
- "event-target-shim": "^5.0.0"
- }
- },
- "acorn": {
- "version": "7.4.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
- },
- "acorn-jsx": {
- "version": "5.3.1",
- "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz",
- "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==",
- "dev": true
- },
- "agent-base": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz",
- "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==",
- "requires": {
- "debug": "4"
- }
- },
- "ajv": {
- "version": "6.12.6",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
- "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
- "dev": true,
- "requires": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- }
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
- "dev": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "argparse": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
- "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
- "dev": true,
- "requires": {
- "sprintf-js": "~1.0.2"
- }
- },
- "astral-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
- "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
- "dev": true
- },
- "async": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz",
- "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw=="
- },
- "asynckit": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
- "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
- },
- "balanced-match": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
- "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
- "dev": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer-writer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
- "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
- },
- "callsites": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
- "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
- "dev": true
- },
- "chalk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
- "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
- "dev": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
- }
- }
- },
- "color": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz",
- "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==",
- "requires": {
- "color-convert": "^1.9.1",
- "color-string": "^1.5.2"
- }
- },
- "color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
- },
- "color-string": {
- "version": "1.5.4",
- "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz",
- "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==",
- "requires": {
- "color-name": "^1.0.0",
- "simple-swizzle": "^0.2.2"
- }
- },
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
- },
- "colorspace": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz",
- "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==",
- "requires": {
- "color": "3.0.x",
- "text-hex": "1.0.x"
- }
- },
- "combined-stream": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
- "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "cookie": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
- "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
- },
- "core-util-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
- "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
- },
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "debug": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz",
- "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==",
- "requires": {
- "ms": "2.1.2"
- }
- },
- "deep-is": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
- "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
- "dev": true
- },
- "delayed-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
- "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
- },
- "discord.js": {
- "version": "12.3.1",
- "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.3.1.tgz",
- "integrity": "sha512-mSFyV/mbvzH12UXdS4zadmeUf8IMQOo/YdunubG1wWt1xjWvtaJz/s9CGsFD2B5pTw1W/LXxxUbrQjIZ/xlUdw==",
- "requires": {
- "@discordjs/collection": "^0.1.6",
- "@discordjs/form-data": "^3.0.1",
- "abort-controller": "^3.0.0",
- "node-fetch": "^2.6.0",
- "prism-media": "^1.2.2",
- "setimmediate": "^1.0.5",
- "tweetnacl": "^1.0.3",
- "ws": "^7.3.1"
- }
- },
- "doctrine": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
- "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2"
- }
- },
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "enabled": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz",
- "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ=="
- },
- "enquirer": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
- "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^4.1.1"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
- "dev": true
- },
- "eslint": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.11.0.tgz",
- "integrity": "sha512-G9+qtYVCHaDi1ZuWzBsOWo2wSwd70TXnU6UHA3cTYHp7gCTXZcpggWFoUVAMRarg68qtPoNfFbzPh+VdOgmwmw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.0.0",
- "@eslint/eslintrc": "^0.1.3",
- "ajv": "^6.10.0",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.2",
- "debug": "^4.0.1",
- "doctrine": "^3.0.0",
- "enquirer": "^2.3.5",
- "eslint-scope": "^5.1.1",
- "eslint-utils": "^2.1.0",
- "eslint-visitor-keys": "^2.0.0",
- "espree": "^7.3.0",
- "esquery": "^1.2.0",
- "esutils": "^2.0.2",
- "file-entry-cache": "^5.0.1",
- "functional-red-black-tree": "^1.0.1",
- "glob-parent": "^5.0.0",
- "globals": "^12.1.0",
- "ignore": "^4.0.6",
- "import-fresh": "^3.0.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "js-yaml": "^3.13.1",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "levn": "^0.4.1",
- "lodash": "^4.17.19",
- "minimatch": "^3.0.4",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.1",
- "progress": "^2.0.0",
- "regexpp": "^3.1.0",
- "semver": "^7.2.1",
- "strip-ansi": "^6.0.0",
- "strip-json-comments": "^3.1.0",
- "table": "^5.2.3",
- "text-table": "^0.2.0",
- "v8-compile-cache": "^2.0.3"
- }
- },
- "eslint-scope": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
- "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.3.0",
- "estraverse": "^4.1.1"
- }
- },
- "eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
- "dev": true,
- "requires": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "eslint-visitor-keys": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz",
- "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==",
- "dev": true
- },
- "espree": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz",
- "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==",
- "dev": true,
- "requires": {
- "acorn": "^7.4.0",
- "acorn-jsx": "^5.2.0",
- "eslint-visitor-keys": "^1.3.0"
- },
- "dependencies": {
- "eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true
- }
- }
- },
- "esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "dev": true
- },
- "esquery": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz",
- "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==",
- "dev": true,
- "requires": {
- "estraverse": "^5.1.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
- "esrecurse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
- "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
- "dev": true,
- "requires": {
- "estraverse": "^5.2.0"
- },
- "dependencies": {
- "estraverse": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
- "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
- "dev": true
- }
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true
- },
- "event-target-shim": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
- "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "fast-json-stable-stringify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
- "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
- "dev": true
- },
- "fast-levenshtein": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
- "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
- "dev": true
- },
- "fast-safe-stringify": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz",
- "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA=="
- },
- "fecha": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.0.tgz",
- "integrity": "sha512-aN3pcx/DSmtyoovUudctc8+6Hl4T+hI9GBBHLjA76jdZl7+b1sgh5g4k+u/GL3dTy1/pnYzKp69FpJ0OicE3Wg=="
- },
- "file-entry-cache": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
- "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
- "dev": true,
- "requires": {
- "flat-cache": "^2.0.1"
- }
- },
- "flat-cache": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
- "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
- "dev": true,
- "requires": {
- "flatted": "^2.0.0",
- "rimraf": "2.6.3",
- "write": "1.0.3"
- }
- },
- "flatted": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz",
- "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==",
- "dev": true
- },
- "fn.name": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz",
- "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "functional-red-black-tree": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
- "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
- "dev": true
- },
- "glob": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
- "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
- "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "globals": {
- "version": "12.4.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz",
- "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==",
- "dev": true,
- "requires": {
- "type-fest": "^0.8.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
- "dev": true
- },
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "import-fresh": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz",
- "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==",
- "dev": true,
- "requires": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- }
- },
- "imurmurhash": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
- "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
- },
- "is-arrayish": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
- "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "is-glob": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
- "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
- "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw=="
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "js-yaml": {
- "version": "3.14.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
- "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "esprima": "^4.0.0"
- }
- },
- "json-schema-traverse": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
- "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "kuler": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz",
- "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A=="
- },
- "levn": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
- "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- }
- },
- "lodash": {
- "version": "4.17.20",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
- "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
- "dev": true
- },
- "logform": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz",
- "integrity": "sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==",
- "requires": {
- "colors": "^1.2.1",
- "fast-safe-stringify": "^2.0.4",
- "fecha": "^4.2.0",
- "ms": "^2.1.1",
- "triple-beam": "^1.3.0"
- }
- },
- "lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0="
- },
- "mime-db": {
- "version": "1.44.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
- "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg=="
- },
- "mime-types": {
- "version": "2.1.27",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
- "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
- "requires": {
- "mime-db": "1.44.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.5",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
- "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
- "dev": true
- },
- "mkdirp": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
- "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.5"
- }
- },
- "ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
- },
- "natural-compare": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
- "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
- "dev": true
- },
- "node-fetch": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
- "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "one-time": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz",
- "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==",
- "requires": {
- "fn.name": "1.x.x"
- }
- },
- "optionator": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
- "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
- "dev": true,
- "requires": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.3"
- }
- },
- "packet-reader": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
- "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
- },
- "parent-module": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
- "dev": true,
- "requires": {
- "callsites": "^3.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "pg": {
- "version": "8.4.1",
- "resolved": "https://registry.npmjs.org/pg/-/pg-8.4.1.tgz",
- "integrity": "sha512-NRsH0aGMXmX1z8Dd0iaPCxWUw4ffu+lIAmGm+sTCwuDDWkpEgRCAHZYDwqaNhC5hG5DRMOjSUFasMWhvcmLN1A==",
- "requires": {
- "buffer-writer": "2.0.0",
- "packet-reader": "1.0.0",
- "pg-connection-string": "^2.4.0",
- "pg-pool": "^3.2.1",
- "pg-protocol": "^1.3.0",
- "pg-types": "^2.1.0",
- "pgpass": "1.x"
- }
- },
- "pg-connection-string": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.4.0.tgz",
- "integrity": "sha512-3iBXuv7XKvxeMrIgym7njT+HlZkwZqqGX4Bu9cci8xHZNT+Um1gWKqCsAzcC0d95rcKMU5WBg6YRUcHyV0HZKQ=="
- },
- "pg-format": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/pg-format/-/pg-format-1.0.4.tgz",
- "integrity": "sha1-J3NCNsKtP05QZJFaWTNOIAQKgo4="
- },
- "pg-int8": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
- "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
- },
- "pg-pool": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.2.1.tgz",
- "integrity": "sha512-BQDPWUeKenVrMMDN9opfns/kZo4lxmSWhIqo+cSAF7+lfi9ZclQbr9vfnlNaPr8wYF3UYjm5X0yPAhbcgqNOdA=="
- },
- "pg-protocol": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.3.0.tgz",
- "integrity": "sha512-64/bYByMrhWULUaCd+6/72c9PMWhiVFs3EVxl9Ct6a3v/U8+rKgqP2w+kKg/BIGgMJyB+Bk/eNivT32Al+Jghw=="
- },
- "pg-types": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
- "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
- "requires": {
- "pg-int8": "1.0.1",
- "postgres-array": "~2.0.0",
- "postgres-bytea": "~1.0.0",
- "postgres-date": "~1.0.4",
- "postgres-interval": "^1.1.0"
- }
- },
- "pgpass": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz",
- "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=",
- "requires": {
- "split": "^1.0.0"
- }
- },
- "postgres-array": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
- "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
- },
- "postgres-bytea": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
- "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
- },
- "postgres-date": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
- "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
- },
- "postgres-interval": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
- "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
- "requires": {
- "xtend": "^4.0.0"
- }
- },
- "prelude-ls": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
- "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
- "dev": true
- },
- "prism-media": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.2.2.tgz",
- "integrity": "sha512-I+nkWY212lJ500jLe4tN9tWO7nRiBAVdMv76P9kffZjYhw20raMlW1HSSvS+MLXC9MmbNZCazMrAr+5jEEgTuw=="
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
- },
- "progress": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
- "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
- "dev": true
- },
- "punycode": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
- "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
- "dev": true
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "regexpp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz",
- "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==",
- "dev": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
- "dev": true
- },
- "rimraf": {
- "version": "2.6.3",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
- "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
- },
- "semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
- "dev": true
- },
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU="
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- },
- "simple-swizzle": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
- "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=",
- "requires": {
- "is-arrayish": "^0.3.1"
- }
- },
- "slice-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
- "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "astral-regex": "^1.0.0",
- "is-fullwidth-code-point": "^2.0.0"
- }
- },
- "split": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
- "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==",
- "requires": {
- "through": "2"
- }
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
- "dev": true
- },
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA="
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.0"
- }
- },
- "strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true
- },
- "supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "table": {
- "version": "5.4.6",
- "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz",
- "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==",
- "dev": true,
- "requires": {
- "ajv": "^6.10.2",
- "lodash": "^4.17.14",
- "slice-ansi": "^2.1.0",
- "string-width": "^3.0.0"
- }
- },
- "text-hex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz",
- "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg=="
- },
- "text-table": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
- "dev": true
- },
- "through": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
- },
- "triple-beam": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
- "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
- },
- "tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
- },
- "tweetnacl": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz",
- "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw=="
- },
- "type-check": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
- "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
- "dev": true,
- "requires": {
- "prelude-ls": "^1.2.1"
- }
- },
- "type-fest": {
- "version": "0.8.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
- "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
- "dev": true
- },
- "uri-js": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz",
- "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==",
- "dev": true,
- "requires": {
- "punycode": "^2.1.0"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
- },
- "v8-compile-cache": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
- "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
- "dev": true
- },
- "which": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
- "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "winston": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz",
- "integrity": "sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==",
- "requires": {
- "@dabh/diagnostics": "^2.0.2",
- "async": "^3.1.0",
- "is-stream": "^2.0.0",
- "logform": "^2.2.0",
- "one-time": "^1.0.0",
- "readable-stream": "^3.4.0",
- "stack-trace": "0.0.x",
- "triple-beam": "^1.3.0",
- "winston-transport": "^4.4.0"
- }
- },
- "winston-transport": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz",
- "integrity": "sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==",
- "requires": {
- "readable-stream": "^2.3.7",
- "triple-beam": "^1.2.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "word-wrap": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
- "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
- "dev": true
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "write": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
- "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
- "dev": true,
- "requires": {
- "mkdirp": "^0.5.1"
- }
- },
- "ws": {
- "version": "7.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.3.1.tgz",
- "integrity": "sha512-D3RuNkynyHmEJIpD2qrgVkc9DQ23OrN/moAwZX4L8DfvszsJxpjQuUq3LMx6HoYji9fbIOBY18XWBsAux1ZZUA=="
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
- }
- }
-}
diff --git a/package.json b/package.json
deleted file mode 100644
index 81095fb..0000000
--- a/package.json
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "name": "woomy",
- "version": "2.0.0",
- "description": "beta",
- "main": "index.js",
- "dependencies": {
- "@sentry/node": "^5.26.0",
- "discord.js": "^12.3.1",
- "pg": "^8.4.1",
- "pg-format": "^1.0.4",
- "winston": "^3.3.3"
- },
- "devDependencies": {
- "eslint": "^7.11.0"
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/mudkipscience/woomy-v2.git"
- },
- "author": "Emily J. (mudkipscience)",
- "license": "AGPL-3.0",
- "bugs": {
- "url": "https://github.com/mudkipscience/woomy-v2/issues"
- },
- "homepage": "https://github.com/mudkipscience/woomy-v2#readme"
-}